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
[Jetpack Compose] 原理から見るSkippable対応
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Swimmy
January 18, 2024
Programming
370
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[Jetpack Compose] 原理から見るSkippable対応
Swimmy
January 18, 2024
More Decks by Swimmy
See All by Swimmy
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
250
違いがワカルKotlinプログラマーへの道
reoandroider
0
170
違いのワカル Kotlinプログラマーへの道
reoandroider
0
270
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途
reoandroider
0
3.4k
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途
reoandroider
0
3.2k
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途~NestedScrollInteropConnectionは何してるの?編~
reoandroider
0
2.9k
Roborazziを最大限に活用する(導入編)
reoandroider
0
360
Master of NestedScroll
reoandroider
0
16k
Jetpack_Composeで_半円のプログレスバーを作った話
reoandroider
0
470
Other Decks in Programming
See All in Programming
act1-costs.pdf
sumedhbala
0
250
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
160
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
150
共通化で考えるべきは、実装より公開する型だった
codeegg
0
280
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
2.2k
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
660
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
150
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
400
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
860
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
550
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
360
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.4k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
810
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Documentation Writing (for coders)
carmenintech
77
5.4k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
Automating Front-end Workflow
addyosmani
1370
210k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Code Review Best Practice
trishagee
74
20k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
220
It's Worth the Effort
3n
188
29k
Transcript
Harada Reo @ すいみー 2024/1/18 LT新年会 [Jetpack Compose] 原理から見るSkippable対応
すいみー CyberAgent Inc. Ameba どすこい塾 DroidKaigi Staff RunningReo 自己紹介 /
Introduction
このLTのゴール Composeフレームワークが 開発者に対して与える 恩恵を把握する
理想状態 Skippable対応をどこまで やるべきかの基準を 持てるようになる
Skippableとは? Composeのレンダリング段階は3つあるが パフォーマンス向上のため更新時に 飛ばす(skipする)工夫ができる Skippableとは?
話さないこと 細かいSkippable対応の tipsは特に話しません ※以下の赤い部分を話します
Composeフレームワークが やってくれること
Composeのフレームワークがやってくれること @Composable fun Title() { Column(modifier = Modifier.fillMaxWidth()) { Text(“Hello
World”) Button(onClick = { ... }) } }
Composeのフレームワークがやってくれること 普通の関数との違い ・何度も再実行可能である ・Skippableである ・リアクティブである
Composeのフレームワークがやってくれること 普通の関数との違い ・何度も再実行可能である ・Skippableである ・リアクティブである
Composeのフレームワークがやってくれること Compose Compilerは Stateを読み込むComposable関数を検出して それをCompose Runtimeに伝える 逆にStateを読み込まないComposable関数は Compose Runtimeに伝えない
Composeのフレームワークがやってくれること Compose Compilerは Stateを読み込むComposable関数を検出して それをCompose Runtimeに伝える 逆にStateを読み込まないComposable関数は Compose Runtimeに伝えない Compose
Compiler = Kotlin CompilerのPlugin
Composeのフレームワークがやってくれること Compose Compilerは Stateを読み込むComposable関数を検出して それをCompose Runtimeに伝える 逆にStateを読み込まないComposable関数は Compose Runtimeに伝えない Compose
Runtimeってなに?
Composeのフレームワークがやってくれること その前に・・・
Composeのフレームワークがやってくれること @Composable fun Title() { Column(modifier = Modifier.fillMaxWidth()) { Text(“Hello
World”) Button(onClick = { ... }) } }
Composeのフレームワークがやってくれること 普段書いているComposable関数ですが 実は見えない引数がコンパイル時に合成されている
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } }
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } } すべてのcomposable関数にcomposerが渡される ツリー構造をcompose runtimeに伝える
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } } すべてのcomposable関数にcomposerが渡される ツリー構造をcompose runtimeに伝える コードを自由に書き換えられるのはKotlinの恩恵! Javaでこのような柔軟な言語プラグインを作るのが難しい
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } } すべてのcomposable関数にcomposerが渡される ツリー構造をcompose runtimeに伝える コードを自由に書き換えられるのはKotlinの恩恵! Javaでこのような柔軟な言語プラグインを作るのが難しい Compose Runtimeってなに?(再び)
Composeのフレームワークがやってくれること ツリー構造をメモリ配列で見てみる
@Composable fun Title($composer: Composer<*>) { $composer.start(123) Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } $composer.end() } Composeのフレームワークがやってくれること
Composeのフレームワークがやってくれること Composable関数はUIの実体を返すわけではく Compose Runtimeを通じて メモリ内のツリー構造を構築したり 更新したりするので 高速なレンダリングが可能になっている
Composeのフレームワークがやってくれること Compose Runtimeは Composable関数のコードとSlot Tableを繋げる Interfaceのようなものでありそう メモリ内にDataのツリー構造を作っている 仕組みは素晴らしい!
Composeのフレームワークがやってくれること Composeフレームワークは Kotlinのオブジェクト指向に 関数型の概念を加える
Composeのフレームワークがやってくれること 関数型の特徴として 関数名・型・引数によって一意のkeyを生成する 関数の返り値をキャッシュすることができる 先ほどのSlot Tableの例から分かるように Composeフレームワークはソース内の 位置関係をキャッシュすることで どのような依存関係があるのかを明確にしている
振り返り
このLTのゴール Composeフレームワークが 開発者に対して与える 恩恵を把握する
このLTのゴール Composeフレームワークが 開発者に対して与える 恩恵を把握する 難しかった・・・
振り返り Compose内部の仕組みは難しく これだけでComposeのフレームワークの 恩恵を把握したというには早計・・・
振り返り とはいえ、原理からComposeを見ると Skippable対応が自然と実践できたり 今までの取り組みが腑に落ちることがある
「Jetpack Compose internals」 https://jorgecastillo.dev/book/ 「Under the hood of Jetpack Compose
— part 2 of 2」 https://medium.com/androiddevelopers/under-the-hood-of-jetpack- compose-part-2-of-2-37b2c20c6cdd 「KotlinConf 2019: Leland Richardson が解き明かす Compose ランタイム」 https://www.youtube.com/watch?v=6BRlI5zfCCk&t=153s 「Thinking in Compose」 https://developer.android.com/jetpack/compose/mental-model?hl=ja 参考資料
「Jetpack Compose internals」 https://jorgecastillo.dev/book/ 「Under the hood of Jetpack Compose
— part 2 of 2」 https://medium.com/androiddevelopers/under-the-hood-of-jetpack- compose-part-2-of-2-37b2c20c6cdd 「KotlinConf 2019: Leland Richardson が解き明かす Compose ランタイム」 https://www.youtube.com/watch?v=6BRlI5zfCCk&t=153s 「Thinking in Compose」 https://developer.android.com/jetpack/compose/mental-model?hl=ja 参考資料 誰か一緒に輪読会しませんか?
本年も よろしくお願いします