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
66
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
FlutterアプリにおけるSLI/SLOを用いたユーザー体験の可視化と計測基盤構築
ostk0069
0
56
Monitoring user experience of Flutter apps with SLI/SLO
ostk0069
0
110
Monitoring user experience of Flutter apps with SLI/SLO (日本語)
ostk0069
2
1.6k
Flutter アプリにおけるテスト戦略の見直しと自動テストの導入
ostk0069
2
5k
Using Hooks in iOS App Development - CA.swift #14
ostk0069
4
490
Visual Regression Testの長期運用や全員Approve制度について - CA.swift #13
ostk0069
0
86
Other Decks in Technology
See All in Technology
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
190
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
SSMRunbook作成の勘所_20241120
koichiotomo
2
150
個人でもIAM Identity Centerを使おう!(アクセス管理編)
ryder472
3
220
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
480
The Role of Developer Relations in AI Product Success.
giftojabu1
0
130
SRE×AIOpsを始めよう!GuardDutyによるお手軽脅威検出
amixedcolor
0
120
Lexical Analysis
shigashiyama
1
150
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
130
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
130
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
590
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
297
20k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Side Projects
sachag
452
42k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The World Runs on Bad Software
bkeepers
PRO
65
11k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
"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