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
Swimmy
January 18, 2024
Programming
380
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
260
違いがワカルKotlinプログラマーへの道
reoandroider
0
170
違いのワカル Kotlinプログラマーへの道
reoandroider
0
270
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途
reoandroider
0
3.4k
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途
reoandroider
0
3.3k
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途~NestedScrollInteropConnectionは何してるの?編~
reoandroider
0
3k
Roborazziを最大限に活用する(導入編)
reoandroider
0
360
Master of NestedScroll
reoandroider
0
16k
Jetpack_Composeで_半円のプログレスバーを作った話
reoandroider
0
470
Other Decks in Programming
See All in Programming
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
52
33k
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
240
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
490
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
2
980
Foundry Localでエージェント開発
seosoft
0
110
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
190
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
530
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
400
AIの中の人になってみる
htkym
0
150
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
120
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
110
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.7k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
The untapped power of vector embeddings
frankvandijk
2
1.9k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
The Curse of the Amulet
leimatthew05
2
14k
The browser strikes back
jonoalderson
0
1.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
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 参考資料 誰か一緒に輪読会しませんか?
本年も よろしくお願いします