flutter-isar について
Flutter アプリで Isar を構造化データのローカル保存に使うためのガイドです。スキーマ設計、リポジトリ分離、マイグレーション、リアクティブクエリ、オフライン優先のデータフローを扱います。
主な機能
- 01Isar コレクションとインデックスの設計
- 02リポジトリによるローカルデータアクセスのラップ
- 03スキーマ移行の指針
- 04オフライン優先の読み書きパターン
- 05リアクティブなクエリストリーム
- 06機密データの保存に関する指針
活用シーン
- 01構造化されたアプリデータのローカル保存
- 02更新中のキャッシュデータ表示
- 03ローカル書き込みの非同期同期
- 04データベース変更の UI へのストリーミング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill flutter-isarインストール後、Claude Code で/flutter-isarを入力して読み込まれたか確認します。
詳細
Isar データベース
- 構造化データの永続化には、主要なローカルデータベースとして Isar を使用します
Idフィールドを伴う@collectionアノテーションを使用してコレクションを定義します- コレクション定義は、該当する機能の
data/local/ディレクトリに配置します - コレクションを変更した後は、
dart run build_runner build --delete-conflicting-outputsを実行します
スキーマ設計
- コレクションは焦点を絞ります: ドメインエンティティごとに 1 つのコレクションとします
- 頻繁にクエリされるフィールドには
@Indexアノテーションを使用します - enum フィールドには
@enumeratedを使用します - コレクション間のリレーションシップには
LinksとBacklinksを使用します - 派生値や計算値は決して保存しません: それらはドメイン層で計算します
マイグレーション
- Isar は追加的なスキーマ変更 (新しいフィールド、新しいコレクション) を自動的に処理します
- 破壊的変更 (フィールドの名前変更、フィールドの削除) については、リポジトリにマイグレーションロジックを記述します
- データベーススキーマをバージョン管理し、アプリ起動時にバージョンを確認します
ローカルデータ向けのリポジトリパターン
- ローカル DataSource は、すべての Isar の
put、get、delete、watch呼び出しをラップします - リポジトリは、リモートとローカルの DataSource 間を調整します
- リポジトリは、ユースケースごとにキャッシュファースト戦略かネットワークファースト戦略かを決定します
オフラインファーストのパターン
- キャッシュファースト: まず Isar から読み取り、バックグラウンドでネットワークから取得し、成功したら Isar を更新します
- ネットワークファースト: ネットワークから取得し、失敗した場合は Isar にフォールバックします
- ライトビハインド: すぐに Isar に書き込み、サーバーへは非同期で同期します (保留中の変更をキューに格納します)
- バックグラウンドで更新している間も、常にキャッシュされたデータをすぐに表示します
リアクティブクエリ
- Isar の
watchLazy()またはwatch()を使用して、BLoC 経由で変更を UI にストリーム配信します - Isar の watch ストリームをリポジトリでラップし、
Stream<List<DomainModel>>として公開します - BLoC の
close()メソッドでストリームのサブスクリプションを適切に破棄します
セキュアストレージ
- 機密性の高いキーと値のデータ (トークン、暗号化キー) には
flutter_secure_storageを使用します SharedPreferencesは、機密性の高くないユーザー設定 (テーマ、ロケール、オンボーディングフラグ) にのみ使用します- パスワード、トークン、シークレットを
SharedPreferencesや平文の Isar に決して保存しません
コメント
Markdown 対応