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
TCA魔法学入門🪄
Search
Naoki Odajima
March 18, 2024
Programming
0
1.3k
TCA魔法学入門🪄
Uzabase様主催で2024/03/18に行われた、『【iOS】TCAでわいわいLT会』において発表したスライドになります。TCAの不思議な(魔法のような)コードの仕組みを少しだけみてみましょう。
Naoki Odajima
March 18, 2024
Tweet
Share
More Decks by Naoki Odajima
See All by Naoki Odajima
TCAを用いたAmebaのリアーキテクチャ
dazy
0
400
20周年を迎えるAmebaのアプリ開発
dazy
0
73
Other Decks in Programming
See All in Programming
大規模アプリのDIフレームワーク刷新戦略 ~過去最大規模の並行開発を止めずにアプリ全体に導入するまで~
mot_techtalk
1
430
Swift Concurrency - 状態監視の罠
objectiveaudio
2
510
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
370
Cursorハンズオン実践!
eltociear
2
1k
Advance Your Career with Open Source
ivargrimstad
0
490
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
190
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
470
CSC509 Lecture 04
javiergs
PRO
0
300
その面倒な作業、「Dart」にやらせませんか? Flutter開発者のための業務効率化
yordgenome03
1
120
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
540
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
Featured
See All Featured
Practical Orchestrator
shlominoach
190
11k
Context Engineering - Making Every Token Count
addyosmani
5
230
KATA
mclloyd
32
15k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
900
Understanding Cognitive Biases in Performance Measurement
bluesmoon
30
2.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
860
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Code Review Best Practice
trishagee
72
19k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Transcript
TCA魔法学入門🪄 2024/03/18 TCAわいわいLT会
Naoki Odajima • CyberAgent, inc. Ameba • @devdazy • サモランガチ勢🐟
TCAって魔法(みたいなコード)多くないですか? • ビルトインされてる便利な奴らが多すぎる • 使ってみたらうまく動いた…けどどう動いてる? • ちょっとだけ正体を知ろう、というのが趣旨 • あわよくば使っている技術を利用できるようになりたい
もくじ • @Dependency • _printChanges(_:)
もくじ • @Dependency • _printChanges(_:)
@Dependency • DIのアクセス部分を担当するProperty Wrapper • 通常時、テスト時、プレビュー時に合わ せて、勝手に切り替わってくれる • どうやってる?🤔
DependencyContext • 実行状態を表す DependencyContextが定義さ れている
DependencyContext - defaultContext • Environment Variablesの XCODE_RUNNING_FOR_P REVIEWSの値でプレビュー中 かチェック •
プレビューだけ処理を飛ばした いみたいな時に使える👀
DependencyContext - defaultContext • ProcessInfoのいろんな値で値 でテスト中かチェック • _XCTIsTestingはpublicなので 利用できる🙌
DependencyContext - defaultContext • SWIFT_DEPENDENCIES_C ONTEXTで、強制的に別の状 態にすることもできる💡
DependencyContext - defaultContext • スキームの編集から Environment Variables を設定可能
Dependenciesについては… • ここまでの内容を包含しためちゃんこ詳しい記事をアイカワさんが公開してらっしゃ います。ぜひ見ましょう!! • 利用シーンから Dependencies の仕組みを紐解く
もくじ • @Dependency • _printChanges(_:)
_printChanges(_:) • Reducerにつけるだけで、受け取った ActionとStateの変化(差分)を標準出 力してくれる便利なやつ • カスタマイズできる?🤔 • つけたままで本番への影響は?🤨
_printChanges(_:) • 実はprinter: _ReducerPrinter<State, Action>?なる引数がある • デフォルトでcustomDumpになっており、いつもの出力はこいつのおかげ
_printChanges(_:) - _ReducerPrinter<State, Action> • customDump ◦ 受け取ったActionと発生したStateの差分 を出力 •
actionLabels ◦ 受け取ったActionのみ出力 • ただprintを呼んでいるだけなので、な んでもできそう
_printChanges(_:) • プリプロセッサマクロで、DEBUG時に のみ出力されるようになっているた め、本番への影響はほとんどない • プリンター用のQueueで実行されるた め、デバッグ時の影響もほとんどない
おわり ありがとうございました!