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
1k
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
20周年を迎えるAmebaのアプリ開発
dazy
0
55
Other Decks in Programming
See All in Programming
Open source software: how to live long and go far
gaelvaroquaux
0
440
Package Traits
ikesyo
2
230
いりゃあせ、PHPカンファレンス名古屋2025 / Welcome to PHP Conference Nagoya 2025
ttskch
1
240
Alba: Why, How and What's So Interesting
okuramasafumi
0
240
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
1.6k
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1.2k
自動で //nolint を挿入する取り組み / Gopher's Gathering
utgwkk
1
200
社内フレームワークとその依存性解決 / in-house framework and its dependency management
vvakame
1
520
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
2
610
Azure AI Foundryのご紹介
qt_luigi
1
270
[Fin-JAWS 第38回 ~re:Invent 2024 金融re:Cap~]FaultInjectionServiceアップデート@pre:Invent2024
shintaro_fukatsu
0
390
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
330
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
64k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
220
Designing Experiences People Love
moore
139
23k
No one is an island. Learnings from fostering a developers community.
thoeni
20
3.1k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Being A Developer After 40
akosma
89
590k
Facilitating Awesome Meetings
lara
51
6.2k
Site-Speed That Sticks
csswizardry
3
310
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
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で実行されるた め、デバッグ時の影響もほとんどない
おわり ありがとうございました!