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.4k
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
460
20周年を迎えるAmebaのアプリ開発
dazy
0
76
Other Decks in Programming
See All in Programming
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
CSC307 Lecture 10
javiergs
PRO
1
660
今から始めるClaude Code超入門
448jp
8
9k
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.6k
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
310
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
980
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
Basic Architectures
denyspoltorak
0
680
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
760
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.3k
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
120
The SEO Collaboration Effect
kristinabergwall1
0
350
Faster Mobile Websites
deanohume
310
31k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
Designing for humans not robots
tammielis
254
26k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
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で実行されるた め、デバッグ時の影響もほとんどない
おわり ありがとうございました!