mcpField
F
firebase-data-connect

firebase-data-connect

github.com/evancaデータ・データベース667163 回インストール2 日前に更新
リポジトリ

firebase-data-connect について

Flutter アプリで Firebase Data Connect を使うためのガイドです。設定、データ設計、型付き SDK の呼び出し、エラーやセキュリティへの対応を扱います。

主な機能

  1. 01Flutter での Data Connect 設定
  2. 02スキーマ、クエリ、ミューテーションの設計
  3. 03型付き Dart SDK の生成
  4. 04クエリ更新のリアルタイム購読
  5. 05エラー、キャッシュ、セキュリティへの対応

活用シーン

  1. 01Flutter プロジェクトへの Data Connect 導入
  2. 02アプリデータのクエリとミューテーションの設計
  3. 03オフライン利用やネットワーク障害への対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/evanca/flutter-ai-rules --skill firebase-data-connect

インストール後、Claude Code で/firebase-data-connectを入力して読み込まれたか確認します。

詳細

Firebase Data Connect スキル

このスキルでは、Flutter アプリケーションで Firebase Data Connect を正しく使用する方法を説明します。

使用する場面

次のような場合にこのスキルを使用します。

  • Flutter プロジェクトで Firebase Data Connect を設定、構成する。
  • Data Connect のスキーマ、クエリ、ミューテーションを設計する。
  • 型付きクエリやミューテーション用の生成 SDK 呼び出しを実装する。
  • ネットワーク障害、データの不整合、オフラインの状況に対処する。
  • セキュリティとパフォーマンスに関するベストプラクティスを適用する。

1. セットアップと構成

ステップ 1:パッケージをインストールする
flutter pub add firebase_data_connect
ステップ 2:インポートして初期化する
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);
ステップ 3:dataconnect/schema/schema.gql でスキーマを定義する
type Movie @table {
  id: UUID! @default(expr: "uuidV4()")
  title: String!
  releaseYear: Int
  genre: String
  rating: Float
  description: String
}
ステップ 4:dataconnect/connector/queries.gql でクエリとミューテーションを定義する
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    releaseYear
    genre
    rating
  }
}

mutation CreateMovie($title: String!, $releaseYear: Int, $genre: String) @auth(level: USER) {
  movie_insert(data: {
    title: $title
    releaseYear: $releaseYear
    genre: $genre
  })
}

mutation DeleteMovie($id: UUID!) @auth(level: USER) {
  movie_delete(id: $id)
}
ステップ 5:型付き Flutter SDK を生成する
flutterfire generate

各クエリとミューテーションに対応する、型付きの Dart クラスが生成されます。

プラットフォームのサポート状況:

プラットフォームサポート状況
iOS完全対応
Android完全対応
Web完全対応
その他のプラットフォーム非対応

2. クエリとミューテーションの実行

生成された SDK を使用して、型付きクエリとミューテーションを実行します。

// Execute a query
final result = await ListMoviesQuery().execute();
final movies = result.data.movies;

// Execute a mutation
await CreateMovieMutation(title: 'Inception', releaseYear: 2010, genre: 'Sci-Fi')
    .execute();

// Delete by ID
await DeleteMovieMutation(id: movieId).execute();
リアルタイムリスナー

クエリの変更を購読して、ライブ更新を受け取ります。

final subscription = ListMoviesQuery().subscribe();
subscription.listen((result) {
  final movies = result.data.movies;
  // Update UI with latest movie list
});

3. パフォーマンスとキャッシュ

  • データ転送量を最小限に抑えるため、必要なフィールドだけを取得する効率的なクエリを設計します。
  • 大規模なデータセットにはページネーションを実装します。
    query ListMoviesPaginated($limit: Int!, $offset: Int!) @auth(level: PUBLIC) {
      movies(limit: $limit, offset: $offset) {
        id
        title
        releaseYear
      }
    }
    
  • 不要なネットワーク使用を避けるため、リアルタイムリスナーは適切に使用します。
  • アプリの重要な機能については、クエリ結果をローカルにキャッシュして、オフライン機能を検討します。

4. エラー処理

Data Connect の呼び出しを try/catch で囲み、ネットワークエラーや検証エラーに対処します。

try {
  final result = await ListMoviesQuery().execute();
  return result.data.movies;
} on FirebaseException catch (e) {
  if (e.code == 'unavailable') {
    // Handle offline — return cached data
    return _localCache.getMovies();
  }
  rethrow;
}
  • 一時的な接続エラーには、指数バックオフを用いた再試行ロジックを実装します。
  • データ検証エラーには、わかりやすいエラーメッセージを表示します。
  • エラー発生率を監視し、繰り返し発生する問題を調査します。

5. セキュリティ

  • スキーマで @auth ディレクティブを使用して、アクセスレベル(PUBLIC、USER、NO_ACCESS)を制御します。
  • ユーザー単位のアクセス制御にはFirebase Authenticationを統合します。
  • クライアント側とサーバー側の両方でデータを検証します。
  • ユーザー情報を扱う際は、データプライバシーに関するベストプラクティスに従います。

参考資料

コメント