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
79
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
130
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
0
860
Monitoring user experience of Flutter apps with SLI/SLO
ostk0069
0
140
Monitoring user experience of Flutter apps with SLI/SLO (日本語)
ostk0069
2
1.8k
Flutter アプリにおけるテスト戦略の見直しと自動テストの導入
ostk0069
2
5.2k
Using Hooks in iOS App Development - CA.swift #14
ostk0069
4
510
Visual Regression Testの長期運用や全員Approve制度について - CA.swift #13
ostk0069
0
98
Other Decks in Technology
See All in Technology
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
160
2025年のARグラスの潮流
kotauchisunsun
0
790
AWS Community Builderのススメ - みんなもCommunity Builderに応募しよう! -
smt7174
0
170
駆け出しリーダーとしての第一歩〜開発チームとの新しい関わり方〜 / Beginning Journey as Team Leader
kaonavi
0
120
エンジニアリングマネージャー視点での、自律的なスケーリングを実現するFASTという選択肢 / RSGT2025
yoshikiiida
4
3.6k
Reactフレームワークプロダクトを モバイルアプリにして、もっと便利に。 ユーザに価値を届けよう。/React Framework with Capacitor
rdlabo
0
120
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
240
コロプラのオンボーディングを採用から語りたい
colopl
5
970
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
350
EMConf JP の楽しみ方 / How to enjoy EMConf JP
pauli
2
150
データ基盤におけるIaCの重要性とその運用
mtpooh
4
490
Amazon Q Developerで.NET Frameworkプロジェクトをモダナイズしてみた
kenichirokimura
1
200
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Unsuck your backbone
ammeep
669
57k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Become a Pro
speakerdeck
PRO
26
5.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Thoughts on Productivity
jonyablonski
68
4.4k
We Have a Design System, Now What?
morganepeng
51
7.3k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
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