Android で Firebase SQL Connect を使ってみる

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

前提条件

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

  • 次のツールがインストールされている環境:
    • 最新バージョンの Android Studio
    • Firebase CLI。NPM がインストールされている場合は、次のコマンドを実行します。
      npm install -g firebase-tools@latest
      それ以外の場合は、インストール手順に関するドキュメントをご覧ください。
  • Google アカウント。

チュートリアル

チュートリアル

1. 新しい Android Studio プロジェクトの作成

Android Studio で、Empty Activity テンプレートを使用して新しいプロジェクトを作成します。

プロジェクトに「Quickstart App」という名前を付け、パッケージ名を「com.example.quickstartapp」にします。

Android Studio の [新しいプロジェクト] ダイアログ

2. Android Studio プロジェクトに Firebase を追加する

Firebase の依存関係と Kotlin シリアル化プラグインを build.gradle.kts ファイルに追加します。

QuickstartApp/build.gradle.kts
plugins {
  alias(libs.plugins.android.application) apply false
  alias(libs.plugins.kotlin.compose) apply false

  // Add this line.
  id("com.google.gms.google-services") version "4.4.4" apply false
}
QuickstartApp/app/build.gradle.kts
plugins {
  alias(libs.plugins.android.application)
  alias(libs.plugins.kotlin.compose)

  // Add these lines.
  kotlin("plugin.serialization") version libs.versions.kotlin
  id("com.google.gms.google-services")
}

// ...

dependencies {
  // ...

  // Add these lines.
  implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0")
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.11.0")

  implementation(platform("com.google.firebase:firebase-bom:34.14.0"))
  implementation("com.google.firebase:firebase-dataconnect")
}

3. Firebase プロジェクトを初期化する

Android Studio プロジェクト ディレクトリに移動し、その中で Firebase プロジェクトを初期化します。

cd ~/QuickstartApp
firebase login --reauth
firebase init dataconnect

プロンプトが表示されたら、次のオプションを選択します。

  • 新しい Firebase プロジェクトを作成します。
  • Gemini でスキーマを作成しないでください(このチュートリアルでは、事前構築済みのスキーマ例を使用します)。
  • 無料トライアルの Cloud SQL インスタンスとデータベースをプロビジョニングします。

他のすべてのプロンプトではデフォルト値を受け入れます。

次に、Firebase プロジェクトに Android アプリを登録します。

firebase apps:create -a com.example.quickstartapp android android-quickstart
firebase apps:sdkconfig android -o app/google-services.json

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

SQL 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
  }
}

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

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

firebase deploy --only dataconnect

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

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

firebase dataconnect:execute dataconnect/seed_data.gql

7. Android クライアント SDK を生成する

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

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

firebase dataconnect:sdk:generate
自動生成された Android SDK(抜粋)
public interface ExampleConnector : GeneratedConnector<ExampleConnector> {
  override val dataConnect: com.google.firebase.dataconnect.FirebaseDataConnect

  public val listMovies: ListMoviesQuery

  // ...
}

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

app/src/main/java/com/example/sequel/MainActivity.kt の内容をこのシンプルな Android アプリに置き換えます。

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

package com.example.quickstartapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import com.example.quickstartapp.ui.theme.QuickstartAppTheme
import com.google.firebase.dataconnect.generated.ExampleConnector
import com.google.firebase.dataconnect.generated.ListMoviesQuery
import com.google.firebase.dataconnect.generated.execute
import com.google.firebase.dataconnect.generated.instance

class MainActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
      QuickstartAppTheme() {
        Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
          var movies by remember {
            mutableStateOf(emptyList<ListMoviesQuery.Data.MoviesItem>())
          }
          LaunchedEffect(Unit) {
            // Queries need to be executed in a coroutine context
            try {
              movies = ExampleConnector.instance.listMovies.execute().data.movies
            } catch (e: Exception) {
              // TODO: Handle error, e.g., show a Toast or update a state variable to
              //   display an error message.
            }
          }
          LazyColumn(modifier = Modifier.padding(innerPadding)) {
            items(movies) { movie ->
              Text(text = movie.title)
            }
          }
        }
      }
    }
  }
}

9. アプリを試す

Android Studio からサンプルアプリを実行して、動作を確認します。

次のステップ

SQL Connect VS Code 拡張機能を試す

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

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

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

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

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

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

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