Slide 1

Slide 1 text

iOSΞϓϦ։ൃʹ΋DIπʔϧΛʂ 2018/01/29 Otemachi.swift x Kyobashi.swift #02

Slide 2

Slide 2 text

෱ඌ ޾ଠ࿠ (@haptaro) - Sansanגࣜձࣾ Eightࣄۀ෦ - ϞόΠϧΞϓϦΤϯδχΞ - iOSϝΠϯɺAndroid΋গͣͭ͠ 2

Slide 3

Slide 3 text

લఏ
 ࣮ࡍʹಋೖͨ͠Θ͚Ͱ͸ͳ͍ɻ

Slide 4

Slide 4 text

લఏ
 ࣮ࡍʹಋೖͨ͠Θ͚Ͱ͸ͳ͍ɻ ݕ౼͍ͨ͠ʂ

Slide 5

Slide 5 text

ભҠઌͷActivityͷϑΟʔϧυʹ@InjectͬͯΞϊςʔγϣϯ͍ͭͯΔͰ͠ΐʁ
 Dagger͕ίʔυΛࣗಈੜ੒ͯ͠ϑΟʔϧυʹ஋Λ୅ೖͯ͘͠ΕΔ͔Βɺࣗ෼ Ͱੜ੒ͤͣʹstartActivity͍͍ͤͯ͞Αʂ ಉ͡ػೳΛiOSͰ։ൃͨ͋͠ͱ
 AndroidͷίʔυϨϏϡʔʹͯ

Slide 6

Slide 6 text

!!!
 (iOSͷͱ͖͸ͳΜ͔৭ʑ࡞ͬͨͷʹ…)

Slide 7

Slide 7 text

͔֬ʹAndroidͰ͸DaggerΑ͘ฉ͚͘Ͳɺ iOSͷDIπʔϧ͸Ͳ͏ͳͷͩΖ͏

Slide 8

Slide 8 text

iOSͰDIπʔϧΛಋೖ͞Ε͍ͯΔํ

Slide 9

Slide 9 text

ຊ೔͓࿩͢Δ͜ͱ - DIͱ͸ʁ - iOSΞϓϦ։ൃͰDIπʔϧΛ࢖͏ͳΒ - ͦͷதͰDIKitͷ৮ͬͯΈͨ 9

Slide 10

Slide 10 text

ͦ΋ͦ΋DI(Dependency Injection)ͱ͸ʁ

Slide 11

Slide 11 text

ґଘ͍ͯ͠ΔΦϒδΣΫτΛ֎͔ΒೖΕΔ
 σβΠϯύλʔϯ

Slide 12

Slide 12 text

ͨͱ͑͹ɺ
 ΦϒδΣΫτAͷΠϯελϯεԽʹ͸ΦϒδΣΫτBͱC͕ඞཁͰɺ
 ΦϒδΣΫτBͷΠϯελϯεԽʹ͸ΦϒδΣΫτD͕ඞཁ A C B D

Slide 13

Slide 13 text

ΦϒδΣΫτάϥϑ: ΦϒδΣΫτͷґଘؔ܎Λද͢πϦʔ A C B D

Slide 14

Slide 14 text

ͦΕͧΕΦϒδΣΫτΛ֎͔ΒೖΕΔʂ A C B D ϓϩτίϧ

Slide 15

Slide 15 text

ͦΕͧΕΦϒδΣΫτΛ֎͔ΒೖΕΔʂ A C B D

Slide 16

Slide 16 text

ͲͷΑ͏ʹΦϒδΣΫτΛೖΕΔͷ͔ʁೖΕํ 16 ɾΠχγϟϥΠβInjectionɾɾɾinit()ܦ༝ͰΦϒδΣΫτΛೖΕΔɻҰ൪Α ͘ݟ͔͚Δ͕ɺViewController΍AppDelegateʹ͸࢖͑ͳ͍ ɾϓϩύςΟInjectionɾɾɾ௚઀ϓϩύςΟʹΦϒδΣΫτΛೖΕΔ ɾϝιουInjectionɾɾɾϝιουܦ༝ͰΦϒδΣΫτΛೖΕΔ

Slide 17

Slide 17 text

DI͕͋ΔͱԿ͕خ͍͠ͷʁ

Slide 18

Slide 18 text

- ΦϒδΣΫτͷґଘؔ܎ΛΫϥεͷ֎ʹग़ͤΔͷͰɺϞδϡʔ ϧੑ্͕͕Γ࠶ར༻Ͱ͖Δ - ίϯϙʔωϯτಉ͕࢜ૄ݁߹ʹͳΓมߋʹॊೈʹͳΔ - ΦϒδΣΫτͷࠩ͠ସ͕͑Մೳʹ
 (ϢχοτςετͷࡍʹϞοΫΦϒδΣΫτͷࠩ͠ସ͑ͳͲ) 18

Slide 19

Slide 19 text

- DI͸ʮґଘ͍ͯ͠ΔΦϒδΣΫτΛ֎͔ΒೖΕΔ୯ͳΔσβΠ ϯύλʔϯʯ - ΦϒδΣΫτͷೖΕํʹ΋छྨ͕͋Δ 19

Slide 20

Slide 20 text

ͱ͸͍͑ɺґଘؔ܎͕૿͖͑ͯͯ΋खಈͰґ ଘΦϒδΣΫτΛDI͍ͯ͘͠ͷ͔…

Slide 21

Slide 21 text

ͦ͜ͰDIαϙʔτπʔϧ✨

Slide 22

Slide 22 text

iOSΞϓϦͰ࢖͑ͦ͏ͳDIαϙʔτπʔϧ(Swift) - Swinjectɾɾɾ@yoichitgy͞Μ͕࡞ऀɻDIίϯςφɻݱࡏͷiOSͷDI πʔϧͷσϑΝΫτελϯμʔυʁ - DIKitɾɾɾ@ishkawa͞Μ͕࡞ऀɻ͝ຊਓ͕iOSDC 2017Ͱ঺հ - CleanseɾɾɾSquare੡ 22

Slide 23

Slide 23 text

ґଘؔ܎ͷղܾͷλΠϛϯά 23 ɾಈతDIɾɾɾ࣮ߦ࣌ʹґଘؔ܎ͷղܾ
 ex. Swinject
 ɾ੩తDIɾɾɾίϯύΠϧ࣌ʹґଘؔ܎ͷղܾ
 ex. DIKit, Cake PatternΛ༻͍ͨDI, ReaderϞφυΛ༻͍ͨDI

Slide 24

Slide 24 text

੩తDI͸ಈతDIΑΓԿ͕ྑ͍ͷʁ - ҆શ: ίϯύΠϧ࣌ͷґଘؔ܎ͷղܾ͕͞ΕΔͷͰɺສ͕Ұؒҧ͍ͬͯͯ΋ ίϯύΠϧΤϥʔʹͳΓɺ࣮ߦ࣌Ϋϥογϡ͸๷͛Δ - ࣮ߦ࣌΋গ͠͸ૣ͘: ґଘؔ܎Λղܾͨ͠ίʔυ͕ίϯύΠϧ࣌ʹͰ͖Δͷ Ͱ࣮ߦ࣌ͷ଎౓Λ্͛ΒΕΔ
 ͨͩ͠ɺن໛ʹΑͬͯ͸ίϯύΠϧ͕࣌ؒ௕͘ͳΔͱ͍͏σϝϦοτ΋͋Δ ͔΋ 24

Slide 25

Slide 25 text

Swift͸҆શͳݴޠɻ ΍ͬͺΓίϯύΠϧ࣌ʹґଘؔ܎ͷղܾΛ ͍ͨ͠

Slide 26

Slide 26 text

ίϯύΠϧ࣌ʹίʔυΛࣗಈੜ੒ͯ͠ґଘؔ܎ ΛղܾͰ͖ΔDIKitͷExample৮ͬͯΈͨ

Slide 27

Slide 27 text

ґଘؔ܎Λఆٛ

Slide 28

Slide 28 text

ґଘؔ܎Λఆٛ

Slide 29

Slide 29 text

ΠϯελϯεΛఏڙ͢Δ provideϝιουΛఆٛ

Slide 30

Slide 30 text

Dependency͔ΒϏϧυ࣌ʹ
 ґଘؔ܎Λղܾ͢ΔίʔυΛࣗಈੜ੒

Slide 31

Slide 31 text

Storyboardܦ༝ͷViewController ͷΠϯελϯεԽʹ΋ରԠ

Slide 32

Slide 32 text

Storyboardܦ༝ͷViewController ͷΠϯελϯεԽʹ΋ରԠ

Slide 33

Slide 33 text

ͲͷΑ͏ʹґଘؔ܎Λղܾ͍ͯ͠Δͷ͔ 33 JavaͷΑ͏ʹΞϊςʔγϣϯ͕Swiftʹ͸ͳ͍ͷͰϓϩτί ϧΛϚʔΫͱͯ͠࢖༻͠ɺSourceKittenͰίʔυղऍɾੜ੒ ੜ੒͞ΕͨίʔυͰґଘؔ܎Λղܾ

Slide 34

Slide 34 text

DIKit৮ͬͯΈͯ - Ϗϧυ࣌ʹίʔυ͕ࣗಈੜ੒͞ΕΔͷͰɺ࿙Ε͕͋ΔͱίϯύΠϧ ΤϥʔʹͳΔͷͰΘ͔Γ΍͍͢ - Storyboardܦ༝ͰͷViewControllerΠϯελϯεԽ΋Ͱ͖Δ - Dagger2΍Swinjectʹൺ΂Δͱ͔ͳΓγϯϓϧ
 (ٯʹείʔϓͳͲͷ֓೦͸ࠓ͸ͳ͘ɺDIίϯςφͱ·Ͱ͸͍͔ͳ͍) 34

Slide 35

Slide 35 text

·ͱΊ ɾSwiftͳΒ΍ͬͺΓίϯύΠϧ࣌ʹґଘؔ܎Λ ղܾ͍ͨ͠ ɾDIKit͸γϯϓϧͰಋೖίετ͸௿ͦ͏ ɾࠓޙ΋DIKitͷϦϙδτϦWatch͍ͯ͜͠͏

Slide 36

Slide 36 text

ͨͩ…

Slide 37

Slide 37 text

ɾͦ΋ͦ΋ϓϩμΫτͷن໛΍ෳࡶੑɺϢχοτςετͷ ༗ແʹΑͬͯ͸DIαϙʔτπʔϧΛೖΕͣ·ͣ͸खಈDIͰ ΋ྑ͍͔΋ ɾDIαϙʔτπʔϧʹΑͬͯػೳͷࠩҟ͕͋ΔͷͰԿ͕ద ͍ͯ͠Δ͔൑அ͕ඞཁ

Slide 38

Slide 38 text

DIαϙʔτπʔϧΛ࢖͍ͬͯΔํ
 ࠙਌ձʹͰ΋͓࿩ฉ͔ͤͯԼ͍͞

Slide 39

Slide 39 text

Your business network

Slide 40

Slide 40 text

ࢀߟࢿྉ - DIKit: https://github.com/ishkawa/DIKit - ishkawa͞Μͷϒϩά: http://blog.ishkawa.org/2017/09/18/1505701774/ - iOSΞϓϦͷઃܭͱDependency Injection: https://speakerdeck.com/ yonekawa/iosapurifalseshe-ji-todependency-injection - Swinject: https://github.com/Swinject/Swinject - Dependency Injection in Swift 2.x: https://niconare.nicovideo.jp/watch/kn1091 40