mcpField
A
android-compose-performance

android-compose-performance

github.com/krutikjain開発1479 回インストール31 週間前に更新
リポジトリ

android-compose-performance について

Android アプリの Jetpack Compose のパフォーマンスを診断・改善するスキルです。プロファイリングや UI の選択を導き、安定した状態、アクセシビリティ、計測に基づく改善を重視します。

主な機能

  1. 01Compose、View、混在 UI の識別
  2. 02再コンポーズ、レイアウト、スクロールの改善
  3. 03安定した状態と明示的な副作用
  4. 04長文、フォント拡大、RTL、狭い画面の確認
  5. 05ユニット、UI、スクリーンショット向けチェックで検証

活用シーン

  1. 01Compose リストで不要な再コンポーズを調査
  2. 02状態変化が続く際のスクロールを評価
  3. 03長文や狭い画面での UI 動作を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/krutikjain/android-agent-skills --skill android-compose-performance

インストール後、Claude Code で/android-compose-performanceを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
official-links.md
patterns.md
scenarios.md
scripts/
run_examples.sh

詳細

Android Compose のパフォーマンス

使用する場面

  • 次のようなリクエストの場合に、このスキルを使用します:Compose のパフォーマンス問題、Android での過剰な再コンポジション、Compose の LazyColumn の遅さ。
  • 主な成果:Android アプリで、Compose の再コンポジション、レイアウト、スクロール、起動、レンダリングのパフォーマンスをプロファイルして改善します。
  • 対象範囲が広がった場合は、次のスキルに引き継ぎます:
  • android-performance-observability
  • android-testing-ui

ワークフロー

  1. 対象となる画面が Compose、View システム、または相互運用を組み合わせた画面のどれに該当するかを特定します。
  2. 応答性、アクセシビリティ、パフォーマンスの要件を満たす、最も手間の少ない UI パターンを選択します。
  3. 安定した状態、明示的な副作用、再利用可能なデザイントークンを軸に UI を構築します。
  4. フィクスチャアプリで、長いテキスト、フォントの拡大、RTL、画面幅の狭いデバイスなどのエッジケースを検証します。
  5. 引き継ぐ前に、単体テスト、UI テスト、スクリーンショットで確認しやすいチェックで検証します。

ガードレール

  • アニメーションや抽象化を追加する前に、安定した状態と予測可能なレンダリングを優先します。
  • アクセシビリティのセマンティクス、コントラスト、フォーカス順序、タッチターゲットのガイダンスを、デフォルトで尊重します。
  • 明示的な相互運用の境界がない限り、Compose と View システムの管理を混在させないでください。
  • 性急なマイクロ最適化ではなく、計測に基づくパフォーマンス改善を優先します。

アンチパターン

  • ナビゲーションやビジネスロジックをリーフ UI コンポーネントに直接埋め込む。
  • ローカライズや動的なテキストで崩れる固定サイズを使用する。
  • セマンティクスを無視し、視覚的な変化だけを通知する。
  • メンタルモデルに合わせて調整せずに、XML のパターンをそのまま Compose に移植する。

修正例

リストのアイデンティティを安定させる
LazyColumn {
    items(tasks, key = { it.id }) { task ->
        TaskRow(task)
    }
}
重い処理をコンポジションの外に移動する
@Composable
fun TaskBoard(tasks: List<TaskUiModel>) {
    val visibleTasks = remember(tasks) { tasks.sortedBy { it.title } }
    LazyColumn { items(visibleTasks, key = { it.title }) { TaskRow(it) } }
}
スクロールに起因する広範な再コンポジションを避ける
Box(
    modifier = Modifier.offset {
        IntOffset(0, scrollState.value)
    }
)

例

想定どおりのケース
  • シナリオ:Compose のタスクリストをプロファイルし、不必要な再コンポジションのホットスポットを特定します。
  • コマンド:cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
エッジケース
  • シナリオ:状態を繰り返し変更しながら、長いリスト、フィルターチップ、スナックバーの頻繁な更新を評価します。
  • コマンド:cd examples/orbittasks-compose && ./gradlew :app:assembleDebug
失敗からの復旧
  • シナリオ:パフォーマンスに関するリクエストを、一般的な Compose や可観測性に関するプロンプトと切り分けます。
  • コマンド:python3 scripts/eval_triggers.py --skill android-compose-performance

完了チェックリスト

  • 実装方針が明確かつ最小限で、適切な Android の画面に対応しています。
  • 関連するサンプルコマンドとベンチマーク用プロンプトを実行するか、更新しています。
  • リクエストが境界をまたぐ場合、関連スキルへの引き継ぎを記載しています。
  • 公式リファレンスで、選択したパターンと主な移行方法またはトラブルシューティングの手順をカバーしています。

公式リファレンス

コメント