android-data-layer について
Repositoryを軸にしたAndroidのオフライン優先データ層を解説するスキルです。開発者がRoomのローカル保存、Retrofitのデータ取得、バックグラウンド同期を組み合わせる際に役立ちます。
主な機能
- 01Repositoryを単一の情報源にする設計
- 02Roomの永続化と監視可能なFlow
- 03Retrofitによるネットワーク取得
- 04キャッシュを先に返して再取得
- 05WorkManagerによるOutbox同期
- 06HiltでのRepositoryバインド
活用シーン
- 01オフライン優先データ層の設計
- 02更新中のキャッシュデータ提供
- 03ローカル変更の同期キューイング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ new-silvermoon/ awesome-android-agent-skills --skill android-data-layerインストール後、Claude Code で/android-data-layerを入力して読み込まれたか確認します。
詳細
Android データレイヤーとオフラインファースト
手順
データレイヤーは複数のソースからのデータを調整します。
1. リポジトリパターン
- 役割:信頼できる唯一の情報源(SSOT)です。
- ロジック:リポジトリは、キャッシュデータを返すか、新しいデータを取得するかを判断します。
- 実装:
class NewsRepository @Inject constructor( private val newsDao: NewsDao, private val newsApi: NewsApi ) { // ローカル DB のデータを信頼できる唯一の情報源として公開します val newsStream: Flow<List<News>> = newsDao.getAllNews() // 同期処理 suspend fun refreshNews() { val remoteNews = newsApi.fetchLatest() newsDao.insertAll(remoteNews) } }
2. ローカル永続化(Room)
- 用途:プライマリーキャッシュとオフラインストレージです。
- エンティティ:
@Entityデータクラスを定義します。 - DAO:監視可能なデータを返すには、
Flow<T>を使用します。
3. リモートデータ(Retrofit)
- 用途:バックエンドからデータを取得します。
- レスポンス:インターフェースでは
suspend関数を使用します。 - エラー処理:ネットワーク呼び出しを
try-catchブロックまたはResultラッパーで囲み、例外(インターネット接続なし、404 など)を適切に処理します。
4. 同期
- 読み取り:「Stale-While-Revalidate」。ローカルデータをすぐに表示し、バックグラウンドで更新を開始します。
- 書き込み:「Outbox パターン」(高度な手法)。ローカルの変更をすぐに保存して「未同期」とマークし、
WorkManagerを使用してサーバーに変更を送信します。
5. 依存性注入
- Hilt モジュールでリポジトリのインターフェースと実装をバインドします。
@Binds abstract fun bindNewsRepository(impl: OfflineFirstNewsRepository): NewsRepository
コメント
Markdown 対応