Slide 1

Slide 1 text

1 Yuya Okuse TCAにおける副作用の分離 TCAでわいわいLT会 Yuya Okuse Yuya Okuse 2024/03/18

Slide 2

Slide 2 text

自己紹介 2 ● Yuya Okuse ● 株式会社ディー・エヌ・エー23新卒 ● SWET 第二グループ ● iOS アプリエンジニア(Swift) ○ 2023/07 ~ ● TCA ○ 2024/02 ~

Slide 3

Slide 3 text

お話すること 3 TCA における副作用の分離

Slide 4

Slide 4 text

TCA ● The Composable Architecture ● 以下の課題を解決: ○ State management ○ Composition ○ Side effect ○ Testing ○ Ergonomics 4 https://github.com/pointfreeco/swift-composable-architecture

Slide 5

Slide 5 text

TCA ● The Composable Architecture ● 以下の課題を解決: ○ State management ○ Composition ○ Side effect ○ Testing ○ Ergonomics 5 https://github.com/pointfreeco/swift-composable-architecture

Slide 6

Slide 6 text

Personal Access Token による GitHub ログイン 6

Slide 7

Slide 7 text

非同期処理が実行できない 7 Cannot pass function of type '(inout LoginFeature.State, LoginFeature.Action) async -> Effect' to parameter expecting synchronous function type Error:

Slide 8

Slide 8 text

非同期処理が実行できない 8 クロージャでは非同期関数が使用できない

Slide 9

Slide 9 text

非同期処理を実行するために 9 クロージャ内で非同期関数を実行可能

Slide 10

Slide 10 text

可変な変数をキャプチャできない 10 Mutable capture of 'inout' parameter 'state' is not allowed in concurrently-executing code Error:

Slide 11

Slide 11 text

Reduce struct と static func run 定義 11 inout 引数 @Sendable

Slide 12

Slide 12 text

可変な変数をキャプチャできない 12 Mutable capture of 'inout' parameter 'state' is not allowed in concurrently-executing code Error:

Slide 13

Slide 13 text

13 成功時 失敗時

Slide 14

Slide 14 text

状態(State)の変化 14

Slide 15

Slide 15 text

副作用 15

Slide 16

Slide 16 text

16 TCA はコンパイルの段階で、 副作用に伴う状態の変化と副作用を分離 副作用の分離

Slide 17

Slide 17 text

副作用が分離されたことによる利点 17 ● 副作用に対する状態変化の把握が容易 ● Reducer 内に状態管理を限定することで、 意図しない(未知の)状態変化が起きない 状態管理が容易

Slide 18

Slide 18 text

状態(State)の変化 18

Slide 19

Slide 19 text

副作用が分離されたことによる利点 19 ● 副作用に伴う 状態の更新(UI 変更)ロジックが 疎結合であるため、テストが容易 ○ https://github.com/pointfreeco/swift-dependencies ● 副作用を含むロジックは、独立して単体テスト が可能。 テスト容易性の向上

Slide 20

Slide 20 text

まとめ 20 TCA はコンパイルの段階で、 副作用に伴う状態の変化と副作用 を分離