android-room-database について
Android Room データベース向けのスキルで、エンティティ、DAO、トランザクション、マイグレーション、ローカル永続化のテストを扱います。データベース設計や安全なスキーマ変更を行う Android 開発者向けです。
主な機能
- 01エンティティ、キー、索引、リレーションの設計
- 02DAO クエリとトランザクション境界の計画
- 03スキーマのエクスポートとマイグレーション管理
- 04クエリとマイグレーションのテスト
- 05永続化モデルとドメインモデルの分離
活用シーン
- 01アプリのローカルデータモデル設計
- 02エンティティ変更時の移行計画
- 03旧スキーマからのマイグレーション検証
- 04DAO クエリとトランザクション動作のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ krutikjain/ android-agent-skills --skill android-room-databaseインストール後、Claude Code で/android-room-databaseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/run_examples.sh詳細
Android Room データベース
使用するタイミング
- リクエストが Room データベース、Android の DAO クエリとマイグレーション、Room スキーマのエクスポートに関する場合に、このスキルを使用します。
- 主な成果:Room のエンティティ、DAO、トランザクション、マイグレーション、スキーマのエクスポート、およびテストに適したローカル永続化をモデル化します。
- 難しい点がスキーマ設計、DAO クエリ、トランザクション、マイグレーション、または Room のテストである場合に、このスキルを使用します。主な作業がデータベースの契約自体ではなくリアクティブ API のマイグレーションである場合に限り、
android-rxjava-to-coroutines-migrationに引き継ぎます。 - 対象範囲が広がった場合は、次のスキルに引き継ぎます。
android-local-persistence-datastoreandroid-testing-unit
ワークフロー
- 永続化の契約から着手します。エンティティ、キー、インデックス、リレーション、およびデータが信頼できる唯一の情報源、キャッシュ、オフラインファーストの状態のどれにあたるかを確認します。
- トランザクションの境界、クエリの形式、ページング、無効化の動作を含め、DAO のアクセスパターンを明示的にモデル化します。
- エンティティを変更する前に、エクスポートするスキーマ、マイグレーションの手順、自動マイグレーションの適用可否、破壊的フォールバックの方針など、スキーマの進化を計画します。
- Room のアノテーションだけで十分と決めつけず、再現性のあるテストでマイグレーションとクエリの動作を検証します。
- Room の境界が正しくなった後に限り、DataStore、同期、リアクティブ API に関する質問を引き継ぎます。
ガードレール
- スキーマをエクスポートし、任意のツール出力ではなく契約の一部として扱います。
- エンティティは永続化に専念させます。テーブルの構造を上位レイヤーに漏らさず、ドメインモデルや UI モデルにマッピングします。
- 一貫性を保つ必要がある複数ステップの書き込みには、明示的なトランザクションを使用します。
- リリースビルドで信頼する前に、実際の古いスキーマに対してマイグレーションをテストします。
アンチパターン
- Room エンティティをアプリ全体でドメインモデルとして扱うこと。
- スキーマをエクスポートしたり、マイグレーションパスを検証したりせずに編集すること。
- 画面で必要なのが限定的なプロジェクションだけなのに、広範な
SELECT *クエリを書くこと。 - データベース、同期、リアクティブストリームのマイグレーション問題を、区別のない一つのタスクにまとめること。
レビューの重点項目
- エンティティのキー、インデックス、リレーション、スキーマの所有権。
- DAO クエリの形式、トランザクション、無効化の動作。
- マイグレーションの安全性、スキーマのエクスポート、テストカバレッジ。
- Room のモデルと上位レイヤーのアプリモデルの明確な境界。
例
正常系
- シナリオ:スキーマを考慮したエンティティで、タスク項目とリマインダーフラグを永続化します。
- コマンド:
cd examples/orbittasks-compose && ./gradlew :app:testDebugUnitTest
エッジケース
- シナリオ:明示的なマイグレーションパスを用いて、スキーマ変更の失敗から復旧します。
- コマンド:
python3 scripts/eval_triggers.py --skill android-room-database
障害からの復旧
- シナリオ:Room のリクエストを DataStore、ネットワーク、モダナイゼーションに関するプロンプトとは分けて扱います。
- コマンド:
cd examples/orbittasks-xml && ./gradlew :app:testDebugUnitTest
完了チェックリスト
- エンティティ、DAO、トランザクションが実際の永続化の契約に合致しています。
- スキーマのエクスポートとマイグレーション戦略が明確です。
- クエリとマイグレーションのテストで、リスクの高いパスをカバーしています。
- Room 以外の懸念事項はデータベースのタスクに混在させず、適切に引き継いでいます。
公式リファレンス
- https://developer.android.com/training/data-storage/room
- https://developer.android.com/training/data-storage/room/migrating-db-versions
- https://developer.android.com/training/data-storage/room/accessing-data
- https://developer.android.com/training/data-storage/room/prepopulate
- https://developer.android.com/topic/performance/sqlite-performance-best-practices
コメント
Markdown 対応