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
780
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
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
200
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
32k
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
540
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
17
14k
Qiita埋め込み用スライド
naoki_0531
0
5.1k
kargoの魅力について伝える
magisystem0408
0
210
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
210
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
100
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
200
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
130
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Being A Developer After 40
akosma
87
590k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Side Projects
sachag
452
42k
How GitHub (no longer) Works
holman
311
140k
The Invisible Side of Design
smashingmag
298
50k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Into the Great Unknown - MozCon
thekraken
33
1.5k
The Language of Interfaces
destraynor
154
24k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Music & Morning Musume
bryan
46
6.2k
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