Slide 1

Slide 1 text

TCA魔法学入門🪄 2024/03/18 TCAわいわいLT会

Slide 2

Slide 2 text

Naoki Odajima ● CyberAgent, inc. Ameba ● @devdazy ● サモランガチ勢🐟

Slide 3

Slide 3 text

TCAって魔法(みたいなコード)多くないですか? ● ビルトインされてる便利な奴らが多すぎる ● 使ってみたらうまく動いた…けどどう動いてる? ● ちょっとだけ正体を知ろう、というのが趣旨 ● あわよくば使っている技術を利用できるようになりたい

Slide 4

Slide 4 text

もくじ ● @Dependency ● _printChanges(_:)

Slide 5

Slide 5 text

もくじ ● @Dependency ● _printChanges(_:)

Slide 6

Slide 6 text

@Dependency ● DIのアクセス部分を担当するProperty Wrapper ● 通常時、テスト時、プレビュー時に合わ せて、勝手に切り替わってくれる ● どうやってる?🤔

Slide 7

Slide 7 text

DependencyContext ● 実行状態を表す DependencyContextが定義さ れている

Slide 8

Slide 8 text

DependencyContext - defaultContext ● Environment Variablesの XCODE_RUNNING_FOR_P REVIEWSの値でプレビュー中 かチェック ● プレビューだけ処理を飛ばした いみたいな時に使える👀

Slide 9

Slide 9 text

DependencyContext - defaultContext ● ProcessInfoのいろんな値で値 でテスト中かチェック ● _XCTIsTestingはpublicなので 利用できる🙌

Slide 10

Slide 10 text

DependencyContext - defaultContext ● SWIFT_DEPENDENCIES_C ONTEXTで、強制的に別の状 態にすることもできる💡

Slide 11

Slide 11 text

DependencyContext - defaultContext ● スキームの編集から Environment Variables を設定可能

Slide 12

Slide 12 text

Dependenciesについては… ● ここまでの内容を包含しためちゃんこ詳しい記事をアイカワさんが公開してらっしゃ います。ぜひ見ましょう!! ● 利用シーンから Dependencies の仕組みを紐解く

Slide 13

Slide 13 text

もくじ ● @Dependency ● _printChanges(_:)

Slide 14

Slide 14 text

_printChanges(_:) ● Reducerにつけるだけで、受け取った ActionとStateの変化(差分)を標準出 力してくれる便利なやつ ● カスタマイズできる?🤔 ● つけたままで本番への影響は?🤨

Slide 15

Slide 15 text

_printChanges(_:) ● 実はprinter: _ReducerPrinter?なる引数がある ● デフォルトでcustomDumpになっており、いつもの出力はこいつのおかげ

Slide 16

Slide 16 text

_printChanges(_:) - _ReducerPrinter ● customDump ○ 受け取ったActionと発生したStateの差分 を出力 ● actionLabels ○ 受け取ったActionのみ出力 ● ただprintを呼んでいるだけなので、な んでもできそう

Slide 17

Slide 17 text

_printChanges(_:) ● プリプロセッサマクロで、DEBUG時に のみ出力されるようになっているた め、本番への影響はほとんどない ● プリンター用のQueueで実行されるた め、デバッグ時の影響もほとんどない

Slide 18

Slide 18 text

おわり ありがとうございました!