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版の開発手順書 - みてねのMeetup#1 / mitene ios deve...
Search
atsushisakai
June 29, 2018
Programming
4
2.2k
みてね iOS版の開発手順書 - みてねのMeetup#1 / mitene ios development steps
2018/6/29 Fri. "みてねのMeetup#1" で発表したスライドです。
iOS版の開発について順をおって説明しました。
atsushisakai
June 29, 2018
Tweet
Share
More Decks by atsushisakai
See All by atsushisakai
大規模 SaaS の技術的意思決定を支える三要素 / Three elements that support technical decision-making for large-scale SaaS
_atsushisakai
0
1.4k
一方、私はなぜEMでありつづけるか / TECH TRACK vol.1
_atsushisakai
1
560
子育てとEMと転職と
_atsushisakai
2
910
「家族アルバム みてね」を支える エンジニアリング組織/introduce-familyalbum-engineering-team
_atsushisakai
2
260
ミクシィのマネージャーは悩んでいる / mixi's manager is in trouble
_atsushisakai
16
14k
実践 Engineering Manager / practice engineering manager
_atsushisakai
19
8.3k
Scalable Microservice for Media Transcoding / Transcoder
_atsushisakai
4
1.6k
New Relic {FUTURE} STACK 3/14, 2019 / newrelic_future_stack
_atsushisakai
1
1.5k
実践 WorkManager / WorkManager
_atsushisakai
3
7.6k
Other Decks in Programming
See All in Programming
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
260
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
610
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.7k
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
Basic Architectures
denyspoltorak
0
630
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
390
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
280
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
820
Grafana:建立系統全知視角的捷徑
blueswen
0
310
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
430
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
200
dchart: charts from deck markup
ajstarks
3
970
Featured
See All Featured
Design in an AI World
tapps
0
130
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.5k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
110
Git: the NoSQL Database
bkeepers
PRO
432
66k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Deep Space Network (abreviated)
tonyrice
0
36
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
58
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Transcript
iOS൛ͷ։ൃखॱॻ @_atsushisakai ΈͯͶͷMeetup #1
ࣗݾհ ञҪ ಞ @_atsushisakai • 201111݄ ϛΫγΟೖࣾ • 2012ʙ2014 SNS
mixiʹؔ࿈ͨ͠ECܥͷ৽نࣄۀΛෳ։ൃ • 2014ʙ ΈͯͶۀ࣌ʹiOSΤϯδχΞͱͯ͠ࢀՃ • 20174݄ʙ ΈͯͶࣄۀ෦ ։ൃάϧʔϓϚωʔδϟ • 20181݄ʙ SREνʔϜॴଐɺΠϯϑϥઐ೦ɺߴԽɾෛՙࢄ
͢͜ͱ • iOS൛ΈͯͶɺԿΛߟ͑ͯઃܭ͞ΕɺͲͷΑ͏ʹ։ൃΛߦ͍ͬͯΔ͔ • ΞʔΩςΫνϟࣗମͷͰͳ͘ɺ͋ΔΞʔΩςΫνϟͷ্Ͱ࣮ࡍʹͲ͏ ։ൃ͍ͯ͠Δ͔ • Kyashͷ@konifar͞ΜʹӨڹΛड͚ͨൃද • https://drive.google.com/file/d/
1rlL1AdE5R_M1UAxVW_lY4orFTIEBfFJY/view
iOS൛ΈͯͶͷࣦഊ • ίʔυ্ͷࣦഊ • MVC ( or MVP) • FatViewController
• ඈͼަ͏NSNotification • ґଘ͕ؔແͳSingletonͷେྔൃੜ • ωετ͠·͘ΔObjective-C block, Swift Closure • ͱΓ͋͑ͣManager • ແҙຯʹੜ͑ΔExtension • વͷΑ͏ʹଘࡏ͠ͳ͍ςετίʔυ ɹ…
iOS൛ΈͯͶͷࣦഊ • ίʔυ͕ϏδωεʹѱӨڹΛͨΒ͢ • ଐਓԽ • ϞνϕʔγϣϯԼ • ݟੵΓਫ਼ͷԼ •
CSελοϑʹ͠Θدͤ
ΞʔΩςΫνϟ৽ • 20181݄͝Ζʹ࣮ࢪ • ଟਓ։ൃʹ͑͏Δͷʹ͍ͨ͠ • ςετΛॻ͘ʢॻ͚ΔΑ͏ʹ͢Δʣ • ॻ͘ՕॴΛ໌֬ʹنఆ͢Δʢॻ͔ͳ͍͍ͯ͘ͱ͜Ζॻ͔ͳ͍ʣ •
ԿΛ࡞Δ͔ɺࣄલʹѲՄೳ • ॳΊͯͷਓͰා͘ͳ͍
λʔχϯάϙΠϯτ • bufferapp/android-clean-architecture-boilerplate • KotlinͰClean ArchitectureΛ࣮ͨ͠AndroidΞϓϦͷαϯϓϧίʔυ • ͦͷ··ͦͬ͘ΓiOS/Swiftʹస༻Ͱ͖Δ • ࣗͷΞϓϦͰ͍ͬͯ͘ؾ͕࣋ͪߴ·ͬͨ
େํ • MVP • PresenterͷςετΛॻ͖ViewControllerΛബ͘͢Δ • CleanArchitecture • ModelϨΠϠʔΛཧ͠ɺڊେͳPresenterManagerʹ͠ͳ͍ •
RxSwiftΛઃܭʹऔΓೖΕͯඇಉظॲཧͷՄಡੑΛߴΊΔ • ςετΛॻ͘
UI Presentation Domain Presenter View ViewController PresenterImpl UseCase Mapper Model
ҹґଘؔ
Domain Data Remote UseCase Mapper Model ҹґଘؔ Repository RepositoryImpl Mapper
Model Cache DataSource DataSourceImpl Entity DataSourceImpl Entity
ͦΕͰ։ൃ͍͖ͯ͠·͢
1: ͋͘·ͰαϯϓϧίʔυͰ͢
2: શମతʹ͔ͳΓলུ͍ͯ͠·͢
Ҋ݅հ
• ۙگ (Recents) ը໘ • ϢʔβʔͷΞΫςΟϏςΟΛྲྀ͢ϑΟʔυUI • API͔ΒϑΟʔυͷListΛऔಘ • આ໌Λ؆қతʹ͢ΔͨΊCache͠ͳ͍
• APIೲ͕Ε͍ͯΔʂʢઃఆʣ
Domain • UseCase͔ΒऔΓग़ͨ͠Βग़ͯ͘ΔΦϒδΣΫτ • ϑΟʔυͷͻͱͭʹ૬͢Δ
Domain • UseCase͕ґଘ͢ΔRepositoryͷΠϯλʔϑΣʔε • SingleΦϒδΣΫτͱͯ͠ඇಉظʹΦϒδΣΫτΛฦ͢
Domain
Domain RepositoryͷΠϯλʔϑΣʔεʹґଘͤ͞Δ Repository͔ΒσʔλΛऔΓग़͢
ࢀߟ (kotlin) • ϕʔεΫϥε SingleUseCase.kt • https://github.com/bufferapp/android-clean-architecture-boilerplate/ blob/master/domain/src/main/java/org/buffer/android/boilerplate/ domain/interactor/SingleUseCase.kt
ςετΛॻ͍ͯ͜͜ͰPull Request
Presentation • நԽ͞ΕͨViewͷProtocolΛఆٛ • Presenter͜ͷViewʹରͯ͠දࣔΛࢦࣔ͢ΔΑ͏ʹॻ͘
Presentation • Presenterʹ࣮͖͢ProtocolΛఆٛɻ • ViewControllerϥΠϑαΠΫϧ্ͰPresenterͷ֤ॲཧΛ࣮ߦ͢Δ
Presentation
Presentation ViewΛऑࢀর ݁ՌΛViewʹө͢Δ
ςετΛॻ͍ͯ͜͜ͰPull Request
User Interface
User Interface Presenterʹॲཧ͕ॻ͍ͯ͋Δ RecentViewΛConform
͜ͷ࣌ͰLayoutͯ͠σʔλΛදࣔͤ͞Δ
ςετॻ͔ͳ͍ͰOKɺPull Request
APIͰ͖ͨʁ
Data
Data DataϨΠϠʔͰѻ͏ΦϒδΣΫτ
Data DataϨΠϠʔͰѻ͏ΦϒδΣΫτ͔Β DomainϨΠϠʔͰѻ͏ΦϒδΣΫτʹTranslate͢Δ
ςετΛॻ͍ͯ͜͜ͰPull Request
Remote
ͦΖͦΖ࣌ؒͳ͍ͷͰAPIClientͷ۩ମతͳ࣮লུ͠·͢
ςετΛॻ͍ͯ͜͜ͰPull Request
αʔόʔͱ݁߹ͯ͠ಈ࡞֬ೝʂ
࣮खॱͷ·ͱΊ • ґଘ͕ؔཧ͞Ε͍ͯΔͷͰॱংཱ࣮͍ͯͯ͢͠ • API/Cache͕ͳͯ͘UseCase͕ฦ͢ϞσϧΛͰͬͪ͋͛Ε͙͢ʹ࣮ ͍͚ͬͯΔ • ϨΠϠʔΛ͑Δͱ͖جຊతʹProtocolґଘ͢Δ • ςετॻ͘ͱ͜Ζͱॻ͔ͳ͍ͱ͜ΖͷϝϦϋϦΛ͚ͭΔ
͞Ε͍ͯΔ՝ • Clean ArchitectureΛͲ͜·Ͱݫີʹ͍͔ͬͯ͘ • ϑΝΠϧ͕ଟ࣮͕ͯ͘େม • ίʔυςϯϓϨʔτͳͲΛۦͯ͠ؾָʹ͍͖͍ͯͨ͠ • ґଘؔղܾ͕͍͍ͪͪෳࡶ
• SwinjectͳͲDI Containerͷಋೖ͕ඞવతʹͳ͖ͬͯͨ • Embedded FrameworkԽ͍ͯ͠ͳ͍ • ґଘؔͷϧʔϧΛ؆୯ʹഁͬͯ͠·͏͜ͱ͕Ͱ͖Δ • ۃʹݴ͏ͱ Presenter͕APIΫϥΠΞϯτΛؾܰʹୟ͘͜ͱՄೳͱ͍͑Մೳ
ΞʔΩςΫνϟ৽ͷޮՌ • ͱΓ͋͑ͣίʔυΛॻ͘ͷ͕ਏ͘ͳָ͍ͯ͘͠ • ςετΛॻ͘͜ͱ͕વͷۭؾʹͳΓίʔυϨϏϡʔָνϯ • ා͘ͳ͍ • ΛݟੵΔ͜ͱ͕Ͱ͖Δ •
࣮QA࣌ͷόάͷͳͲ͜Ε͔Β͏গ͠ੳ͍͖͍ͯͨ͠
͋Γ͕ͱ͏͍͟͝·ͨ͠