Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Compose Compiler Metrics 詳細と活用方法
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
makun
April 20, 2023
Programming
980
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Compose Compiler Metrics 詳細と活用方法
YouTube :
https://youtu.be/SqQedt2zm44
makun
April 20, 2023
More Decks by makun
See All by makun
2年連続で採択されたことの考察と プロポーザルの書き方
makun
0
20
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
1.1k
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
150
No More Writing Test Code: JetBrains AI Assistant Automates Design and Generation of Asynchronous Processing Tests
makun
0
110
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
2.4k
既存コードへのテスト追加とリファクタリングの実践
makun
0
190
Jetpack Composeを本番導入してみた結果と課題
makun
1
300
分析用コードをアプリから 切り離す設計の実現
makun
0
160
Other Decks in Programming
See All in Programming
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
210
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
250
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
130
dotNET_vulnclicker_intro.pdf
deka_morita
0
160
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
220
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.4k
Performance Optimization With LLMs
xleitix
0
230
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.5k
Kotlinの15年とServer-Side Kotlin
n_takehata
1
190
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
240
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
240
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
540
Designing for humans not robots
tammielis
254
26k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
380
Speed Design
sergeychernyshev
33
2.2k
Between Models and Reality
mayunak
4
540
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Become a Pro
speakerdeck
PRO
31
6.3k
Odyssey Design
rkendrick25
PRO
2
910
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
290
Six Lessons from altMBA
skipperchong
29
4.6k
Transcript
makun @ pixiv App Night Compose Compiler Metrics 詳細と活用方法
概要 1. Compose Compiler Metrics とは 2. Metrics の生成方法 3.
Metrics の内容の紹介 4. 注目すべき内容 5. 活用方法
Compose Compiler Metricsとは
ChatGPTにきいてみた
ChatGPTにきいてみた Compose Compiler Metrics は、Jetpack Compose Compiler の パフォーマン スと効率を測定するメトリクスのセット
です。Compiler Metics は、開発プロセス におけるコンパイラのパフォーマンスを追跡し、Compose Compiler の パフォー マンスを最適化するために改善できる部分を特定するために使用 されます。
ChatGPTにきいてみた Compose コンパイラの性能を測定するために使用できる測定基準の例として は、コンパイル時間、メモリ使用量、および CPU使用量 が挙げられます。これら のメトリクスを長期的に追跡および分析することで、コンパイラのパフォーマンス を最適化するために改善できる傾向や領域を特定することができます。 紹介したい内容とはちがう
Compose Compiler Metricsとは Compose Compiler プラグインによって生成できる情報 のこと。 Compose Compiler プラグインは、特定の
Compose 固有の概念に関するレ ポートやメトリクスを生成する ことができ、Compose コードに何が起こっている かを細かいレベルで理解するのに役立ちます。
Jetpack Compose の理解がすすむ 作った Composable が コンパイラにどのように解釈されるのか知ることができ る。そのため、実際に自分でいろんなコードを試す ことで、より Compose
の理 解を深めることができる。
Composable の改善ができる いままで作ってきた Composable が 本当に最適な状態なのか確かめることが できる。とくに大規模なアプリを Jetpack Compose で置き換えるときなど、既存
のプロジェクトに Jetpack Compose を適用する際に有用 である。
生成方法
ビルドファイルに設定を追記 各モジュールの build.gradle に上記の設定を追記する
ビルドファイルに設定を追記 ※ ファイルの書き出し場所の指定は必須
ファイルを生成 設定を追記しビルドをすることで、設定で指 定した場所にファイルが生成されているのが わかる。
生成できるファイル
生成できるファイル • <module-name>_<build-type>-module.json • <module-name>_<build-type>-composables.txt • <module-name>_<build-type>-composables.csv • <module-name>_<build-type>-classes.txt
-module.json(全体的な統計情報) 対象モジュールに関する一般的な指標を提 供してくれる。左の例では、コンポーザブル が 100個 あり、そのうち 単体で再コンポー ズ可能 なものが 60個、再コンポーズ可能だ
がスキップができないもの が 7個 あることが わかる。
-composables.txt(コンポーザブルの情報)
-composables.csv(コンポーザブル情報表)
-classes.txt(クラス情報) コンパイラがそのクラスをどのよ うに解釈したかがわかる。各 パ ラメータの安定性 や ランタイム 時の安定性 などもわかる。
注目したい情報
restartable と skippable
restartable 再コンポーズ時にその Composable 自体が再コンポーズ可能である状態 のこ と。restartable でない場合は、親の Composable を再コンポーズする。 親
Composable restartable Composable 再コンポーズ 親 Composable NOT restartable Composable 再コンポーズ
skippable 再コンポーズ時に値が同じであれば、その Composable が再コンポーズをス キップできる状態 のこと。その Composable が skippable であれば、必ず
restartable でもある。 親 Composable 子 Composable NOT skippable 子 Composable skippable 再コンポーズ 再コンポーズ スキップ
restartable but not skippable composables.txt では restartable だけれど skippable ではない
Composable をみることがある。 state1 state2 state3 skippable 〇 restartable 〇 〇
restartable but not skippable Composable が 100個 restartable が 60個
skippable が 53個 restartable だけど skippable でない Composable が 60 - 53 = 7個 ある。
restartable but not skippable 全ての Composable を skippable にしなければいけないわけではない。 そのような
Composable をみつけたときは、次の選択肢のうちどれか1つを選 択できる。 1. 引数を全て stable にし skippable にする 2. @NonRestartableComposable と記す
@NonRestartableComposable Composable が 再コンポジションの「ルート」でない場合に有効 である。つまり、 他の状態の変化に影響されないような Composable のとき。コンパイラは自動 でその判断ができない ためアノテーションで宣言する。
普段のアプリ開発で利用することは、ほぼ無い。
@NonRestartableComposable
Composable の初期値
Composableの初期値 composables.txt で Composable の引数に初期値があるとき @static や @dynamic をみることがある。 @static
引数の初期値が安定した値 @dynamic 引数の初期値が 動的に変更される可能性がある 値
Composableの初期値 Composable の引数の初期値は基本的に @static にする必要がある。 ただし、次の場合はその限りではない。 • CompositionLocal や State
などの 観測可能な動的変数の読み取り • remember などの Composable Function の呼び出し
@dynamic MaterialTheme が指定されているときは @dynamic になるのが一般的
@dynamic rememberScrollState も @dynamic になるのが一般的
@dynamic その他の Composable で引数の初期値が @dynamic のときは、その 初期値 を削除する か @Stableアノテーションを利用
する。
活用方法
レビューコストの削減 プルリクエストなどでのレビューで Composable が最適に設計されていることを 担保したいが、人間が毎回確認するのは手間 になりがち。そのため、Compose Compiler Metrics の情報を 自動で解析する仕組みを導入することでそのコスト
を削減 できる。
None
None
レビューコストの削減 CI などで Compose Compiler Report to HTML で HTML
を書き出し、 Jenkins の HTML Publisher Plugin を使って確認しやすくしたりできる。
まとめ Compose Compiler Metrics は、Compose のコンパイラの解釈を可視化でき る。それらの内容を調査することで、アプリのパフォーマンス改善や Jetpack Compose の理解を深めることができる。また、その結果を活用することでレ
ビューコストの削減なども見込める。