Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cookpad TechConf 2019 〜霞が関〜 クックパッドiOSアプリの 破壊と創造...
Search
giginet
PRO
February 27, 2019
Technology
14
7k
Cookpad TechConf 2019 〜霞が関〜 クックパッドiOSアプリの 破壊と創造、そして未来
https://techconf.cookpad.com/2019/
giginet
PRO
February 27, 2019
Tweet
Share
More Decks by giginet
See All by giginet
Creating Intuitive Developer Tool in Swift
giginet
PRO
0
1.1k
Mergeable Libraryで 高速なアプリ起動を実現しよう!
giginet
PRO
2
4.6k
5分でわかるExplicitly Built Modules
giginet
PRO
0
690
Introduction for Open Source Swift Workshop
giginet
PRO
0
1.5k
Swift Packageを使った 巨大な依存グラフのキャッシュ戦略
giginet
PRO
5
5.1k
Deep Dive into Mergeable Library
giginet
PRO
1
1.8k
Go beyond the Actor Boundary ~ Swift 6へのConcurrency対応 ~
giginet
PRO
1
3.5k
新しいビルドツールScipioのご紹介
giginet
PRO
3
1.1k
ポケモンで学ぶiOS 16弾丸ツアー 🚅
giginet
PRO
1
960
Other Decks in Technology
See All in Technology
GeometryReaderやスクロールを用いた表現と紐解き方
fumiyasac0921
0
100
comilioとCloudflare、そして未来へと向けて
oliver_diary
6
440
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
370
ドメイン駆動設計の実践により事業の成長スピードと保守性を両立するショッピングクーポン
lycorptech_jp
PRO
10
1.2k
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.1k
Building Scalable Backend Services with Firebase
wisdommatt
0
110
2025年に挑戦したいこと
molmolken
0
150
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
4
910
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
170
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
1
16k
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
650
デジタルアイデンティティ人材育成推進ワーキンググループ 翻訳サブワーキンググループ 活動報告 / 20250114-OIDF-J-EduWG-TranslationSWG
oidfj
0
510
Featured
See All Featured
Faster Mobile Websites
deanohume
305
30k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
Facilitating Awesome Meetings
lara
51
6.2k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Embracing the Ebb and Flow
colly
84
4.5k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Making Projects Easy
brettharned
116
6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
19
2.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
The Language of Interfaces
destraynor
155
24k
Transcript
@giginet ϞόΠϧج൫෦ ʙբ͕ؔʙ ΫοΫύουiOSΞϓϦͷ ഁյͱɺͦͯ͠ະདྷ
2 ࠷ॳͷίϛοτ ݄ ݱࡏ·Ͱͷίϛοτ ϦϦʔεස िճ ϦϦʔεลΓͷ։ൃऀ d
૯ίʔυߦ ˞ݱࡏͷίʔυϕʔεʹҠߦޙ
3 ։ൃऀ͝ͱͷ1ͷྦྷੵϏϧυ࣌ؒ 1h 1.5h
4 27% 73% 155,000ߦ 58,700 ߦ Objective-C Swift
՝ 5 •1ྦྷੵ1࣌ؒ/ਓΛ্ճΔϏϧυ࣌ؒ •ࠓͳ͓25%͋ΔObjective-C •ϝϯς͞Εͯͳ͍ػೳ •ີ݁߹ա͗ͯͲ͔͜ม͑ΔͱյΕΔ
6 բ͕ؔ IUUQTKBXJLJQFEJBPSHXJLJ&##%&#$"&"%#&#"#&"
բ͕ؔͷత 7 •ίʔυཧ •Objective-Cͷഁյ •Ϗϧυ࣌ؒͷվળ
ཧ 8 .PEVMFT %ZOBNJD'SBNFXPSL "QQMJDBUJPO
ݱ࣮
ϚϧνϞδϡʔϧԽ 10 •Ωϟογϡ͕ޮ͖ɺ։ൃ࣌ͷϏϧυߴԽ •ݹ͍࣮ͷӅṭ •ը໘ؒΛૄ݁߹ʹͰ͖Δ
Objective-C Bridging 11 11 MyApp-Bridging-Header.h MyApp-Swift.h
բ͕ؔͷΰʔϧ 12 •։ൃऀͷखݩͷϏϧυ࣌ؒΛ130ҎʹೲΊΔ •Objective-CΛશʹফ͠ڈΔ
։ൃऀͷੜ࢈ੑΛ ͳΜͱ͔͢Δͷ͕ բ͕ؔ
View Model ViewController
15 View Model ViewController ϩδοΫΛ࣋ͭ7JFX XXXManager γϯάϧτϯͷσʔλιʔε .BTTJWF7JFX$POUSPMMFS ڞ௨Խ͞ΕͯංେԽͨ͠Ϟσϧ ☠
σουίʔυ ີ݁߹ 7JFXͷܧঝɺ͍ճ͠ ৮ͬͯ ͍͚ͳ͍ͭ ࠞಱ
DataStore UseCase Presenter ViewBuilder View Wireframe Entity DataStore Entity UseCase
Interactor Presentation Layer Domain Layer Data Layer Repository $PPLQBE7*1&3
17 Tsukuru Cookpad 7*1&3ԽҎલͷ.7$ 0CKFDUJWF$ 4XJGUͷࠞࡏ 7*1&3Խޙͷը໘ͷू߹ 4XJGU ɾɾɾ ࠞಱ
Cookpad
18 Tsukuru Cookpad 7*1&3ԽҎલͷ.7$ 0CKFDUJWF$ 4XJGUͷࠞࡏ 7*1&3Խޙͷը໘ͷू߹ 4XJGU ɾɾɾ 7*1&3ΞϓϦέʔγϣϯ
Cookpad
طଘͷΞʔΩςΫνϟΛ ੜ͔ͨ͠ ϚϧνϞδϡʔϧԽ
20
21 YAML yonaskolb/XcodeGen ࣗಈੜ
22 ৽نλʔήοτ
23 targets: CookpadCore: type: framework platform: iOS sources: - CookpadCore
settings: base: PRODUCT_BUNDLE_IDENTIFIER: com.cookpad.CookpadCore scheme: testTargets: - CookpadCoreTests dependencies: - sdk: Foundation.framework - carthage: Result - carthage: RxCocoa - carthage: RxSwift
24 σΟϨΫτϦߏʹΑΓ ॴଐ͢ΔϏϧυλʔήοτ͕ อূ͞ΕΔ
xcodeprojΛഁյͨ͠Β Ϟδϡʔϧಋೖ͕༰қʹ
ϚϧνϞδϡʔϧͷ ಋೖ 26
բ͕ؔͷίϯηϓτ 27 •େ͖ͳॻ͖͑Λڧ੍͠ͳ͍ •Objective-CΛ࣋ͪࠐ·ͤͳ͍ •࣮ৄࡉVIPERΞϓϦέʔγϣϯʹӅṭ
բ͕ؔͷίϯηϓτ 28 •େ͖ͳॻ͖͑Λڧ੍͠ͳ͍ •Objective-CΛ࣋ͪࠐ·ͤͳ͍ •࣮ৄࡉVIPERΞϓϦέʔγϣϯʹӅṭ
բ͕ؔͷίϯηϓτ 29 •େ͖ͳॻ͖͑Λڧ੍͠ͳ͍ •Objective-CΛ࣋ͪࠐ·ͤͳ͍ •࣮ৄࡉVIPERΞϓϦέʔγϣϯʹӅṭ
30 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C
31 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C
32 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C
33 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C
34 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C
35 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C ந
36 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Environment ۩ମతͳ࣮ ΠϯλʔϑΣΠεͷΈΛఏڙ
37 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Environment բ͕ؔήʔτΣΠ
38 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Bridging HeaderΛ ࣋ͨͳ͍
39 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Objective-C Bridge ΞϓϦͰ͚ͩ࣋ͭ
Objective-CΛ Έతʹഉআ SwiftԽͷ༏ઌॱҐΛՄࢹԽ
41 Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature
C Ӆṭ͍ͨ͠
42 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Environment ΠϯλʔϑΣΠεͷΈΛఏڙ
43 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Environment ݹ͍ϥΠϒϥϦͷґଘ ΞϓϦͷΈ͕࣋ͭ ۩ମతͳ࣮
44 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Environment ݹ͍ϥΠϒϥϦͷґଘ ΞϓϦͷΈ͕࣋ͭ ۩ମతͳ࣮ ػೳͷ։ൃ࣌ʹݹ͍ϥΠϒϥϦΛ ҙࣝ͠ͳͯ͘ࡁΉΑ͏ʹ
45 APIClient.share Cookpad Tests 45 Method Swizzling API Stub
46 Environment CookpadEnvironment TestingEnvironment Cookpad Tests Network Logger ը໘ભҠ
47 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature
B Feature C Ҡߦத Ҡߦத
՝ 48 Bundle Dynamic Linking Time Tsukuruશഁյ Feature moduleҠߦ Ϟδϡʔϧؒͷґଘ
దͳϞδϡʔϧׂ୯Ґ ։ൃ৫ͷεέʔϧ Objective-Cશഁյ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ !HJHJOFU