SlideShare a Scribd company logo
1 of 32
Download to read offline
第11回 CyberAgent21卒内定者iOS輪読会
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 1
今回は番外編です
TheComposableArchitectureについて⾏います
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 2
今回の話ではTheComposableArchitectureは⻑いので
本家でもよく出てくる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
あると理解がはやいもの
ElmArchitecture
Vuex
⽐較的考えが似ている、または開発者がそれにinspireされて作ってる
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 9
主な概要
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 10
⼆⼈の有名な開発者によって作られた
BrandonWilliams
StephenCelis
どちらもKickStarterのmaincontributerとして有名。snapshottestingとかも作ってる。
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
StateManagement
Composition
SideEffect
Testable
Ergonomics
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 14
StateManagement
状態管理をReduxやFluxのように⾏う
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 15
Composition
コンポーネント思考
FatなReducerが作成されない(Reducerの分割)
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 16
SideEffect
サービスにおける副作⽤に耐えうる設計になってる
副作⽤(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
メリット
状態管理の明確な責務の切り分け
設計に関する議論がチームで⾏いやすくなる
modulararchitectureの適⽤のしやすさ
採⽤につながる
Combine理解してなくてもなんとなくで書き始められる
テストを書くことの難易度が下がる
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 24
デメリット
設計として制約が多い
ライブラリとしての依存をしないといけない(⾃作でも問題ない)
CombineをラップしてるのでCombineへの理解とiOS13以上ではないと使えない
UIKitのサンプルも存在する
実務でやるのであればCombineの理解(ソースコードの理解)は必須
別の設計への乗り換えはそこそこしんどそう
⻑期プロジェクトになることが決まってないサービス
チームのレベル感次第では崩壊する
特性を理解せずに導⼊するにはむしろマイナスが発⽣する可能性も
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 25
サンプルコードを⾒る
CyberAgent21卒内定者iOS輪読会-iOSアプリ設計パターン⼊⾨
by@ostk0069 26
BasicUsage
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
ObservedObject
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

More Related Content

Similar to The Composable Architecture [iOS内定者輪読会]

スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話Keigo Suda
 
仮想サーバは、もう不要?!今からIoTやるなら 「サーバレス・コンピューティング」
仮想サーバは、もう不要?!今からIoTやるなら「サーバレス・コンピューティング」仮想サーバは、もう不要?!今からIoTやるなら「サーバレス・コンピューティング」
仮想サーバは、もう不要?!今からIoTやるなら 「サーバレス・コンピューティング」真吾 吉田
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLINE Corporation
 
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピングI os*ble簡単プロトタイピング
I os*ble簡単プロトタイピングTakahiro Yamamoto
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計Yuichi Adachi
 
Designer's Design Talk「デザインの基礎」
Designer's Design Talk「デザインの基礎」Designer's Design Talk「デザインの基礎」
Designer's Design Talk「デザインの基礎」典子 松本
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化幸雄 村上
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringIssei Hiraoka
 
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜SORACOM,INC
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2Shuichi Tsutsumi
 
はじめてのAzure Sphere
はじめてのAzure SphereはじめてのAzure Sphere
はじめてのAzure SphereTomokazu Kizawa
 
Einsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみようEinsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみようSalesforce Developers Japan
 
Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」
Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」
Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」SORACOM,INC
 
MYQLO〜あなたの拡張クローゼット〜
MYQLO〜あなたの拡張クローゼット〜MYQLO〜あなたの拡張クローゼット〜
MYQLO〜あなたの拡張クローゼット〜Ryota Aoki
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングRyohei Kamiya
 
日本Androidの会中国支部第23回勉強会資料
日本Androidの会中国支部第23回勉強会資料日本Androidの会中国支部第23回勉強会資料
日本Androidの会中国支部第23回勉強会資料Yuki Yamakido
 
中国のスマホ市場
中国のスマホ市場中国のスマホ市場
中国のスマホ市場Namito Satoyama
 
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したいソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したいYukio Saito
 

Similar to The Composable Architecture [iOS内定者輪読会] (20)

スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話スマートファクトリーを支えるIoTインフラをつくった話
スマートファクトリーを支えるIoTインフラをつくった話
 
仮想サーバは、もう不要?!今からIoTやるなら 「サーバレス・コンピューティング」
仮想サーバは、もう不要?!今からIoTやるなら「サーバレス・コンピューティング」仮想サーバは、もう不要?!今からIoTやるなら「サーバレス・コンピューティング」
仮想サーバは、もう不要?!今からIoTやるなら 「サーバレス・コンピューティング」
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With Kotlin
 
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピングI os*ble簡単プロトタイピング
I os*ble簡単プロトタイピング
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
 
Designer's Design Talk「デザインの基礎」
Designer's Design Talk「デザインの基礎」Designer's Design Talk「デザインの基礎」
Designer's Design Talk「デザインの基礎」
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
 
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
SORACOM Conference "Discovery" 2018 | E1. Wioで始めるIoTプロトタイプ開発 〜実践事例のご紹介〜
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 
Rosecar
RosecarRosecar
Rosecar
 
はじめてのAzure Sphere
はじめてのAzure SphereはじめてのAzure Sphere
はじめてのAzure Sphere
 
Einsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみようEinsteinvision - object detection を試してみよう
Einsteinvision - object detection を試してみよう
 
Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」
Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」
Developers Festa Sapporo 2019 | 今日から取り組めるIoT と「IoT ライブデモ5連発」
 
MYQLO〜あなたの拡張クローゼット〜
MYQLO〜あなたの拡張クローゼット〜MYQLO〜あなたの拡張クローゼット〜
MYQLO〜あなたの拡張クローゼット〜
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 
日本Androidの会中国支部第23回勉強会資料
日本Androidの会中国支部第23回勉強会資料日本Androidの会中国支部第23回勉強会資料
日本Androidの会中国支部第23回勉強会資料
 
中国のスマホ市場
中国のスマホ市場中国のスマホ市場
中国のスマホ市場
 
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したいソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
 

The Composable Architecture [iOS内定者輪読会]