はじめに
- 本書の対象読者
- 本書で扱う内容
- フィードバックとイシュー報告
第1章:Compose Compiler
- @Composable — アノテーションからコード変換へ
- 安定性推論 — コンパイラがパラメータを分類するしくみ
- ラムダのメモ化 — 不要な再コンポジションを防ぐ
- Composeコンパイラプラグインのアーキテクチャ
- IR変換パイプライン
- Composerパラメータの注入
- $changedビットマスク — パラメータの変化を追跡する
- コンポーザブル関数本体の変換
- Durable Function Keys
- 全体像 — 1つのコンポーザブルをすべてのパスでたどる
- フィーチャーフラグとコンパイラ最適化
- Composeコンパイラレポートの読み方
- 安定性設定 — 外部の型に対する推論の制御
- Composition Tracingによる再コンポジションのデバッグ
- Live Literals — コンパイラがリテラルのホットスワップを可能にするしくみ
- 第1章のまとめ
第2章:Compose Runtime
- rememberとキャッシュ
- 状態管理 — mutableStateOfと状態レコードシステム
- 派生状態 — 依存関係を追跡する遅延計算
- エフェクト — 宣言的な世界における副作用
- CompositionLocal — ツリーを通じた暗黙的なデータ受け渡し
- Composer — コンポジションの統括
- SlotTable — UI状態のためのギャップバッファ
- グループ — コンポジションの構成要素
- スナップショットシステム — MVCCによる分離
- Recomposer — 再コンポジションのスケジューリングと実行
- Applier — ランタイムとツリーの橋渡し
- MovableContent — ツリー移動をまたぐ状態の保持
- 状態とFlowの橋渡し — snapshotFlow・collectAsState・produceState
- よくある状態の落とし穴 — ランタイムが思いどおりに動作しない理由
- 再コンポジションスコープ — 実際に再実行されるもの
- スナップショットを使ったテスト — テストにおける時間と状態の制御
- 第2章のまとめ
第3章:Compose UI
- Modifierの順序が重要な理由
- LayoutNode — UIツリーの中心要素
- Modifierシステム — ModifierからModifier.Nodeへ
- コーディネーターチェーン — 測定とレイアウトの委譲
- 測定・レイアウトパイプライン
- レンダリングパイプライン — 描画コールからピクセルへ
- 入力とジェスチャー処理 — タッチからコンポーザブルへ
- フォーカス管理 — キーボードナビゲーションとフォーカス移動
- セマンティクスとアクセシビリティ — Composeをアクセシブルにする
- ルックアヘッドシステム — アニメーションのための予測測定
- SubcomposeLayout — 測定中の動的コンポジション
- Android統合 — AndroidComposeViewとプラットフォームの橋渡し
- Layoutコンポーザブルによるカスタムレイアウトの構築
- カスタムModifier.Node実装の作成
- 共有要素トランジション — LookaheadScopeからSharedTransitionScopeへ
- 共有要素API — 小さな表面の下にある大きなメカニズム
- ネストスクロール — スクロールイベントがModifierチェーンを流れるしくみ
- 遅延レイアウト — LazyColumnがSubcomposeLayoutの上に成り立つしくみ
- 自分だけのCompose UIを作る — ランタイムは同じ、ツリーは自分のもの
- 第3章のまとめ
第4章:パフォーマンス
- 3つのレンダリングフェーズ — パフォーマンスコストはどこにあるのか
- 安定性推論 — 12フェーズのアルゴリズム
- スキップ判定 — 安定性から実行へ
- 安定性のパターン — スキップしやすい型を設計する
- 状態の読み取り — 読む場所が再コンポーズされる範囲を決める
- ラムダと再コンポジション — イベントハンドラーが再構築を引き起こすとき
- パフォーマンスの測定 — コンパイラレポートからCI検証まで
- アンチパターン — うっかりComposeを遅くする6つの方法
- 高度なテクニック — 安定性だけでは足りないとき
- ケーススタディ — チャットメッセージリストの最適化
- 第4章のまとめ