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
110
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
230
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
1
1.2k
Monitoring user experience of Flutter apps with SLI/SLO
ostk0069
0
180
Monitoring user experience of Flutter apps with SLI/SLO (日本語)
ostk0069
2
2k
Flutter アプリにおけるテスト戦略の見直しと自動テストの導入
ostk0069
2
6k
Using Hooks in iOS App Development - CA.swift #14
ostk0069
4
550
Visual Regression Testの長期運用や全員Approve制度について - CA.swift #13
ostk0069
0
130
Other Decks in Technology
See All in Technology
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
2
140
Agentic Workflowという選択肢を考える
tkikuchi1002
1
370
PHP開発者のためのSOLID原則再入門 #phpcon / PHP Conference Japan 2025
shogogg
0
160
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全 / 20250625-aws-summit-aws-policy
opelab
6
700
Amazon Q Developer for GitHubとAmplify Hosting でサクッとデジタル名刺を作ってみた
kmiya84377
0
3.5k
変化する開発、進化する体系時代に適応するソフトウェアエンジニアの知識と考え方(JaSST'25 Kansai)
mizunori
0
130
ハノーバーメッセ2025座談会.pdf
iotcomjpadmin
0
150
_第3回__AIxIoTビジネス共創ラボ紹介資料_20250617.pdf
iotcomjpadmin
0
140
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
1
390
【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術
cygames
0
850
ObsidianをMCP連携させてみる
ttnyt8701
2
140
Snowflake Summit 2025全体振り返り / Snowflake Summit 2025 Overall Review
mtpooh
2
200
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Fireside Chat
paigeccino
37
3.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Adopting Sorbet at Scale
ufuk
77
9.4k
Automating Front-end Workflow
addyosmani
1370
200k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
KATA
mclloyd
29
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
700
A designer walks into a library…
pauljervisheath
206
24k
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