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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Naoki Odajima
March 18, 2024
Programming
0
1.5k
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
480
20周年を迎えるAmebaのアプリ開発
dazy
0
79
Other Decks in Programming
See All in Programming
20260320登壇資料
pharct
0
140
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
110
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
260
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
150
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
440
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
310
ファインチューニングせずメインコンペを解く方法
pokutuna
0
210
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
700
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
270
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
120
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
190
モダンOBSプラグイン開発
umireon
0
190
Featured
See All Featured
Music & Morning Musume
bryan
47
7.1k
GitHub's CSS Performance
jonrohan
1032
470k
Odyssey Design
rkendrick25
PRO
2
560
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How STYLIGHT went responsive
nonsquared
100
6k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
190
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
240
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
160
Faster Mobile Websites
deanohume
310
31k
The Curse of the Amulet
leimatthew05
1
11k
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で実行されるた め、デバッグ時の影響もほとんどない
おわり ありがとうございました!