Flutter を使用して Firebase Data Connect を使ってみる

このクイックスタートでは、小さなサンプル データベースを作成してデプロイし、Flutter フロントエンドからアクセスします。

前提条件

このクイックスタートを完了するには、次のものが必要です。

  • 次のツールがインストールされた環境:
  • Google アカウント。

チュートリアル

チュートリアル

1. 新しい Firebase プロジェクトを作成

まず、Firebase コンソールで新しい Firebase プロジェクトを作成します。次に、プロジェクトを Blaze プランにアップグレードします。

2. プロジェクトの初期化

新しいディレクトリを作成し、そのディレクトリ内で Firebase プロジェクトを初期化します。プロンプトが表示されたら、次のオプションを選択します。

  • 前の手順で作成したプロジェクトを選択します。
  • Gemini でスキーマを作成しないでください(このチュートリアルでは、事前構築済みのスキーマ例を使用します)。
  • 新しい Cloud SQL インスタンスを作成します。
  • Flutter テンプレートを作成します。
mkdir myproj ; cd myproj
firebase login --reauth
firebase init dataconnect

3. GraphQL の定義例を確認する

Data Connect では、GraphQL を使用してすべてのデータベース スキーマとオペレーションを定義します。プロジェクトを初期化したときに、Firebase CLI によっていくつかのサンプル定義が作成されました。

dataconnect/schema/schema.gql(抜粋)
type Movie @table {
  title: String!
  imageUrl: String!
  genre: String
}

type MovieMetadata @table {
  movie: Movie! @unique
  rating: Float
  releaseYear: Int
  description: String
}
dataconnect/example/queries.gql(抜粋)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

4. スキーマとオペレーションをデプロイする

データベース スキーマ、クエリ、ミューテーションに変更を加えた場合は、変更をデータベースに反映させるために、それらをデプロイする必要があります。

firebase deploy --only dataconnect

5. サンプルデータでデータベースをシードする

このシードデータを使用すると、サンプルアプリをテストする際に確認できます。このステップでは、管理タスクで許可されている任意の GraphQL を実行します。

firebase dataconnect:execute dataconnect/seed_data.gql

6. Dart クライアント SDK を生成する

このコマンドは、GraphQL 定義を使用して、データベース専用の Dart ライブラリを生成します。このライブラリは、すべてのデータベース オペレーションを実行するためにクライアント アプリで使用します。

connector.yaml に定義を追加することで、Android 用の Kotlin、iOS 用の Swift、ウェブ用の JavaScript など、複数のプラットフォーム用のライブラリを生成できます。

firebase dataconnect:sdk:generate
自動生成された Dart SDK(抜粋)
class ExampleConnector {
  ListMoviesVariablesBuilder listMovies() {
    return ListMoviesVariablesBuilder(dataConnect);
  }

  // ...
}

7. Flutter アプリを設定する

次のコマンドを実行して、Firebase プロジェクトを使用するように Flutter アプリを設定します。

flutterfire コマンドのプロンプトが表示されたら、先ほど作成した Firebase プロジェクトを選択し、ターゲットにするプラットフォームを選択します。

cd flutter_app
flutter pub add firebase_core firebase_data_connect
flutterfire configure

8. サンプル Flutter クライアントを作成する

flutter_app/lib/main.dart の内容をこのシンプルな Flutter アプリに置き換えます。

アプリは、生成された SDK の関数を使用して必要なデータベース アクセスを完了します。

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/dataconnect_generated/generated.dart';
import 'package:flutter_app/firebase_options.dart';

class MyApp extends StatelessWidget {
  late final Future<QueryResult<ListMoviesData, void>>
  _movieListFuture;

  MyApp({super.key}) {
    _movieListFuture = ExampleConnector.instance
        .listMovies()
        .execute();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FutureBuilder(
        future: _movieListFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return ListView.builder(
              scrollDirection: Axis.vertical,
              itemBuilder: (context, index) => Card(
                child: Text(
                  snapshot.data?.data.movies[index].title ?? "",
                ),
              ),
              itemCount: snapshot.data?.data.movies.length ?? 0,
            );
          }
          return const CircularProgressIndicator();
        },
      ),
    );
  }
}

Future<void> main() async {
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(MyApp());
}

9. アプリを試す

開発用サーバーを起動して、サンプルアプリの動作を確認します。

flutter run

次のステップ

Visual Studio Code 拡張機能を試す

Data Connect で開発する場合は、Visual Studio Code 拡張機能を使用することを強くおすすめします。Visual Studio Code をメインの開発環境として使用していない場合でも、この拡張機能にはスキーマとオペレーションの開発をより便利にするいくつかの機能があります。

  • GraphQL 言語サーバー。Data Connect 固有の構文チェックとオートコンプリート候補を提供します。
  • コードの行に沿って表示される CodeLens ボタン。スキーマ定義ファイルからデータを読み書きしたり、オペレーション定義からクエリとミューテーションを実行したりできます。
  • 生成された SDK を GraphQL 定義と自動的に同期します。
  • ローカル エミュレータの設定を簡素化しました。
  • 本番環境へのデプロイが簡素化されます。

ローカル開発に Data Connect エミュレータを使用する

このチュートリアルでは、Data Connect スキーマとオペレーションを本番環境に直接デプロイする方法を説明しましたが、アプリを積極的に開発している間は、本番環境データベースに変更を加えたくないでしょう。代わりに、Data Connect エミュレータを設定し、本番環境ではなくエミュレータに対して開発作業を行います。エミュレータは、CloudSQL のライブ Postgres インスタンスと同様に動作するローカル PGlite インスタンスを設定します。

アプリのスキーマとオペレーションを作成する方法を学習する

Data Connect を使用してアプリを開発する場合、スキーマとオペレーションの設計は、最初に行う最も重要な開発タスクの 1 つです。

  • Firebase コンソールの Gemini は、アプリの自然言語の説明から Data Connect スキーマを生成できる AI ツールです。このツールを使用すると、特にリレーショナル データベースを初めて使用する場合に、非常に迅速に作業を開始できます。
  • または、GraphQL を使用してデータベース スキーマ、クエリ、ミューテーションを直接記述することもできます。Data Connect スキーマを設計するページから始め、後続のページに進んでオペレーションの作成方法を確認してください。