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

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

前提条件

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

  • NPM を含む Node.js 環境。
  • Google アカウント。

チュートリアル

チュートリアル

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

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

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

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

  • 前の手順で作成したプロジェクトを選択します。
  • Gemini でスキーマを作成しないでください(このチュートリアルでは、事前構築されたスキーマの例を使用します)。
  • 新しい Cloud SQL インスタンスを作成します。
  • React テンプレートを作成します。
npx -y firebase-tools@latest login --reauth
npx -y firebase-tools@latest 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. スキーマとオペレーションをデプロイする

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

npx -y firebase-tools@latest \
    deploy --only dataconnect

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

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

npx -y firebase-tools@latest \
    dataconnect:execute dataconnect/seed_data.gql

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

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

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

npx -y firebase-tools@latest \
    dataconnect:sdk:generate
自動生成された React SDK(抜粋)
export interface ListMoviesData {
  movies: ({
    id: UUIDString;
    title: string;
    imageUrl: string;
    genre?: string | null;
  } & Movie_Key)[];
}

export function useListMovies(
  options?: useDataConnectQueryOptions&<ListMoviesData>
): UseDataConnectQueryResult&<ListMoviesData, undefined>;

7. ウェブアプリを設定する

次のコマンドを実行して、Firebase プロジェクトに新しいウェブアプリを追加します。

npx -y firebase-tools@latest \
    apps:create web react-example
npx -y firebase-tools@latest \
    apps:sdkconfig web -o web-app/src/firebase-config.json
cd web-app ; npm i firebase ; cd ..

8. サンプル React クライアントを書く

web-app/src/App.jsx の内容を次の簡単な React アプリに置き換えます。

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

import { initializeApp } from 'firebase/app';
import firebaseConfig from './firebase-config.json';
import {
  QueryClient,
  QueryClientProvider
} from '@tanstack/react-query';

import { useListMovies } from '@dataconnect/generated/react';
import './App.css';

const app = initializeApp(firebaseConfig);
const queryClient = new QueryClient();

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <Movies />
    </QueryClientProvider>
  );
}

function Movies() {
  const { isLoading, data } = useListMovies();
  if (isLoading) {
    return <h1>...</h1>
  }
  return (
    <>
      {data?.movies.map(
        movie => <h1 key={movie.id}>{movie.title}</h1>
      )}
    </>
  );
}

export default App;

9. ウェブアプリを試す

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

npm run dev

次のステップ

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 スキーマを設計するページから始め、フォローアップ ページに進んで、オペレーションの作成方法を確認してください。