Slide 1

Slide 1 text

@giginet ϞόΠϧج൫෦ ʙբ͕ؔʙ ΫοΫύουiOSΞϓϦͷ ഁյͱ૑଄ɺͦͯ͠ະདྷ

Slide 2

Slide 2 text

2 ࠷ॳͷίϛοτ ೥݄ ݱࡏ·Ͱͷίϛοτ ϦϦʔεස౓ िճ ϦϦʔεลΓͷ։ൃऀ਺ d ૯ίʔυߦ਺ ˞ݱࡏͷίʔυϕʔεʹҠߦޙ

Slide 3

Slide 3 text

3 ։ൃऀ͝ͱͷ1೔ͷྦྷੵϏϧυ࣌ؒ 1h 1.5h

Slide 4

Slide 4 text

4 27% 73% 155,000ߦ 58,700 ߦ Objective-C Swift

Slide 5

Slide 5 text

՝୊ 5 •1೔ྦྷੵ1࣌ؒ/ਓΛ্ճΔϏϧυ࣌ؒ •ࠓͳ͓25%͋ΔObjective-C •ϝϯς͞Εͯͳ͍ػೳ •ີ݁߹ա͗ͯͲ͔͜ม͑ΔͱյΕΔ

Slide 6

Slide 6 text

6 բ͕ؔ IUUQTKBXJLJQFEJBPSHXJLJ&##%&#$"&"%#&#"#&"

Slide 7

Slide 7 text

բ͕ؔͷ໨త 7 •ίʔυ੔ཧ •Objective-Cͷഁյ •Ϗϧυ࣌ؒͷվળ

Slide 8

Slide 8 text

ཧ૝ 8 .PEVMFT %ZOBNJD'SBNFXPSL "QQMJDBUJPO

Slide 9

Slide 9 text

ݱ࣮

Slide 10

Slide 10 text

ϚϧνϞδϡʔϧԽ 10 •Ωϟογϡ͕ޮ͖ɺ։ൃ࣌ͷϏϧυߴ଎Խ •ݹ͍࣮૷ͷӅṭ •ը໘ؒΛૄ݁߹ʹͰ͖Δ

Slide 11

Slide 11 text

Objective-C Bridging 11 11 MyApp-Bridging-Header.h MyApp-Swift.h

Slide 12

Slide 12 text

բ͕ؔͷΰʔϧ 12 •։ൃऀͷखݩͷϏϧυ࣌ؒΛ1೔30෼Ҏ಺ʹೲΊΔ •Objective-CΛ׬શʹফ͠ڈΔ

Slide 13

Slide 13 text

։ൃऀͷੜ࢈ੑΛ ͳΜͱ͔͢Δͷ͕ բ͕ؔ

Slide 14

Slide 14 text

View Model ViewController

Slide 15

Slide 15 text

15 View Model ViewController ϩδοΫΛ࣋ͭ7JFX XXXManager γϯάϧτϯͷσʔλιʔε .BTTJWF7JFX$POUSPMMFS ڞ௨Խ͞ΕͯංେԽͨ͠Ϟσϧ ☠ σουίʔυ ີ݁߹ 7JFXͷܧঝɺ࢖͍ճ͠ ৮ͬͯ͸ ͍͚ͳ͍΍ͭ ࠞಱ

Slide 16

Slide 16 text

DataStore UseCase Presenter ViewBuilder View Wireframe Entity DataStore Entity UseCase Interactor Presentation Layer Domain Layer Data Layer Repository $PPLQBE7*1&3

Slide 17

Slide 17 text

17 Tsukuru Cookpad 7*1&3ԽҎલͷ.7$ 0CKFDUJWF$4XJGUͷࠞࡏ 7*1&3Խޙͷը໘ͷू߹ 4XJGU ɾɾɾ ࠞಱ Cookpad

Slide 18

Slide 18 text

18 Tsukuru Cookpad 7*1&3ԽҎલͷ.7$ 0CKFDUJWF$4XJGUͷࠞࡏ 7*1&3Խޙͷը໘ͷू߹ 4XJGU ɾɾɾ 7*1&3ΞϓϦέʔγϣϯ Cookpad

Slide 19

Slide 19 text

طଘͷΞʔΩςΫνϟΛ ੜ͔ͨ͠ ϚϧνϞδϡʔϧԽ

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

21 YAML yonaskolb/XcodeGen ࣗಈੜ੒

Slide 22

Slide 22 text

22 ৽نλʔήοτ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

24 σΟϨΫτϦߏ଄ʹΑΓ ॴଐ͢ΔϏϧυλʔήοτ͕ อূ͞ΕΔ

Slide 25

Slide 25 text

xcodeprojΛഁյͨ͠Β Ϟδϡʔϧಋೖ͕༰қʹ

Slide 26

Slide 26 text

ϚϧνϞδϡʔϧͷ ಋೖ 26

Slide 27

Slide 27 text

բ͕ؔͷίϯηϓτ 27 •େ͖ͳॻ͖׵͑Λڧ੍͠ͳ͍ •Objective-CΛ࣋ͪࠐ·ͤͳ͍ •࣮૷ৄࡉ͸VIPERΞϓϦέʔγϣϯʹӅṭ

Slide 28

Slide 28 text

բ͕ؔͷίϯηϓτ 28 •େ͖ͳॻ͖׵͑Λڧ੍͠ͳ͍ •Objective-CΛ࣋ͪࠐ·ͤͳ͍ •࣮૷ৄࡉ͸VIPERΞϓϦέʔγϣϯʹӅṭ

Slide 29

Slide 29 text

բ͕ؔͷίϯηϓτ 29 •େ͖ͳॻ͖׵͑Λڧ੍͠ͳ͍ •Objective-CΛ࣋ͪࠐ·ͤͳ͍ •࣮૷ৄࡉ͸VIPERΞϓϦέʔγϣϯʹӅṭ

Slide 30

Slide 30 text

30 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C

Slide 31

Slide 31 text

31 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C

Slide 32

Slide 32 text

32 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C

Slide 33

Slide 33 text

33 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C

Slide 34

Slide 34 text

34 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C

Slide 35

Slide 35 text

35 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C ந৅౓

Slide 36

Slide 36 text

36 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Environment ۩ମతͳ࣮૷ ΠϯλʔϑΣΠεͷΈΛఏڙ

Slide 37

Slide 37 text

37 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Environment բ͕ؔήʔτ΢ΣΠ

Slide 38

Slide 38 text

38 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Bridging HeaderΛ ࣋ͨͳ͍

Slide 39

Slide 39 text

39 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Objective-C Bridge͸ ΞϓϦͰ͚ͩ࣋ͭ

Slide 40

Slide 40 text

Objective-CΛ ࢓૊Έతʹഉআ SwiftԽͷ༏ઌॱҐΛՄࢹԽ

Slide 41

Slide 41 text

41 Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Ӆṭ͍ͨ͠

Slide 42

Slide 42 text

42 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Environment ΠϯλʔϑΣΠεͷΈΛఏڙ

Slide 43

Slide 43 text

43 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Environment ݹ͍ϥΠϒϥϦ΁ͷґଘ͸ ΞϓϦͷΈ͕࣋ͭ ۩ମతͳ࣮૷

Slide 44

Slide 44 text

44 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Environment ݹ͍ϥΠϒϥϦ΁ͷґଘ͸ ΞϓϦͷΈ͕࣋ͭ ۩ମతͳ࣮૷ ػೳͷ։ൃ࣌ʹݹ͍ϥΠϒϥϦΛ ҙࣝ͠ͳͯ͘ࡁΉΑ͏ʹ

Slide 45

Slide 45 text

45 APIClient.share Cookpad Tests 45 Method Swizzling API Stub

Slide 46

Slide 46 text

46 Environment CookpadEnvironment TestingEnvironment Cookpad Tests Network Logger ը໘ભҠ

Slide 47

Slide 47 text

47 CookpadCore CookpadComponent Cookpad ɾɾɾ Cookpad Tsukuru Feature A Feature B Feature C Ҡߦத Ҡߦத

Slide 48

Slide 48 text

՝୊ 48 Bundle Dynamic Linking Time Tsukuru׬શഁյ Feature moduleҠߦ Ϟδϡʔϧؒͷґଘ ద੾ͳϞδϡʔϧ෼ׂ୯Ґ ։ൃ૊৫ͷεέʔϧ Objective-C׬શഁյ

Slide 49

Slide 49 text

͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ !HJHJOFU