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
Introduction of The Composable Architecture - C...
Search
Takuma Osada
May 09, 2021
Technology
0
74
Introduction of The Composable Architecture - CyberAgent21卒内定者iOS輪読会
CyberAgent21卒内定者iOS輪読会の番外編で行ったThe Composable Architectureの説明スライドです
Takuma Osada
May 09, 2021
Tweet
Share
More Decks by Takuma Osada
See All by Takuma Osada
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
0
770
Monitoring user experience of Flutter apps with SLI/SLO
ostk0069
0
120
Monitoring user experience of Flutter apps with SLI/SLO (日本語)
ostk0069
2
1.7k
Flutter アプリにおけるテスト戦略の見直しと自動テストの導入
ostk0069
2
5.1k
Using Hooks in iOS App Development - CA.swift #14
ostk0069
4
500
Visual Regression Testの長期運用や全員Approve制度について - CA.swift #13
ostk0069
0
94
Other Decks in Technology
See All in Technology
.NET 9 のパフォーマンス改善
nenonaninu
0
840
C++26 エラー性動作
faithandbrave
2
720
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
kargoの魅力について伝える
magisystem0408
0
200
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
110
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
27
12k
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
160
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
2
260
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
130
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
440
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
280
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Statistics for Hackers
jakevdp
796
220k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
The Invisible Side of Design
smashingmag
298
50k
It's Worth the Effort
3n
183
28k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Transcript
第11回 CyberAgent21卒内定者iOS輪読会 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 1
今回は番外編です The Composable Architecture について⾏います CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069
2
今回の話では The Composable Architectureは⻑いので 本家でもよく出てくるTCAとして記すこととします CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069
3
発表者はTCAについてプロジェクトととしての運⽤経験はないのでマサカリをする際 には⼗分に配慮した上で⾏っていただけると助かります CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 4
今回話すこと 理解する上で必要な知識 主な概要や誕⽣経緯 5つの特徴 登場するClassの役割 導⼊することのメリット・デメリット サンプルコードを⾒る CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨
by @ostk0069 5
今回話さないこと ⻑期的に使うことのメリデメ 細かい圏論的な話 僕の経験はry-ittoとハッカソンの時に使ったことがあるぐらいです CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 6
理解する上で必要な知識 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 7
必要な知識 Combine(UIKit+RxSwiftもある⼀応ある) DI iOSで⽤いる設計ほぼ全て 特にReduxやFlux CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069
8
あると理解がはやいもの Elm Architecture Vuex ⽐較的考えが似ている、または開発者がそれにinspireされて作ってる CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069
9
主な概要 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 10
⼆⼈の有名な開発者によって作られた Brandon Williams Stephen Celis どちらもKick Starterのmain contributerとして有名。snapshot testingとかも作ってる。 CyberAgent21卒内定者iOS輪読会
- iOSアプリ設計パターン⼊⾨ by @ostk0069 11
動画が多数存在するのでとりあえず⾒てない⼈は⾒た⽅がいいかも https://www.pointfree.co/collections/composable-architecture/a-tour-of-the- composable-architecture/ep100-a-tour-of-the-composable-architecture-part-1 TCAの理解以外にも⾊々考え⽅を学べそうなコンテンツ(英語レベル⾼め) CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 12
5つの特徴 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 13
State Management Composition Side Effect Testable Ergonomics CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨
by @ostk0069 14
State Management 状態管理をReduxやFluxのように⾏う CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 15
Composition コンポーネント思考 FatなReducerが作成されない(Reducerの分割) CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 16
Side Effect サービスにおける副作⽤に耐えうる設計になってる 副作⽤(apiのfetch, 遅延処理とか) (PublisheのPublisherが内部で作成されてる) CombineのPublisherに準拠してるため実現できてる CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨
by @ostk0069 17
Testable 書くべきテストコードの明確化 Action -> Reducerをテストすることがメインになる サンプルコードも豊富 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by
@ostk0069 18
Ergonomics 簡略化(?) 僕はまだこれを実感できてない CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 19
登場するClassの役割 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 20
Action enumで定義されたユーザーのアクション Reducer Actionを受け取りEffectを呼び出すorStateに流す役割 Effect CombineのPublisher Actionへ接続する State 受け取った値をViewに反映させる Store
Action, Reducer, Effect, Stateの集合体 Environment Dependencyを保持する CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 21
CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 22
導⼊することのメリット・デメリット CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 23
メリット 状態管理の明確な責務の切り分け 設計に関する議論がチームで⾏いやすくなる modular architectureの適⽤のしやすさ 採⽤につながる Combine理解してなくてもなんとなくで書き始められる テストを書くことの難易度が下がる CyberAgent21卒内定者iOS輪読会 -
iOSアプリ設計パターン⼊⾨ by @ostk0069 24
デメリット 設計として制約が多い ライブラリとしての依存をしないといけない(⾃作でも問題ない) CombineをラップしてるのでCombineへの理解とiOS13以上ではないと使えない UIKitのサンプルも存在する 実務でやるのであればCombineの理解(ソースコードの理解)は必須 別の設計への乗り換えはそこそこしんどそう ⻑期プロジェクトになることが決まってないサービス チームのレベル感次第では崩壊する 特性を理解せずに導⼊するにはむしろマイナスが発⽣する可能性も
CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 25
サンプルコードを⾒る CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 26
Basic Usage https://github.com/pointfreeco/swift-composable-architecture#basic-usage Effectがどんな感じか理解しやすい TestStoreも⾒てみると良さそう Todos https://github.com/pointfreeco/swift-composable- architecture/tree/main/Examples/Todos 親コンポーネントと⼦コンポーネントの関係性が⾒れるので良さそう CyberAgent21卒内定者iOS輪読会
- iOSアプリ設計パターン⼊⾨ by @ostk0069 27
WithViewStore SwiftUIのView storeを初期値に持ち、viewStoreに変換する ViewStore Observed Object ViewStoreを購読してViewを変更できる CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨
by @ostk0069 28
その他 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 29
結構他にも似たような設計を提唱しているものはある Harvest bow-arch VueFlux CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 30
質問 & 議論 CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069 31
次回は 第13章 & CAの設計 です! CyberAgent21卒内定者iOS輪読会 - iOSアプリ設計パターン⼊⾨ by @ostk0069
32