mcpField
A
android-state-management

android-state-management

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

android-state-management について

Compose と XML の画面で、予測可能な UI 状態、イベント、reducer、副作用を設計する Android 開発スキルです。ライフサイクルに沿った状態管理と、読み込み・エラー・権限・ナビゲーションの復旧方法を扱います。

主な機能

  1. 01不変な画面状態の設計
  2. 02状態と一度限りのイベントの分離
  3. 03読み込み・空・エラー状態への対応
  4. 04ライフサイクルと構成変更の考慮
  5. 05権限とナビゲーション動作の検証

活用シーン

  1. 01Android Compose 画面の状態設計
  2. 02権限拒否や同期失敗の表現
  3. 03再利用 UI からナビゲーション副作用を分離
  4. 04構成変更時の画面動作のテスト

インストール

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

$npx skills add https://github.com/krutikjain/android-agent-skills --skill android-state-management

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

同梱ファイル

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

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

詳細

Android の状態管理

使用する場面

  • 次の内容に関するリクエストでこのスキルを使用します:Android UI の状態リデューサー、Compose または XML における Android の状態管理、Android の画面で発生する一度限りのイベント。
  • 主な成果:ライフサイクルを考慮した予測可能な所有権のもとで、Android UI の画面状態、イベント、リデューサー、副作用をモデル化します。
  • 対象範囲が広がった場合に引き継ぐスキル:
  • android-coroutines-flow
  • android-ui-states-validation

ワークフロー

  1. ユーザーが目にする一連の操作、対象デバイスの動作、重要な失敗状態を確認します。
  2. 対象のフローを所有する画面、アクティビティ、デスティネーション、状態ホルダーを特定します。
  3. 読み込み、成功、空、エラーを明示的に処理してフローを実装します。
  4. ショーケースアプリで、アクセシビリティ、構成変更、バックスタックの動作を検証します。
  5. 引き継ぎの注記に記載された専門スキルに、データ、アーキテクチャ、リリースに関する懸念事項を引き継ぎます。

ガードレール

  • 読み込み、空、エラー、オフライン、権限拒否の状態を、第一級の UI 状態として扱います。
  • 再利用可能な UI コンポーネントに、ナビゲーションや権限に関する副作用を隠さないでください。
  • 手動のコールバックチェーンより、ライフサイクルを考慮した API を優先します。
  • ディープリンク、インテント、権限プロンプトはテスト可能かつ観測可能な状態に保ちます。

アンチパターン

  • プロダクトのフローでは正常系だけで十分だと考えること。
  • リクエストコードやルート文字列を複数箇所にハードコードすること。
  • リポジトリやネットワーク層から直接ナビゲーションを実行すること。
  • 権限拒否や状態の破損から回復する UI なしでフローをリリースすること。

修正例

不変の UI 状態を単一の窓口にまとめる
data class TaskBoardState(
    val tasks: List<TaskUiModel> = emptyList(),
    val isLoading: Boolean = false,
    val errorMessage: String? = null,
)
永続状態と一度限りのイベントを分離する
private val _uiState = MutableStateFlow(TaskBoardState())
val uiState: StateFlow<TaskBoardState> = _uiState.asStateFlow()

private val _events = MutableSharedFlow<TaskBoardEvent>(replay = 0)
val events: SharedFlow<TaskBoardEvent> = _events
UI を直接変更せず、状態更新を集約する
_uiState.update { state ->
    state.copy(isLoading = false, tasks = refreshedTasks, errorMessage = null)
}

例

正常系
  • シナリオ:単一の不変な画面状態から Compose のタスクボードを動作させます。
  • コマンド:cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
エッジケース
  • シナリオ:XML フィクスチャで、権限拒否と同期失敗の状態を明示的に表現します。
  • コマンド:cd examples/orbittasks-xml && ./gradlew :app:testDebugUnitTest
失敗からの回復
  • シナリオ:状態リクエストをコルーチン、ナビゲーション、UI 検証プロンプトから分離します。
  • コマンド:python3 scripts/eval_triggers.py --skill android-state-management

完了チェックリスト

  • 実装手順が明確かつ最小限で、適切な Android の対象領域に対応しています。
  • 関連する例のコマンドとベンチマーク用プロンプトを実行または更新しています。
  • リクエストが隣接するスキルの範囲にまたがる場合、その引き継ぎを記録しています。
  • 公式リファレンスで、選択したパターンと主な移行手順またはトラブルシューティング手順を参照できます。

公式リファレンス

コメント