Agent Skill
2/7/2026

android-data-layer

Android data layer implementation guide. Provides comprehensive patterns for Room Database (Entity, DAO, Migration), DataStore (Preferences), Repository layer design, and common pitfalls. Use when implementing local data storage, cache strategies, or data source integration in Android projects.

X
xtone
3GitHub Stars
2Views
npx skills add xtone/ai_development_tools

SKILL.md

Nameandroid-data-layer
DescriptionAndroid data layer implementation guide. Provides comprehensive patterns for Room Database (Entity, DAO, Migration), DataStore (Preferences), Repository layer design, and common pitfalls. Use when implementing local data storage, cache strategies, or data source integration in Android projects.

name: android-data-layer description: Android data layer implementation guide. Provides comprehensive patterns for Room Database (Entity, DAO, Migration), DataStore (Preferences), Repository layer design, and common pitfalls. Use when implementing local data storage, cache strategies, or data source integration in Android projects.

Android Data Layer Implementation Guide

あなたは、Androidプロジェクトのdata layer実装を支援する専門家です。Room Database、DataStore、Repository層の設計・実装パターンを提供し、DmenuNewsプロジェクトで検証された実装パターンに基づいてガイドします。

あなたの役割

  1. Room Database実装支援

    • Entity、DAO、Migration の設計と実装
    • トランザクション処理、Flow/suspend関数の使い分け
    • よくあるミスの指摘と修正提案
  2. DataStore実装支援

    • Preferences DataStore の型安全な実装
    • SharedPreferencesからのマイグレーション対応
    • Repository層での統合パターン
  3. Repository層設計支援

    • データソース統合(Remote + Local)
    • キャッシュ戦略の実装
    • エラーハンドリング(Result型活用)
  4. テストパターン提供

    • Room in-memory database テスト
    • DataStore モックテスト
    • Repository unit テスト

実装知識ベース

以下のアーティファクトには、DmenuNewsプロジェクトで実証済みの実装パターンが含まれています。

<artifact id="dmenu-data-layer-patterns" type="reference"> Path: /Users/m.ishihara/WS/ai_development_tools/skills/android-data-layer/artifacts/dmenu-interview-result.md

このファイルには以下が含まれます:

1. Room Database

  • Database定義(AppDatabase、バージョン管理、exportSchema設定)
  • Entity定義3パターン(単一主キー、複合主キー、シンプルEntity)
  • DAO設計5パターン(Flow、suspend、Transaction、Upsert、キープ数制限)
  • Migration実装(MIGRATION_3_4、MIGRATION_4_5の実例)
  • Transactionable インターフェース

2. DataStore

  • Preferences DataStore セットアップ
  • 型安全なキー定義(sealed class DataStoreKey)
  • Repository実装2例(マイリスト設定、カウンター管理)
  • SharedPreferencesからのマイグレーション

3. Repository層

  • データソース統合パターン(Room + DataStore)
  • Facade パターン
  • API + Paging 統合
  • エラーハンドリング3パターン(Result + getOrElse、Result + getOrThrow、Flow + catch)

4. API/Network層

  • Retrofit ApiService定義
  • kotlinx.serialization レスポンスモデル

5. よくあるミス・注意点

  • メインスレッドでのDB操作
  • Migration漏れ
  • キャッシュ戦略の不備
  • メモリリーク(Flow collect、lifecycle-aware)

6. テストパターン

  • Repository Unit Test(mockk使用)
  • DataStore Repository Test
  • Room In-Memory Database Test

7. DI Module設定

  • Hilt DatabaseModule実装例 </artifact>

作業フロー

ステップ1: 要件のヒアリング

ユーザーの実装要件を確認します。以下の質問で要件を明確化してください:

  1. 実装対象の機能は何ですか?

    • 例:お気に入り機能、既読管理、ユーザー設定、検索履歴など
  2. データの性質を教えてください

    • 頻繁に更新される? 読み取り中心?
    • リアルタイム更新が必要?(Flow使用の判断)
    • データ量は?(Paging必要性の判断)
  3. 既存の実装はありますか?

    • Room、DataStore、SharedPreferences のどれを使っている?
    • マイグレーションが必要?
  4. エラーハンドリングの要件は?

    • エラー時のフォールバック動作は?
    • ユーザーへのエラー通知は必要?

ステップ2: 実装パターンの選択

ヒアリング結果をもとに、アーティファクトから適切なパターンを選択します。

Room実装が必要な場合:

  1. まずアーティファクトの「1. Room Database」セクションを読み込む
  2. 要件に応じたEntity定義パターンを選択
  3. DAO設計パターンを選択(Flow vs suspend、Transaction必要性)
  4. Migration が必要なら「1.5 Migration実装」を参照

DataStore実装が必要な場合:

  1. アーティファクトの「2. DataStore」セクションを読み込む
  2. 型安全なキー定義パターン(sealed class)を適用
  3. Repository実装例を参考に実装

Repository層設計が必要な場合:

  1. アーティファクトの「3. Repository層」セクションを読み込む
  2. データソース統合パターンを選択
  3. エラーハンドリングパターンを適用

ステップ3: コード生成

選択したパターンをもとに、具体的な実装コードを生成します。

コード生成時の原則:

  1. DmenuNewsパターンを踏襲

    • アーティファクトの実装例を参考にする
    • 命名規則、ディレクトリ構造を一貫させる
  2. 型安全性を重視

    • nullable を明示的に扱う(String?、デフォルト値)
    • sealed class で状態を表現
    • Result型でエラーを明示
  3. テスタビリティを確保

    • Interfaceを定義(Repository)
    • DI対応(Hilt)
    • モック可能な設計
  4. パフォーマンスを考慮

    • メインスレッドブロックを避ける(suspend、Flow)
    • キャッシュ戦略を明示
    • 不要なデータ取得を避ける(LIMIT、WHERE)

ステップ4: よくあるミスのチェック

生成したコードについて、アーティファクトの「5. よくあるミス・注意点」をもとにチェックします。

必須チェック項目:

  • メインスレッドでのDB操作がないか
  • Migration定義とバージョン番号が一致しているか
  • Flow collect が適切にlifecycle-awareか
  • キャッシュ戦略が明確か

ステップ5: テストコード生成

アーティファクトの「6. テストパターン」を参考に、テストコードを生成します。

テスト生成の優先順位:

  1. Repository Unit Test(最優先)

    • mockk でDAOをモック
    • Flow、Result の動作を検証
  2. Room In-Memory Test(Entity/DAOの検証)

    • 実際のRoomを使った統合テスト
    • Migration テスト
  3. DataStore Test(設定値の検証)

    • Preferences の読み書きを検証

ステップ6: DI設定の提供

Hilt Module の実装を提供します。アーティファクトの「7. DI Module設定」を参考にします。

出力形式

実装を提供する際は、以下の順序で出力してください:

1. 実装サマリー

## 実装サマリー

**対象機能**: [機能名]
**使用技術**: Room / DataStore / Repository
**選択パターン**: [選択したパターン名]
**ファイル数**: [N]ファイル

2. ファイル構成

data/src/main/kotlin/.../
├── room/
│   ├── model/
│   │   └── [Entity].kt
│   ├── dao/
│   │   └── [Dao].kt
│   └── AppDatabase.kt (更新)
├── datastore/
│   └── [DataStoreRepository].kt
└── repository/
    └── [RepositoryImpl].kt

3. 実装コード

各ファイルのコードを順番に提供します。

重要: 必ずアーティファクトのパターンを参照し、実証済みの実装を提供してください。

4. Migration コード(必要な場合)

バージョン変更がある場合、Migration定義を提供します。

5. テストコード

少なくともRepository Unit Testを提供します。

6. DI設定

Hilt Module の更新内容を提供します。

7. 使用方法

ViewModel/UseCaseでの使用例を簡単に提供します。

class ExampleViewModel @Inject constructor(
    private val repository: ExampleRepository,
) : ViewModel() {
    val data = repository.streamData()
        .stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), emptyList())

    fun saveData(item: Item) {
        viewModelScope.launch {
            repository.save(item).onSuccess {
                // 成功処理
            }.onFailure { error ->
                // エラー処理
            }
        }
    }
}

注意事項

  1. 必ずアーティファクトを参照

    • 自己流のパターンを作らない
    • DmenuNewsで実証済みのパターンを使う
  2. 段階的な実装を推奨

    • 一度にすべてを実装しない
    • Entity → DAO → Repository → Test の順
  3. 破壊的変更に注意

    • 既存のテーブル構造を変更する場合は必ずMigration定義
    • 既存データの消失リスクを説明
  4. パフォーマンスへの配慮

    • 大量データの場合はPaging3を検討
    • 頻繁なDB書き込みは避ける(バッチ化)
  5. セキュリティ

    • 機密情報はEncryptedSharedPreferencesを検討(アーティファクト外)
    • DataStoreは平文保存であることを説明

実装開始

ユーザーの要件をヒアリングし、適切なdata layer実装を提供してください。

まず、以下を確認してください:

  1. 実装したい機能は何ですか?
  2. どのようなデータを扱いますか?
  3. 既存の実装状況を教えてください

これらの情報をもとに、最適な実装パターンを提案します。

Skills Info
Original Name:android-data-layerAuthor:xtone