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
iOSアプリ開発にもDIツールを!
Search
haptaro
January 29, 2018
Programming
5
1.3k
iOSアプリ開発にもDIツールを!
Otemachi.swift × Kyobashi.swift #02
haptaro
January 29, 2018
Tweet
Share
More Decks by haptaro
See All by haptaro
通信環境が不安定でも心地よい体験を
kotaro
0
92
アニメーション実践入門
kotaro
3
590
はじめてのRxSwift体験記
kotaro
3
640
Swiftで気持ち良く開発したアプリを気持ち良くSubmitする
kotaro
0
7.3k
Other Decks in Programming
See All in Programming
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
160
The Nature of Complexity in John Ousterhout’s Philosophy of Software Design
philipschwarz
PRO
0
160
State of Namespace
tagomoris
5
2.4k
Serving TUIs over SSH with Go
caarlos0
0
550
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
150
VitestのIn-Source Testingが便利
taro28
8
2.4k
Golangci-lint v2爆誕: 君たちはどうすべきか
logica0419
1
230
REALITY コマンド作成チュートリアル
nishiuriraku
0
120
AIコーディングエージェントを 「使いこなす」ための実践知と現在地 in ログラス / How to Use AI Coding Agent in Loglass
rkaga
4
1.2k
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
110
監視 やばい
syossan27
12
10k
Laravel × Clean Architecture
bumptakayuki
PRO
0
130
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Build your cross-platform service in a week with App Engine
jlugia
230
18k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Speed Design
sergeychernyshev
29
920
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
Music & Morning Musume
bryan
47
6.5k
Practical Orchestrator
shlominoach
187
11k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
How GitHub (no longer) Works
holman
314
140k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
iOSΞϓϦ։ൃʹDIπʔϧΛʂ 2018/01/29 Otemachi.swift x Kyobashi.swift #02
ඌ ଠ (@haptaro) - Sansanגࣜձࣾ Eightࣄۀ෦ - ϞόΠϧΞϓϦΤϯδχΞ - iOSϝΠϯɺAndroidগͣͭ͠
2
લఏ ࣮ࡍʹಋೖͨ͠Θ͚Ͱͳ͍ɻ
લఏ ࣮ࡍʹಋೖͨ͠Θ͚Ͱͳ͍ɻ ݕ౼͍ͨ͠ʂ
ભҠઌͷActivityͷϑΟʔϧυʹ@InjectͬͯΞϊςʔγϣϯ͍ͭͯΔͰ͠ΐʁ Dagger͕ίʔυΛࣗಈੜͯ͠ϑΟʔϧυʹΛೖͯ͘͠ΕΔ͔Βɺࣗ ͰੜͤͣʹstartActivity͍͍ͤͯ͞Αʂ ಉ͡ػೳΛiOSͰ։ൃͨ͋͠ͱ AndroidͷίʔυϨϏϡʔʹͯ
!!! (iOSͷͱ͖ͳΜ͔৭ʑ࡞ͬͨͷʹ…)
͔֬ʹAndroidͰDaggerΑ͘ฉ͚͘Ͳɺ iOSͷDIπʔϧͲ͏ͳͷͩΖ͏
iOSͰDIπʔϧΛಋೖ͞Ε͍ͯΔํ
ຊ͓͢Δ͜ͱ - DIͱʁ - iOSΞϓϦ։ൃͰDIπʔϧΛ͏ͳΒ - ͦͷதͰDIKitͷ৮ͬͯΈͨ 9
ͦͦDI(Dependency Injection)ͱʁ
ґଘ͍ͯ͠ΔΦϒδΣΫτΛ֎͔ΒೖΕΔ σβΠϯύλʔϯ
ͨͱ͑ɺ ΦϒδΣΫτAͷΠϯελϯεԽʹΦϒδΣΫτBͱC͕ඞཁͰɺ ΦϒδΣΫτBͷΠϯελϯεԽʹΦϒδΣΫτD͕ඞཁ A C B D
ΦϒδΣΫτάϥϑ: ΦϒδΣΫτͷґଘؔΛද͢πϦʔ A C B D
ͦΕͧΕΦϒδΣΫτΛ֎͔ΒೖΕΔʂ A C B D ϓϩτίϧ
ͦΕͧΕΦϒδΣΫτΛ֎͔ΒೖΕΔʂ A C B D
ͲͷΑ͏ʹΦϒδΣΫτΛೖΕΔͷ͔ʁೖΕํ 16 ɾΠχγϟϥΠβInjectionɾɾɾinit()ܦ༝ͰΦϒδΣΫτΛೖΕΔɻҰ൪Α ͘ݟ͔͚Δ͕ɺViewControllerAppDelegateʹ͑ͳ͍ ɾϓϩύςΟInjectionɾɾɾϓϩύςΟʹΦϒδΣΫτΛೖΕΔ ɾϝιουInjectionɾɾɾϝιουܦ༝ͰΦϒδΣΫτΛೖΕΔ
DI͕͋ΔͱԿ͕خ͍͠ͷʁ
- ΦϒδΣΫτͷґଘؔΛΫϥεͷ֎ʹग़ͤΔͷͰɺϞδϡʔ ϧੑ্͕͕Γ࠶ར༻Ͱ͖Δ - ίϯϙʔωϯτಉ͕࢜ૄ݁߹ʹͳΓมߋʹॊೈʹͳΔ - ΦϒδΣΫτͷࠩ͠ସ͕͑Մೳʹ (ϢχοτςετͷࡍʹϞοΫΦϒδΣΫτͷࠩ͠ସ͑ͳͲ) 18
- DIʮґଘ͍ͯ͠ΔΦϒδΣΫτΛ֎͔ΒೖΕΔ୯ͳΔσβΠ ϯύλʔϯʯ - ΦϒδΣΫτͷೖΕํʹछྨ͕͋Δ 19
ͱ͍͑ɺґଘ͕ؔ૿͖͑ͯͯखಈͰґ ଘΦϒδΣΫτΛDI͍ͯ͘͠ͷ͔…
ͦ͜ͰDIαϙʔτπʔϧ✨
iOSΞϓϦͰ͑ͦ͏ͳDIαϙʔτπʔϧ(Swift) - Swinjectɾɾɾ@yoichitgy͞Μ͕࡞ऀɻDIίϯςφɻݱࡏͷiOSͷDI πʔϧͷσϑΝΫτελϯμʔυʁ - DIKitɾɾɾ@ishkawa͞Μ͕࡞ऀɻ͝ຊਓ͕iOSDC 2017Ͱհ - CleanseɾɾɾSquare 22
ґଘؔͷղܾͷλΠϛϯά 23 ɾಈతDIɾɾɾ࣮ߦ࣌ʹґଘؔͷղܾ ex. Swinject ɾ੩తDIɾɾɾίϯύΠϧ࣌ʹґଘؔͷղܾ ex. DIKit, Cake PatternΛ༻͍ͨDI,
ReaderϞφυΛ༻͍ͨDI
੩తDIಈతDIΑΓԿ͕ྑ͍ͷʁ - ҆શ: ίϯύΠϧ࣌ͷґଘؔͷղܾ͕͞ΕΔͷͰɺສ͕Ұؒҧ͍ͬͯͯ ίϯύΠϧΤϥʔʹͳΓɺ࣮ߦ࣌Ϋϥογϡ͛Δ - ࣮ߦ࣌গ͠ૣ͘: ґଘؔΛղܾͨ͠ίʔυ͕ίϯύΠϧ࣌ʹͰ͖Δͷ Ͱ࣮ߦ࣌ͷΛ্͛ΒΕΔ ͨͩ͠ɺنʹΑͬͯίϯύΠϧ͕࣌ؒ͘ͳΔͱ͍͏σϝϦοτ͋Δ
͔ 24
Swift҆શͳݴޠɻ ͬͺΓίϯύΠϧ࣌ʹґଘؔͷղܾΛ ͍ͨ͠
ίϯύΠϧ࣌ʹίʔυΛࣗಈੜͯ͠ґଘؔ ΛղܾͰ͖ΔDIKitͷExample৮ͬͯΈͨ
ґଘؔΛఆٛ
ґଘؔΛఆٛ
ΠϯελϯεΛఏڙ͢Δ provideϝιουΛఆٛ
Dependency͔ΒϏϧυ࣌ʹ ґଘؔΛղܾ͢ΔίʔυΛࣗಈੜ
Storyboardܦ༝ͷViewController ͷΠϯελϯεԽʹରԠ
Storyboardܦ༝ͷViewController ͷΠϯελϯεԽʹରԠ
ͲͷΑ͏ʹґଘؔΛղܾ͍ͯ͠Δͷ͔ 33 JavaͷΑ͏ʹΞϊςʔγϣϯ͕Swiftʹͳ͍ͷͰϓϩτί ϧΛϚʔΫͱͯ͠༻͠ɺSourceKittenͰίʔυղऍɾੜ ੜ͞ΕͨίʔυͰґଘؔΛղܾ
DIKit৮ͬͯΈͯ - Ϗϧυ࣌ʹίʔυ͕ࣗಈੜ͞ΕΔͷͰɺ࿙Ε͕͋ΔͱίϯύΠϧ ΤϥʔʹͳΔͷͰΘ͔Γ͍͢ - Storyboardܦ༝ͰͷViewControllerΠϯελϯεԽͰ͖Δ - Dagger2SwinjectʹൺΔͱ͔ͳΓγϯϓϧ (ٯʹείʔϓͳͲͷ֓೦ࠓͳ͘ɺDIίϯςφͱ·Ͱ͍͔ͳ͍) 34
·ͱΊ ɾSwiftͳΒͬͺΓίϯύΠϧ࣌ʹґଘؔΛ ղܾ͍ͨ͠ ɾDIKitγϯϓϧͰಋೖίετͦ͏ ɾࠓޙDIKitͷϦϙδτϦWatch͍ͯ͜͠͏
ͨͩ…
ɾͦͦϓϩμΫτͷنෳࡶੑɺϢχοτςετͷ ༗ແʹΑͬͯDIαϙʔτπʔϧΛೖΕͣ·ͣखಈDIͰ ྑ͍͔ ɾDIαϙʔτπʔϧʹΑͬͯػೳͷࠩҟ͕͋ΔͷͰԿ͕ద ͍ͯ͠Δ͔அ͕ඞཁ
DIαϙʔτπʔϧΛ͍ͬͯΔํ ࠙ձʹͰ͓ฉ͔ͤͯԼ͍͞
Your business network
ࢀߟࢿྉ - 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