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
Eight iOSを支えるアーキテクチャ
Search
Masashi
June 15, 2019
Programming
1
620
Eight iOSを支えるアーキテクチャ
Developers Boost KANSAI
https://event.shoeisha.jp/devboost/20190615
Masashi
June 15, 2019
Tweet
Share
More Decks by Masashi
See All by Masashi
SpeechAnalyzerによるSpeech to Textの進化を探る
kawabe
0
8
Speech Frameworkを使った音声認識の基本
kawabe
0
73
これだけは伝えたい設計の技術
kawabe
0
1.3k
EightのUI Component化の取り組み
kawabe
0
140
Other Decks in Programming
See All in Programming
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
1.6k
モデル駆動設計をやってみよう Modeling Forum2025ワークショップ/Let’s Try Model-Driven Design
haru860
0
150
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
4
690
Building AI with AI
inesmontani
PRO
0
190
CSC509 Lecture 13
javiergs
PRO
0
250
CSC509 Lecture 10
javiergs
PRO
0
170
Amazon Bedrock Knowledge Bases Hands-on
konny0311
0
150
MCPサーバー「モディフィウス」で変更容易性の向上をスケールする / modifius
minodriven
8
1.5k
r2-image-worker
yusukebe
1
170
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
150
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
280
Atomics APIを知る / Understanding Atomics API
ssssota
1
150
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
670
Scaling GitHub
holman
463
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
KATA
mclloyd
PRO
32
15k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Become a Pro
speakerdeck
PRO
29
5.6k
Transcript
ɹ&JHIUJ04Λࢧ͑ΔΞʔΩςΫνϟ Տลխ࢙ 4BOTBOגࣜձࣾ
Տลխ࢙ɹMasashi Kawabe Sansanגࣜձࣾ Eightࣄۀ෦ Engineering Group iOS ΤϯδχΞ 20184݄ Sansanגࣜձࣾ৽ଔೖࣾ
Eight iOS ͷ։ൃʹैࣄ
2018/04 2018/07 2018/12 2019/02 2019/04 2019/06 Sansanגࣜձࣾ ৽ଔೖࣾ / Eightࣄۀ෦ଐ
ϝϯγϣϯػೳͷ࣮ Eight iOS v9.0.0 ϦϦʔε Sansanࣄۀ෦ҟಈ Sansan iOS v5.0.0 ϦϦʔε / Eightࣄۀ෦ҟಈ ೋஈ֊ೝূػೳͷ࣮
2018/04 2018/07 2018/12 2019/02 2019/04 2019/06 Sansanגࣜձࣾ ৽ଔೖࣾ / Eightࣄۀ෦ଐ
ϝϯγϣϯػೳͷ࣮ Eight iOS v9.0.0 ϦϦʔε Sansanࣄۀ෦ҟಈ Sansan iOS v5.0.0 ϦϦʔε / Eightࣄۀ෦ҟಈ ೋஈ֊ೝূػೳͷ࣮
None
2018/04 2018/07 2018/12 2019/02 2019/04 2019/06 Sansanגࣜձࣾ ৽ଔೖࣾ / Eightࣄۀ෦ଐ
ϝϯγϣϯػೳͷ࣮ Eight iOS v9.0.0 ϦϦʔε Sansanࣄۀ෦ҟಈ Sansan iOS v5.0.0 ϦϦʔε / Eightࣄۀ෦ҟಈ ೋஈ֊ೝূػೳͷ࣮
ϝϯγϣϯػೳͷ࣮ ओʹϝϯγϣϯͷදࣔɺΞϓϦىಈ࣌ʹදࣔ ͢Δػೳઆ໌ͷφϏήʔγϣϯ࣮Λ୲
2018/04 2018/07 2018/12 2019/02 2019/04 2019/06 Sansanגࣜձࣾ ৽ଔೖࣾ / Eightࣄۀ෦ଐ
ϝϯγϣϯػೳͷ࣮ Eight iOS v9.0.0 ϦϦʔε Sansanࣄۀ෦ҟಈ Sansan iOS v5.0.0 ϦϦʔε / Eightࣄۀ෦ҟಈ ೋஈ֊ೝূػೳͷ࣮
Eight iOS v9.0.0 ϦϦʔε ओʹձࣾϑΥϩʔҰཡը໘ɺձࣾϑΥϩʔɾ ΞϯϑΥϩʔػೳɺ͓Βͤը໘ɺϑΟʔυ UI ৽ɺ UI Component
ಋೖΛ୲
2018/04 2018/07 2018/12 2019/02 2019/04 2019/06 Sansanגࣜձࣾ ৽ଔೖࣾ / Eightࣄۀ෦ଐ
ϝϯγϣϯػೳͷ࣮ Eight iOS v9.0.0 ϦϦʔε Sansanࣄۀ෦ҟಈ Sansan iOS v5.0.0 ϦϦʔε / Eightࣄۀ෦ҟಈ ೋஈ֊ೝূػೳͷ࣮
Sansan iOS v5.0.0 ϦϦʔε ओʹ໊Ұཡը໘ͷ࣮ɺ UI Component ಋೖΛ୲
2018/04 2018/07 2018/12 2019/02 2019/04 2019/06 Sansanגࣜձࣾ ৽ଔೖࣾ / Eightࣄۀ෦ଐ
ϝϯγϣϯػೳͷ࣮ Eight iOS v9.0.0 ϦϦʔε Sansanࣄۀ෦ҟಈ Sansan iOS v5.0.0 ϦϦʔε / Eightࣄۀ෦ҟಈ ೋஈ֊ೝূػೳͷ࣮
໊ࡱӨ ࿈བྷઌҰཡ ϑΟʔυ ϓϨϛΞϜػೳ
໊ࡱӨ ࿈བྷઌҰཡ ϑΟʔυ ϓϨϛΞϜػೳ ը໘ʹө͢Δঢ়ଶ͕ଟ͘ෳࡶ
ઃܭͱʁ ؔ৺ͷʹΑͬͯɺෳࡶͳΛ ୯७ͳͷ܈ͱͯ͠Γ͚Δ͜ͱ Ҿ༻J04ΞϓϦઃܭύλʔϯೖ IUUQTQFBLTDDCPPLTJ04@BSDIJUFDUVSF
αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ɺ ਓใΛ࣋ͭ Entity ʹ parse ͯ͠ɺΩϟογϡʹ औಘͨ͠ใΛอଘͯ͠ɺ View ʹදࣔ͢Δ
αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ɺ ਓใΛ࣋ͭ Entity ʹ parse ͯ͠ɺΩϟογϡʹ औಘͨ͠ใΛอଘͯ͠ɺ View ʹදࣔ͢Δ ෳࡶ
௨৴͍ͨ͠ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ɺ ਓใΛ࣋ͭ Entity ʹ parse ͯ͠ɺΩϟογϡʹ औಘͨ͠ใΛอଘͯ͠ɺ View ʹදࣔ͢Δ
σʔλΛΈཱ͍ͯͨ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ɺ ਓใΛ࣋ͭ Entity ʹ parse ͯ͠ɺΩϟογϡʹ औಘͨ͠ใΛอଘͯ͠ɺ View ʹදࣔ͢Δ
σʔλΛอଘ͍ͨ͠ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ɺ ਓใΛ࣋ͭ Entity ʹ parse ͯ͠ɺΩϟογϡʹ औಘͨ͠ใΛอଘͯ͠ɺ View ʹදࣔ͢Δ
ϨΠΞτ͍ͨ͠ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ɺ ਓใΛ࣋ͭ Entity ʹ parse ͯ͠ɺΩϟογϡʹ औಘͨ͠ใΛอଘͯ͠ɺ View ʹදࣔ͢Δ
௨৴͍ͨ͠ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ σʔλΛΈཱ͍ͯͨ ਓใΛ࣋ͭ Entity ʹ parse ͢Δ σʔλΛอଘ͍ͨ͠ Ωϟογϡʹऔಘͨ͠ใΛอଘ͢Δ
ϨΠΞτ͍ͨ͠ View ʹදࣔ͢Δ
ઃܭΛ͢Δࡍʹཱͭͷ͕ઃܭύλʔϯ ༗໊ͳͷɺ GoF ͷ 23ݸͷσβΠϯύλʔϯ
ઃܭύλʔϯΛΔϝϦοτ - ࠶ར༻ੑͷߴ͍ॊೈͳઃܭ͕Ͱ͖Δ - ։ൃऀؒͷҙࢥૄ௨͕༰қʹͳΔ https://www.techscore.com/tech/DesignPattern/foundation/foundation1.html/#dp0-3 YYYύλʔϯͰ͢
ΞʔΩςΫνϟύλʔϯ - ΞϓϦΛಈ͔͢ͱ͍͏ෳࡶͳɺେ·͔ͳෳͷʢ୯७ͳʣʹ Γ͚ΒΕΔ - ͦ͜Ͱ׆༻͞ΕΔͷ͕ΞʔΩςΫνϟ - Eight iOS Ͱ
MVVM ύλʔϯΛ࠾༻
ͳͥ MVVM Λ࠾༻ʁ αʔϏεͷॳظஈ֊໊ཧΞϓϦͩͬͨͨΊɺ MVC Ͱ ྑ͔͔ͬͨ͠Εͳ͍
ͳͥ MVVM Λ࠾༻ʁ - αʔϏε͕͢ΔʹͭΕͯɺSNS ػೳͷΑ͏ͳ ಈతʹঢ়ଶ͕มΘΔͷ͕૿͖͑ͯͨ - ඇಉظॲཧΛநԽ͢ΔͨΊʹར༻͍ͯ͠Δ RxSwift
ͷ binding ػߏΛ࠷େݶʹ׆͔͢͜ͱ͕ Ͱ͖Δ
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
"QQMF͕ఏڙ͢Δ6*,JUʹ6*7JFX$POUSPMMFSͱ͍͏7JFXΛཧ͢ΔΫϥε͕͋Γɺ ը໘ͷϥΠϑαΠΫϧͱը໘ભҠΛ୲͏
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
7JFX - " ͖͢͜ͱ - UI Λఆٛ͢Δ - ViewModel ʹ
UI Events Λ͑Δ - ViewModel ͔Βड͚औͬͨσʔλΛө͢Δ - # ͖͢Ͱͳ͍͜ͱ - ϓϨθϯςʔγϣϯϩδοΫΛఆٛ͢Δ - ௨৴σʔλૢ࡞Λߦ͏
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
7JFX.PEFM - " ͖͢͜ͱ - UI Events Λࢹ͠ɺModel ʹॲཧΛґཔ͢Δ -
Model ͔Βड͚औͬͨσʔλΛ View Ͱར༻͢Δͷʹ ࠷దͳܗʹՃ͢Δ - # ͖͢Ͱͳ͍͜ͱ - UI Λఆٛ͢Δ - ௨৴σʔλૢ࡞Λߦ͏
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
.PEFM - " ͖͢͜ͱ - σʔλߏΛఆٛ͢Δ - σʔλΛӬଓԽ͢Δ - σʔλΛૢ࡞͢Δ
- # ͖͢Ͱͳ͍͜ͱ - UI Λఆٛ͢Δ - σʔλΛ View Ͱར༻͢Δͷʹ࠷దͳܗʹՃ͢Δ
MVVM ύλʔϯ 7JFX 7JFX$POUSPMMFS 7JFX.PEFM .PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH
7JFX 7JFX$POUSPMMFS 7JFX.PEFM 6*&WFOUT 3FRVFTUT %BUB %BUB#JEJOH .PEFM &OUJUZ 3FQPTJUPSZ
3FRVFTU 6TF$BTF .PEFM
- Entity - σʔλߏΛఆٛ͢Δߏମ - Repository - Entity ͷ CRUD
ૢ࡞Λఏڙ͢Δ - SQLite UserDefaults ͷ DataSource ΛӅṭ - Request - HTTP Request Λ͛ΔॲཧΛఆٛ͢Δ - UseCase - ϏδωεϩδοΫΛهड़͢Δ
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
௨৴͍ͨ͠ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ σʔλΛΈཱ͍ͯͨ ਓใΛ࣋ͭ Entity ʹ parse ͢Δ σʔλΛอଘ͍ͨ͠ Ωϟογϡʹऔಘͨ͠ใΛอଘ͢Δ
ϨΠΞτ͍ͨ͠ View ʹදࣔ͢Δ
௨৴͍ͨ͠ αʔόʔ͔ΒϑΥϩʔ͍ͯ͠ΔਓϦετΛऔಘͯ͠ σʔλΛΈཱ͍ͯͨ ਓใΛ࣋ͭ Entity ʹ parse ͢Δ σʔλΛอଘ͍ͨ͠ Ωϟογϡʹऔಘͨ͠ใΛอଘ͢Δ
ϨΠΞτ͍ͨ͠ View ʹදࣔ͢Δ ίʔυΛݟͯΈ·͠ΐ͏$ ⚠આ໌ͷͨΊʹίʔυ؆ུԽ͍ͯ͠·͢
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
Entity ߏମͰσʔλΛఆٛ
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
Request 3FTQPOTFͷܕΛఆٛ
Request )551.FUIPEΛఆٛ
Request )551.FUIPEΛ͛Δ1BUIΛఆٛ
Request 3FTQPOTFΛड͚औͬͨࡍͷॲཧΛఆٛ
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
Repository 1SPUPDPM *OUFSGBDF Ͱ$36%ૢ࡞Λఆٛ
Repository ఆٛͨ͠$36%ૢ࡞Λ࣮
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
UseCase ۩ମܕͰͳ͘நʹґଘ *OJUJBMJ[FSͰґଘੑʢඞཁͳͷʣΛೖ
UseCase - ґଘؔٯసͷݪଇΛద༻ - มԽ͍͢͠۩Ͱͳ͘ɺ҆ఆͨ͠நʹґଘ - Dependency Injection Λద༻ -
Ϋϥεͷ֎͔Βґଘ͍ͯ͠ΔΛೖ - நʹґଘ͠ɺΫϥεͷ֎͔ΒඞཁͳͷΛೖ͢Δ͜ͱͰςελϒϧʹ
UseCase ϏδωεϩδοΫΛ࣮
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
ViewModel 7JFXͰදࣔ͢Δ&OUJUZΛެ։
ViewModel 7JFX͔Β6*&WFOUΛऔಘ
ViewModel .PEFMʹॲཧΛґཔ
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
View ը໘ىಈͷΠϕϯτΛ௨
View 7JFX.PEFMʹΠϕϯτΛ͑Δ
View 7JFX.PEFM͔Βड͚औͬͨ σʔλΛө
7JFX 7JFX$POUSPMMFS 3RVFTUT %BUB 6*&WFOUT %BUB#JEJOH 7JFX.PEFM 6TF$BTF 3FRVFTU 3FQPTJUPSZ
&OUJUZ 3FRVFTU 3FTQPOTF $36% %BUB 3FTVMU ,OPXTBCPVU ,OPXTBCPVU
·ͱΊ - Eight iOS Ͱ MVVM ύλʔϯΛ࠾༻ - ֤ͷ͖͢͜ͱɾ͖͢Ͱͳ͍͜ͱΛҙ࣮ࣝͯ͠ -
มԽ͍͢͠۩ͷґଘආ͚ɺநґଘ
None
None