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.2k
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
370
20周年を迎えるAmebaのアプリ開発
dazy
0
72
Other Decks in Programming
See All in Programming
Claude Code派?Gemini CLI派? みんなで比較LT会!_20250716
junholee
1
750
Go製CLIツールをnpmで配布するには
syumai
0
790
0から始めるモジュラーモノリス-クリーンなモノリスを目指して
sushi0120
0
170
PHPカンファレンス関西2025 基調講演
sugimotokei
5
1k
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
830
20250708_JAWS_opscdk
takuyay0ne
2
150
Gemini CLI のはじめ方
ttnyt8701
1
110
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
4
650
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
180
「次に何を学べばいいか分からない」あなたへ──若手エンジニアのための学習地図
panda_program
3
670
CDK引数設計道場100本ノック
badmintoncryer
2
590
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
3
520
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
It's Worth the Effort
3n
185
28k
Adopting Sorbet at Scale
ufuk
77
9.5k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The Pragmatic Product Professional
lauravandoore
35
6.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
860
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
The Cost Of JavaScript in 2023
addyosmani
51
8.7k
Navigating Team Friction
lara
187
15k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
A Tale of Four Properties
chriscoyier
160
23k
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で実行されるた め、デバッグ時の影響もほとんどない
おわり ありがとうございました!