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
660
クラスメソッドで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
1k
iOSアプリ単体テスト入門
yamadaryo11
0
1.4k
Other Decks in Programming
See All in Programming
Linux && Docker 研修/Linux && Docker training
forrep
24
4.5k
Honoとフロントエンドの 型安全性について
yodaka
5
330
昭和の職場からアジャイルの世界へ
kumagoro95
1
360
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
130
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
170
Multi Step Form, Decentralized Autonomous Organization
pumpkiinbell
1
720
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
950
2024年のWebフロントエンドのふりかえりと2025年
sakito
1
240
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
4
1.3k
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
740
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
340
[JAWS-UG横浜 #79] re:Invent 2024 の DB アップデートは Multi-Region!
maroon1st
1
140
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
BBQ
matthewcrist
86
9.5k
Visualization
eitanlees
146
15k
Faster Mobile Websites
deanohume
306
31k
Docker and Python
trallard
44
3.3k
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༑ୡཉ͍͠ͳʂʂ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ