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
720
クラスメソッドで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.2k
iOSアプリ単体テスト入門
yamadaryo11
0
1.5k
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
1
490
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1.1k
CSC307 Lecture 02
javiergs
PRO
1
780
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
150
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
280
組織で育むオブザーバビリティ
ryota_hnk
0
180
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
250
今から始めるClaude Code超入門
448jp
8
9.1k
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Oxlint JS plugins
kazupon
1
1k
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
130
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.1k
Thoughts on Productivity
jonyablonski
74
5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Skip the Path - Find Your Career Trail
mkilby
0
60
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
How to train your dragon (web standard)
notwaldorf
97
6.5k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
150
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
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༑ୡཉ͍͠ͳʂʂ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ