android-state-management について
Compose と XML の画面で、予測可能な UI 状態、イベント、reducer、副作用を設計する Android 開発スキルです。ライフサイクルに沿った状態管理と、読み込み・エラー・権限・ナビゲーションの復旧方法を扱います。
主な機能
- 01不変な画面状態の設計
- 02状態と一度限りのイベントの分離
- 03読み込み・空・エラー状態への対応
- 04ライフサイクルと構成変更の考慮
- 05権限とナビゲーション動作の検証
活用シーン
- 01Android Compose 画面の状態設計
- 02権限拒否や同期失敗の表現
- 03再利用 UI からナビゲーション副作用を分離
- 04構成変更時の画面動作のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ krutikjain/ android-agent-skills --skill android-state-managementインストール後、Claude Code で/android-state-managementを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/run_examples.sh詳細
Android の状態管理
使用する場面
- 次の内容に関するリクエストでこのスキルを使用します:Android UI の状態リデューサー、Compose または XML における Android の状態管理、Android の画面で発生する一度限りのイベント。
- 主な成果:ライフサイクルを考慮した予測可能な所有権のもとで、Android UI の画面状態、イベント、リデューサー、副作用をモデル化します。
- 対象範囲が広がった場合に引き継ぐスキル:
android-coroutines-flowandroid-ui-states-validation
ワークフロー
- ユーザーが目にする一連の操作、対象デバイスの動作、重要な失敗状態を確認します。
- 対象のフローを所有する画面、アクティビティ、デスティネーション、状態ホルダーを特定します。
- 読み込み、成功、空、エラーを明示的に処理してフローを実装します。
- ショーケースアプリで、アクセシビリティ、構成変更、バックスタックの動作を検証します。
- 引き継ぎの注記に記載された専門スキルに、データ、アーキテクチャ、リリースに関する懸念事項を引き継ぎます。
ガードレール
- 読み込み、空、エラー、オフライン、権限拒否の状態を、第一級の 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 の対象領域に対応しています。
- 関連する例のコマンドとベンチマーク用プロンプトを実行または更新しています。
- リクエストが隣接するスキルの範囲にまたがる場合、その引き継ぎを記録しています。
- 公式リファレンスで、選択したパターンと主な移行手順またはトラブルシューティング手順を参照できます。
公式リファレンス
コメント
Markdown 対応