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
610
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
1
Speech Frameworkを使った音声認識の基本
kawabe
0
70
これだけは伝えたい設計の技術
kawabe
0
1.3k
EightのUI Component化の取り組み
kawabe
0
130
Other Decks in Programming
See All in Programming
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
670
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
340
メモリ不足との戦い〜大量データを扱うアプリでの実践例〜
kwzr
1
880
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
370
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
400
Signals & Resource API in Angular: 3 Effective Rules for Your Architecture @BASTA 2025 in Mainz
manfredsteyer
PRO
0
100
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
400
CSC509 Lecture 05
javiergs
PRO
0
300
CSC305 Lecture 02
javiergs
PRO
1
260
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
920
Your Perfect Project Setup for Angular @BASTA! 2025 in Mainz
manfredsteyer
PRO
0
130
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
0
560
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.8k
Thoughts on Productivity
jonyablonski
70
4.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
A Modern Web Designer's Workflow
chriscoyier
697
190k
It's Worth the Effort
3n
187
28k
For a Future-Friendly Web
brad_frost
180
9.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Automating Front-end Workflow
addyosmani
1371
200k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
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