Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Cookpad TechConf 2019 〜霞が関〜 クックパッドiOSアプリの 破壊と創造、そして未来
giginet
February 27, 2019
Technology
13
4.7k
Cookpad TechConf 2019 〜霞が関〜 クックパッドiOSアプリの 破壊と創造、そして未来
https://techconf.cookpad.com/2019/
giginet
February 27, 2019
Tweet
Share
More Decks by giginet
See All by giginet
giginet
0
1.7k
giginet
4
2.1k
giginet
3
6k
giginet
0
900
giginet
1
6.4k
giginet
0
89
giginet
0
180
giginet
2
190
giginet
3
240
Other Decks in Technology
See All in Technology
kekeke_47
0
300
pinboro
0
2.2k
satoryu
0
2.2k
kappa4
4
2.2k
mmarukaw
0
1.4k
yuhta28
1
220
clustervr
0
200
clustervr
0
200
ray_30cm_ns
0
280
tdys13
5
3.5k
asaju7142501
0
290
hhiroshell
7
400
Featured
See All Featured
zenorocha
297
40k
holman
448
130k
caitiem20
308
17k
pedronauck
652
110k
brad_frost
156
6.4k
wjessup
338
16k
maltzj
500
36k
geeforr
332
29k
ddemaree
274
31k
andyhume
62
3.4k
searls
204
35k
deanohume
295
27k
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