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アプリ 開発をする際に使われた技術の紹介
Search
Yamada Ryo
August 13, 2018
Programming
1
700
クラスメソッドでiOSアプリ 開発をする際に使われた技術の紹介
8/10(金)にクラスメソッド大阪オフィスで行われた勉強会で使用したスライドです。
Yamada Ryo
August 13, 2018
Tweet
Share
More Decks by Yamada Ryo
See All by Yamada Ryo
Apple PayとPassword AutoFillの実装方法と困った話
yamadaryo11
0
1.1k
iOSアプリ単体テスト入門
yamadaryo11
0
1.5k
Other Decks in Programming
See All in Programming
クラシルを支える技術と組織
rakutek
0
190
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
110
iOSアプリの信頼性を向上させる取り組み/ios-app-improve-reliability
shino8rayu9
0
140
ソフトウェア設計の実践的な考え方
masuda220
PRO
3
390
ててべんす独演会〜Flowの全てを語ります〜
tbsten
1
220
止められない医療アプリ、そっと Swift 6 へ
medley
1
110
私はどうやって技術力を上げたのか
yusukebe
43
17k
Serena MCPのすすめ
wadakatu
4
880
CSC305 Lecture 03
javiergs
PRO
0
230
CSS Linter の現在地 2025年のベストプラクティスを探る
ryo_manba
10
3.2k
Swiftビルド弾丸ツアー - Swift Buildが作る新しいエコシステム
giginet
PRO
0
1.6k
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
890
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Agile that works and the tools we love
rasmusluckow
331
21k
Side Projects
sachag
455
43k
Designing for humans not robots
tammielis
254
25k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
51k
Unsuck your backbone
ammeep
671
58k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
BBQ
matthewcrist
89
9.8k
Transcript
ΫϥεϝιουͰJ04ΞϓϦ ։ൃΛ͢ΔࡍʹΘΕٕͨज़ ͷհ ϞόΠϧΞϓϦαʔϏε෦ɹࢁాɹྑ
ࣗݾհ w ϞόΠϧΞϓϦαʔϏε෦ɹࢁాɹྑ w ೖࣾ w J04ΞϓϦ։ൃܦݧɹશ෦Ͱ͙Β͍ʁ w ݩʑ4&4Ͱಇ͍ͯɺΞϓϦɺαʔόαΠυɺΈࠐΈ෯ ͘ܦݧ͖ͯ͠·ͨ͠
w Ͷ͖͜
ࠓճ͓͢Δ͜ͱ w ฐࣾͰJ04ΞϓϦ։ൃͰͲͷΑ͏ͳʮϞόΠϧΞʔΩςΫ νϟ͕࠾༻͞Ε͍ͯΔ͔ʯʮςΫχοΫ࣋ʯͷௐࠪ݁ Ռͱݸਓతݟղ w ୯ମςετʹ͍ͭͯͷݟղ w 'MVUUFSʹ͍ͭͯ
ϞόΠϧΞʔΩςΫνϟ w .7$ w .71 w .77. w ΫϦʔϯΞʔΩςΫνϟ w
7*1&3
.7$ 7JFX $POUSPMMFS .PEFM 'BUʹͳΓ͍͢ʁ
.7$ ※ʮObjective-C ϓϩάϥϛϯάͷ֓೦ʯΑΓൈਮ
.71 7JFX 7JFX$POUSPMMFSؚΉ 1SFTFOUFS .PEFM 6*,JUؚ·ͳ͍
.77. 7JFX 7JFX$POUSPMMFSؚΉ 7JFX.PEFM .PEFM มߋͷ௨
.77. w .71ͱେ͖͘ҧ͏ͱ͜Ζɺ7JFX.PEFMͷมߋΛݕ͠ ͯ7JFXʹ͑ΔʢCJOEJOHʣ w #JOEJOHͷํ๏ͱͯ͠ɺΫϩʔδϟ,70ɺ3Y4XJGUΛ ͏ͳͲɺ͍͔ͭ͘ํ๏͕͋Δ
ΫϦʔϯΞʔΩςΫνϟ
ΫϦʔϯΞʔΩςΫνϟ ※ࢀরݩ: ·ͩMVC,MVP,MVVMͰফͯ͠Δͷʁ iOS Clean Architectureʹ͍ͭͯ https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc 1SFTFOUFS 7JFX 6TF$BTF
3FQPTJUPSZ %BUB4UPSF 5SBOTMBUFS .PEFM &OUJUZ 1SFTFOUBUJPO-BZFS %PNBJO-BZFS %BUB-BZFS
7*1&3 ※ࢀরݩ: iOS Project Architecture: Using VIPER https://cheesecakelabs.com/blog/ios-project-architecture-using-viper/
7*1&3 w 7JFX *OUFSBDUPS 1SFTFOUFS &OUJUZ 3PVUFSͷ಄จࣈΛ ͱͬͯ7*1&3ͱݺͿ w ୯Ұͷݪଇ
4JOHMF3FTQPOTJCJMJUZ1SJODJQMF ʹԊ͏ w 7JFXʹ6*7JFX$POUSPMMFSΛؚΉ w *OUFSBDUPS͕6TF$BTFʹ͋ͨΔ w 3PVUFSʹ/BWJHBUJPO-PHJDΛهड़͢Δ
ΞϯέʔτΛ ͱͬͯΈͨ
Ξϯέʔτͷ༰ w ࠓ·Ͱ࠾༻͖ͯͨ͠ϞόΠϧΞʔΩςΫνϟͷύλʔϯ w ্ه࣭ʹͯɺଞͷϞόΠϧΞʔΩςΫνϟΛ࠾༻͢Δ͔ߟ͔͑ͨ w ࣮ࡍʹͬͯΈͯɺྑ͔ͬͨͱ͜Ζɺվળ͔ͨͬͨ͠෦͔͋ͬͨ w ݱࡏɺझຯͰԿ͔࡞Δͱͨ͠ΒɺͲͷΞʔΩςΫνϟύλʔϯΛ࠾༻͢Δ ͔
w νʔϜͰҊ݅ΛਐΊΔͱͯ͠ɺͲͷΞʔΩςΫνϟύλʔϯΛબ͢Δ͔ w ࣋͋Ε w ͦͷଞɺπʔϧมΘͬͨςΫχοΫ͕͋Ε
࠾༻͞Εͨ w ୈ̍Ґɿ.71 w ୈ̎Ґɿ.7$ w ୈ̏Ґɿ.77. w ୈ̐ҐɿΫϦʔϯΞʔΩςΫνϟ w
ୈ̑Ґɿ7*1&3 w ୈ̑Ґɿ%%%
࠾༻ͯ͠ྑ͔ͬͨ w .71J04ͱ"OESPJEͰ౷Ұͨ͠ΠϯλʔϑΣʔεʹͯ͠ɺ ݁Ռతʹίʔυ্Ͱ༷͕ᘳͰͳ͍ʹ͠Ζ͑ΒΕΔ ͷ͕ྑ͔ͬͨ w ࢦ͕͋ΔͨΊɺࣗ৴Λ࣋ͬͯίʔυ͕ॻ͚ͨɻ w ίʔυʹ౷Ұੑ͕ੜ·ΕͯՄಡੑ্͕ͨ͠ w
.71J04ͷϑϨʔϜϫʔΫ͕.7$ɺ5BSHFU"DUJPOɺ %FMFHBUFͰग़དྷ͍ͯΔͷͰɺΫϦʔϯΞʔΩςΫνϟ Γ͗ͩ͢ͱೝࣝͰ͖ͨ
վળ͔ͨͬͨ͠ w .77.ͰTXJOKFDUΛ͍ͬͯͯɺॻ͘͜ͱ͕ଟͯ͘େมͩͬͨɻɻɻ w .7$Ͱ7$ʹॲཧ͕ͨ͘͞Μॻ͍ͯ͋ͬͯՄಡੑ͕ѱ͔ͬͨ w .71ͰͲΕʹଐ͞ͳ͍Α͏ͳͷ͕ग़͖ͯͯɺ໋໊ɺΫϥεͷѻ͍ ͕࣮ऀͦΕͧΕʹͳͬͯ͠·͏ɻ w ը໘ભҠ෦ޙʑෳࡶʹͳΓ͕ͪͳͷͰɺผͱͯ͠Γग़͠͠
͓͖͔ͯͨͬͨɻ w J04$MFBO"SDIJUFDUVSF෦͕ଟ͍͜ͱ͔Βɺগ։ൃʹ͍ ͯͳ͔ͬͨ
झຯͰΔͳΒͲΕʁ w ୈ̍Ґɿ.71 w ୈ̎Ґɿ.77. w ୈ̎Ґɿ.7$ w ୈ̏Ґɿ3FBDU 3FEVY
ࣄͰΔͳΒͲΕʁ w ୈ̍Ґɿ.71 w ୈ̎Ґɿ.77. w ୈ̏ҐɿΫϦʔϯΞʔΩςΫνϟ w νʔϜͰ͠߹ܾͬͯΊΔɺͱ͍͏ͷ͕Ұ൪ଟ͔ͬͨ
࣋ͳͲ w ಉ͡ΞʔΩςΫνϟͰॻ͔Εͨଞਓͷίʔυ༗ྗͳϕϯ μʔͷίʔυΛΑ͘ݟΔ͜ͱ w ଉͷ͍ΞϓϦͷ߹ɺͪΌΜͱઃܭ͠ͳ͍ͱ͡Θ͡Θͱ ഁ͢Δ w ࣗͰߟ͑ͯɺదͨ͠ΞʔΩςΫνϟΛબͨ͠Γɺվ ͨ͠Γ͢Δྗ͕ඞཁ
w ΞʔΩςΫνϟ͚ͩͰͳ͘ɺΫϥεͷதΛ៉ྷʹ͢Δͳ Ͳɺࡉ͔͍෦ͷѻ͍େࣄ
࣋ͳͲ w ྲྀߦͬͯΔ͔Βͱ͍ͬͯඈͼ͍ͭͯ͠·͏ͱ௧͍ʹ͋͏ͷͰɺ ʮϝϦοτʯΛ뱌͔ͯ͠Β࠾༻͍ͨ͠ w J04ͱ"OESPJE։ൃऀͰ։ൃʹೖΔલʹυΩϡϝϯτͰ༷ɾΠ ϯλʔϑΣʔεΛॻ͖ͨ͠ɻϏδωεϩδοΫͷೝ͕ࣝҰக͠ ͨɻ w σϦόϦʔ༏ઌͩͱ.71ɻઃܭΛߟ͑Δͷָ͍͠ɻͰͬ
ͱେ͖͍υϝΠϯͷઃܭʢαʔϏεશମʣΛߟ͑Δͱྑ͍ɻ w ՁΛૉૣ͘ఏڙ͢Δʢص্ͷۭ͡ΌΘ͔Βͳ͍෦Ϟο ΫͰྑ͍ͷͰސ٬ʹΠϝʔδΛ௫·ͤΔʣ
πʔϧςΫχοΫ w J04$MFBO"SDIJUFDUVSFࣗಈੜπʔϧʮ,VSJʯ w 4XJGU-JOUͰίʔυϨϏϡʔͷͭ·Βͳ͍ࢦఠΛগͳ͘͠ ͨ w $BSUIBHFΛ࠾༻ͯ͠ɺ#VJME࣌ؒΛॖͨ͠ɻʢ୯ମҊ݅ Ͱ࠾༻ͨ͠ʣ w
$*πʔϧͱͯ͠5SBWJT$*ɺ$JSDMF$*ɺCJUSJTFΛͬͨ
͔͜͜Βओ؍
ΞϯέʔτΛͱͬͯ Θ͔ͬͨ͜ͱ w ͦͦͦΜͳʹΞʔΩςΫνϟʹڧ͍ͩ͜ΘΓͳ͍ਓͷํ ͕ଟ͍ w νʔϜͰΛͯ͠ɺνʔϜʹͱͬͯҰ൪ྑ͍ͷΛબ͖͢ w ʮڞ௨ॲཧʯͳͲͲ͜ʹஔ͔͘໎ͬͪΌ͏߹͋Δ w
ϞόΠϧΞʔΩςΫνϟͷಋೖͰʮࣗ৴Λ࣋ͬͯίʔυ͕ॻ͚ Δʯͷྑ͍͜ͱ w ۜͷؙʮແ͍ʯ
ݸਓతͳײ w ϞόΠϧΞʔΩςΫνϟʮखஈʯͰ͋ͬͯʮతʯͰ ͳ͍ w ָ͠ΜͰઃܭ͠Α͏ɻͦͯ͠ਫ਼ਆతͳ҆શΛखʹೖΕΑ͏ w ݸਓతʹ.77. 3Y4XJGU ͕͖ɻΫϦʔϯΞʔΩς
ΫνϟͿ͔͞Ͱ͍͟͝·ͤΜɻ.7$ͩͱͪΐͬͱ ͭΒ͍͔ͳ͊ɻ w CJUSJTF͍͔ͬͨ͢
൪֎ฤ
5SZ4XJGUͰͷΞϯέʔτ w ୈ̍Ґɿ.7$ w ୈ̎Ґɿ.77. w ͦͷଞׂͱΒ ͚ͯΔ
͔͜͜Β ୯ମςετͷ͓
ܦҢ w ࢲ͕ࣗJ04ΞϓϦͷ୯ମςετΛॻ͍ͨܦݧ͕ແ͍ w ϓϩδΣΫτͰ୯ମςετΛॻ͘ػձ͕͋ͬͨ w ͜Ε͔Β୯ମςετͷཧղΛਂΊ͍͖͍ͯͨͱ͍͏Ϟν ϕʔγϣϯ
୯ମςετͷಋೖൣғ w ϏδωεϩδοΫʹద༻ w 6*ςετʹ͍ͭͯࠓޙͷ՝ͱ͍ͯ͠Δ w ࠾༻ͨ͠ϞόΠϧΞʔΩςΫνϟʮΫϦʔϯΞʔΩςΫ νϟʯ
ςετ͍͢͠ίʔυͱ w %FQFOEFODZ*OKFDUJPO %* ͠·͢ɻ w ґଘ͢ΔϞδϡʔϧΛ෦Ͱੜ͢ΔͷͰͳ͘ɺʮೖ ͢Δʯ w 4XJGUͰ%*͢ΔʹQSPUPDPMΛ্खʹ͏
w ࣗ࡞ΫϥεͰ͋ΕɺJOJUJBMJ[FͰґଘؔΛೖ͢Δ
۩ମྫ • ӈͷΑ͏ͳߏͷϓϩμΫτΛྫ ʹ͠·͢ɻ • ࠓճPresenterʹߜͬͯղઆ͠· ͢ ViewController Presenter DataStore
Viewͷૢ࡞ APIίʔϧ Viewͷඳը໋ྩ APIίʔϧ໋ྩ
۩ମతͳྫ ʢ7JFX$POUSPMMFSʣ
۩ମతͳྫʢ%*ʣ
۩ମతͳྫ1SFTFOUFS
۩ମతͳྫ1SFTFOUFS
۩ମతͳྫ.PDL
None
None
None
൪֎ฤɿ࣮"1*Λୟ͘ςετ Λॻ͖͔ͨͬͨ wຖճࢼ͍ͨ͠Θ͚Ͱͳ͍͕ɺ"1*ʢ֎෦γες Ϝʣ͕ਖ਼͍͠ϨεϙϯεΛฦ͍ͯ͠Δ͔ɺ࣌ʑ֬ ೝ͔ͨͬͨ͠ w4DIFNFΛ͚ͯɺ࣮"1*Λୟ͘ςετΛผ్࡞ ͨ͠ w$*πʔϧʹͯ୯ମςετΛΒ͍͕ͤͯͨɺ࣮ "1*Λୟ͘4DIFNFର֎ͱͨ͠
͔͜͜Β 'MVUUFS
࠷ۙɺ'MVUUFSʹ ϋϚͬͯ·͢ʢझຯʣ
'MVUUFSͬͯԿʁ w (PPHMF͕։ൃ͍ͯ͠ΔϞόΠϧΞϓϦ༻4%,ͰJ04ɺ "OESPJE྆ํͷΞϓϦ͕։ൃͰ͖ΔΫϩεϓϥοτϑΥʔ Ϝͳ4%,Ͱ͢ɻ w ϓϩάϥϜ%BSUͰॻ͖·͢ɻ w 7JTVBM4UVEJP$PEFͰॻ͚ΔΑ
ͬͯΈͨ
w ࣮ࡍʹΧʔυͷϨΠΞτΛ࡞ͬͯ ݟͨ w .BUFSJBM%FTJHOʢଞͷσβΠϯద ༻Մೳʣ w ϨΠΞτࣗମίʔυͰॻ͘ w ෭࡞༻ʁͰɺαϯϓϧΛʮίϐϖʯ͠
ͨΒجຊతʹಈ͘ w ϨΠΞτͷํJ04ͱ݁ߏҧ͏ ͷͰށͬͨ w 8FC'SPOU͔Βࢀೖ͢Δਓͱͬͭ ͖͍͔͢
None
ŋТŋA Ͷ͢ͱʜ
એ ϞόΠϧϝιουͱ͍͏ษڧ ձ͋ΔͷͰࢀՃɺొஃऀื ूதʂʂ 'MVUUFS༑ୡཉ͍͠ͳʂʂ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ