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
最新技術をキャッチアップしたい~The Composable Architecture~
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kanta
September 29, 2023
3
250
最新技術をキャッチアップしたい~The Composable Architecture~
Kanta
September 29, 2023
Tweet
Share
More Decks by Kanta
See All by Kanta
Swift丸1年学んだらどこまでできる!?
kantaswift
3
500
おしゃれなTabBarを作る!
kantaswift
0
54
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
120
Why Our Code Smells
bkeepers
PRO
340
58k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
So, you think you're a good person
axbom
PRO
2
1.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
The Invisible Side of Design
smashingmag
302
51k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Chasing Engaging Ingredients in Design
codingconduct
0
110
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
最新技術をキャッチアップしたい ~ The Composable Architecture ~ 上條 栞汰
⾃⼰紹介 l かみじょー l 東洋⼤学総合情報学部2年 l Swift歴1年と半分 l SwiftSyntax⼊⾨したい @KantaSwift
@kanta_Swift @kanta_Swift
最新技術ってわくわくしませんか?
iOS業界でトレンドとなっている技術のみなさん マルチモ ジュール The Composable Architecture Macro String Catalog SwiftSyntax
The Composable Architecture
The Composable Architectureとは ◎特徴 1. アプリの状態を1つのStateで管理できる 2. Stateの変更がReducer内のみに強制できる 3. テストがしやすい!
=> version1.0.0が最近(2ヶ⽉前)出た! ※現在: version 1.2.0 => Pointfreeが作ったライブラリ
概念 nState Management nComposition nTesting nSide Effects ある画⾯での状態の変更を別の画⾯で すぐに監視することができる⽅法 ⼤きな機能を細く分割し、それぞれを簡単に繋げて
機能を形成することができる 副作⽤を分離し、可能な限りテストができる 様々なケースのテストができる • 多くのComponentで構成された機能の統合テスト • 副作⽤がアプリケーションに与える影響のテスト
Reducer Action State Store Effect View 主要構成
Reducer Action State Store Effect View 主要構成 Button Tap!
Reducer Action State Store Effect View 主要構成 Button Tap! count
1up
Reducer Action State Store Effect View 主要構成 Button Tap! count
1up Viewに反映!
Reducer Action State Store Effect View 主要構成 Button Tap! count
1up Viewに反映! レスポンス リクエスト
かなり学習がしやすい!
⾊々ソースコードを⾒ていく
このコードどういうこと? 🧐
Case1 ~チュートリアルにて~ え、なんでcountにアクセスできんの?
Case2 ~サンプルアプリにて~ KeyPathではない何かがいる…
Case3 ~サンプルアプリにて~ 依存を注⼊してるっぽい??
TCAではめちゃよく使われている技術であり基本的なこと
これらの事例をちゃんと理解して TCAを利⽤したい
Case1: ViewStoreがなぜcountを知っているのか
結論 Key Path Member Lookupを利⽤してアクセスしているため。
Key Path Member Lookupとは =>Dynamic Member Lookup属性をKey Pathに基づいて拡張されたもの • 存在しないプロパティにアクセスすることができる
• サジェストは出てこない… • 存在しないプロパティにアクセスすることができない • サジェストは出てくる
ViewStoreの内部実装 => ViewStateをKeyPathのRootに設定することで、viewStoreからアクセスできる ※CurrentValueRelayはCombineのPublisher
ViewStoreの内部実装 => Observe: 必要なState(データ)だけを監視する => removeDuplicates: 同じState(データ)が来たらviewの再描画を抑制する
Case2: きみは⼀体なにものなの??
結論 swift-case-pathsというライブラリの機能
KeyPath 🙆 🙅 => Enum型でKeyPathを利⽤することはそもそもできない
swift-case-pathsとは => Enum型をKeyPathのように使えるようにしたもの!
swift-case-paths内部実装 => caseがクロージャーで定義されている => Operatorの定義🔽
使⽤例: swift-case-paths • embed: associcatedValueを追加することができる • extract: associatedValueを取り出すことができる Point!! 親から⼦のアクションを
とってくることができる!
Enumの性質 => caseをクロージャーで表すことができる! ※associatedValueがあるcaseのみ
swift-case-pathsがなぜTCAで使われるのか 親Reducer ⼦Reducer 親と⼦の統合において • Scope • Reducer.ifLet • Reducer.forEach
…etc
Tip: swift-case-paths内部実装 associatedValueがない場合も考慮されている
Case3 ~サンプルアプリにて~ 依存を注⼊してるっぽい??
結論 swift-dependenciesというライブラリの機能
swift-dependenciesとは => DIを簡単に実装することができるライブラリ! => Live、Test、Previewの3つの場合で⾃動的に切り替えてくれる! DependenciesValue DependencyKey (TestDependencyKey) Keyを作成! Keyを登録
実装例: TestDependencyKeyの作成と登録 TestDependencyKeyでは、testValueの実装が求められる
実装例: DependencyKeyの作成と登録 DependencyKeyでは、liveValueの実装が求められる
実装例: 登録したDependencyの呼び出し
疑問: なぜ呼び出すことができるのか => KeyPathにDependencyValueが設定されている!
疑問: なぜswift-dependenciesが良いのか • 数珠つなぎでinitの引数の数が膨⼤になる • 数珠つなぎであるが故に、⼀部分だけmock等に差し替えることができない ◎既存DI⽅法における問題 これらの問題を全て解決してくれる!!
PointFreeが出しているライブラリの皆さん swift-case- paths swift- depedencies swift- snapshot- testing swift- identified-
collections swiftui- navigation 今回紹介したライブラリも最初の基礎的な部分!
参考⽂献 ご清聴ありがとうございました!! • https://github.com/apple/swift-evolution/blob/main/proposals/0195-dynamic- member-lookup.md • https://github.com/apple/swift-evolution/blob/main/proposals/0252-keypath- dynamic-member-lookup.md • https://zenn.dev/kalupas226/articles/25ec066246473e
• https://github.com/pointfreeco/swift-case-paths • https://github.com/pointfreeco/swift-dependencies • https://github.com/pointfreeco/swift-composable-architecture