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
AIのメモリー
watany
13
1.4k
パスタの技術
yusukebe
1
340
Understanding Ruby Grammar Through Conflicts
yui_knk
1
100
一人でAIプロダクトを作るための工夫 〜技術選定・開発プロセス編〜 / I want AI to work harder
rkaga
12
2.5k
DynamoDBは怖くない!〜テーブル設計の勘所とテスト戦略〜
hyamazaki
0
200
[DevinMeetupTokyo2025] コード書かせないDevinの使い方
takumiyoshikawa
2
280
Flutterと Vibe Coding で個人開発!
hyshu
1
250
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
290
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
5
590
Constant integer division faster than compiler-generated code
herumi
2
590
バイブコーディング × 設計思考
nogu66
0
110
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Thoughts on Productivity
jonyablonski
69
4.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Agile that works and the tools we love
rasmusluckow
329
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Optimizing for Happiness
mojombo
379
70k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Building an army of robots
kneath
306
45k
Building Applications with DynamoDB
mza
96
6.5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
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༑ୡཉ͍͠ͳʂʂ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ