Google AI クライアント SDK から Firebase AI Logic SDK に移行する


移行手順に直接移動する

Firebase AI Logic SDK を使用するように移行する理由

Gemini Developer API にアクセスできる別のモバイル クライアント SDK またはウェブ クライアント SDK を試した可能性があります。

これらのクライアント SDK は、モバイルアプリとウェブアプリに重要なサービスを提供する堅牢な Firebase エコシステムに統合されていませんでした。これらの API は非推奨となり、Gemini Developer API にアクセスできる Firebase AI Logic クライアント SDK に置き換えられています。

モバイルアプリとウェブアプリのセキュリティ機能

モバイルアプリとウェブアプリでは、Gemini API の呼び出しを含むコードが保護されていない環境で実行されるため、セキュリティが重要であり、特別な考慮が必要です。Firebase App Check を使用すると、不正なクライアントによる API の不正使用を防ぐことができます。

Firebase AI LogicFirebase App Check を使用する場合、Gemini Developer APIGemini API キーをモバイルアプリまたはウェブアプリのコードベースに直接追加しないでください。代わりに、Gemini API キーはサーバーに残り、悪意のある行為者に公開されません。

モバイルアプリとウェブアプリ向けに構築されたエコシステム

Firebase は、モバイルアプリとウェブアプリを開発するための Google のプラットフォームです。Firebase AI Logic を使用すると、フルスタック アプリとデベロッパーのニーズに重点を置いたエコシステムにアプリが存在することになります。次に例を示します。

  • Firebase Remote Config を使用して、新しいアプリ バージョンをリリースせずに、ランタイム構成を動的に設定したり、アプリ内の値(モデル名やバージョンなど)をスワップアウトしたりできます。

  • Cloud Storage for Firebase を使用して、マルチモーダル リクエストに大きなファイルを含めます(Vertex AI Gemini API を使用している場合)。Cloud Storage クライアント SDK を使用すると、(ネットワークの状態が悪い場合でも)ファイルのアップロードとダウンロードを処理し、エンドユーザーのデータのセキュリティを強化できます。詳しくは、Cloud Storage for Firebase の使用に関するソリューション ガイドをご覧ください。

  • モバイルアプリとウェブアプリ用に構築されたデータベース SDK(Cloud Firestore など)を使用して、構造化データを管理します。

Firebase AI Logic SDK に移行する

Firebase AI Logic SDK に移行する手順の概要は次のとおりです。

  • ステップ 1: 新しい Firebase プロジェクトまたは既存の Firebase プロジェクトを設定し、アプリを Firebase に接続します。

  • ステップ 2: アプリに Firebase AI Logic SDK を追加します。

  • ステップ 3: アプリのインポートと初期化を更新します。

  • ステップ 4: 使用する機能に応じてコードを更新します。

ステップ 1: Firebase プロジェクトを設定してアプリを接続する

  1. Firebase コンソールにログインし、Firebase プロジェクトを選択します。

  2. Firebase コンソールで、[Firebase AI Logic] ページに移動します。

  3. [使ってみる] をクリックして、プロジェクトに必要な API とリソースを設定するガイド付きワークフローを開始します。

  4. Gemini Developer API を選択します。必要に応じて、後で別の API プロバイダを設定して使用できます。

    コンソールで必要な API が有効になり、プロジェクトに新しい専用の Gemini API キーが作成されます。
    この新しい Gemini API キーをアプリのコードベースに追加しないでください詳細

  5. コンソールのワークフローでプロンプトが表示されたら、画面上の指示に沿ってアプリを登録し、Firebase に接続します。

  6. この移行ガイドに沿って、アプリのライブラリと初期化を更新します。

ステップ 2: アプリに Firebase AI Logic SDK を追加する

Firebase プロジェクトが設定され、アプリが Firebase に接続されている(前の手順を参照)ので、Firebase AI Logic SDK をアプリに追加できます。

Swift

Swift Package Manager を使用して Firebase の依存関係のインストールと管理を行います。

Firebase AI Logic ライブラリは、Gemini モデルと Imagen モデルを操作するための API へのアクセスを提供します。このライブラリは、Apple プラットフォーム用の Firebase SDK(firebase-ios-sdk)に含まれています。

Firebase をすでに使用している場合は、Firebase パッケージが v11.13.0 以降であることを確認します。

  1. Xcode でアプリ プロジェクトを開いたまま、[File] > [Add Package Dependencies] の順に移動します。

  2. プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。

    https://github.com/firebase/firebase-ios-sdk
    
  3. 最新の SDK バージョンを選択します。

  4. FirebaseAI ライブラリを選択します。

上記の作業が完了すると、Xcode は依存関係の解決とバックグラウンドでのダウンロードを自動的に開始します。

Kotlin

Firebase AI Logic SDK for Android(firebase-ai)は、Gemini モデルと Imagen モデルを操作するための API へのアクセスを提供します。

モジュール(アプリレベル)の Gradle ファイル<project>/<app-module>/build.gradle.kts など)に、Android 用 Firebase AI Logic ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android BoM を使用することをおすすめします。

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.15.0"))

  // Add the dependency for the Firebase AI Logic library
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
}

Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

Java

Firebase AI Logic SDK for Android(firebase-ai)は、Gemini モデルと Imagen モデルを操作するための API へのアクセスを提供します。

モジュール(アプリレベル)の Gradle ファイル<project>/<app-module>/build.gradle.kts など)に、Android 用 Firebase AI Logic ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android BoM を使用することをおすすめします。

Java の場合は、2 つのライブラリを追加する必要があります。

dependencies {
  // ... other androidx dependencies

  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.15.0"))

  // Add the dependency for the Firebase AI Logic library
  // When using the BoM, you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")

  // Required for one-shot operations (to use `ListenableFuture` from Guava Android)
  implementation("com.google.guava:guava:31.0.1-android")

  // Required for streaming operations (to use `Publisher` from Reactive Streams)
  implementation("org.reactivestreams:reactive-streams:1.0.4")
}

Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

Web

Firebase AI Logic ライブラリは、Gemini モデルと Imagen モデルを操作するための API へのアクセスを提供します。このライブラリは、Firebase JavaScript SDK for Web の一部として含まれています。

  1. npm を使用して Firebase JS SDK for Web をインストールします。

    npm install firebase
    
  2. アプリで Firebase を初期化します。

    import { initializeApp } from "firebase/app";
    
    // TODO(developer) Replace the following with your app's Firebase configuration
    // See: https://firebase.google.com/docs/web/learn-more#config-object
    const firebaseConfig = {
      // ...
    };
    
    // Initialize FirebaseApp
    const firebaseApp = initializeApp(firebaseConfig);
    

Dart

Flutter 用の Firebase AI Logic プラグイン(firebase_ai)は、Gemini モデルと Imagen モデルを操作するための API へのアクセスを提供します。

  1. Flutter プロジェクト ディレクトリで、次のコマンドを実行してコア プラグインと Firebase AI Logic プラグインをインストールします。

    flutter pub add firebase_core && flutter pub add firebase_ai
    
  2. lib/main.dart ファイルで、Firebase Core プラグイン、Firebase AI Logic プラグイン、および前に生成した構成ファイルをインポートします。

    import 'package:firebase_core/firebase_core.dart';
    import 'package:firebase_ai/firebase_ai.dart';
    import 'firebase_options.dart';
    
  3. また、lib/main.dart ファイルで、構成ファイルによってエクスポートされた DefaultFirebaseOptions オブジェクトを使用して Firebase を初期化します。

    await Firebase.initializeApp(
      options: DefaultFirebaseOptions.currentPlatform,
    );
    
  4. Flutter アプリケーションを再ビルドします。

    flutter run
    

Unity

Google AI クライアント SDK では Unity をサポートしていませんでした。

Firebase AI Logic SDK for Unity のスタートガイドをご覧ください。

アプリから古い SDK を削除する

アプリの移行が完了したら(このガイドの残りのセクションを参照)、古いライブラリを削除してください。

Swift

古いライブラリを削除します。

  1. Xcode でアプリ プロジェクトを開き、[Packages Dependencies] ペインに移動します。

  2. パッケージ依存関係のリストから generative-ai-swift パッケージを選択します。

  3. リストの下部にある - ボタンをクリックし、[削除] をクリックして確定します。

Kotlin

dependencies {
    implementation("com.google.ai.client.generativeai:generativeai:VERSION")
}

Java

dependencies {
    implementation("com.google.ai.client.generativeai:generativeai:VERSION")
}

Web

// BEFORE
import { initializeApp } from "firebase/app";
import { GoogleGenerativeAI } from "@google/generative-ai";

Dart

古いパッケージを削除します。
flutter pub remove google_generative_ai

Unity

Google AI クライアント SDK では Unity をサポートしていませんでした。

Firebase AI Logic SDK for Unity のスタートガイドをご覧ください。

ステップ 3: アプリのインポートと初期化を更新する

インポートと、Gemini Developer API バックエンド サービスを初期化して GenerativeModel インスタンスを作成する方法を更新します。

Swift

// BEFORE
import GoogleGenerativeAI

let model = GenerativeModel(name: "MODEL_NAME", apiKey: APIKey.default)

// AFTER
import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.0-flash")

Kotlin

// BEFORE
import com.google.ai.client.generativeai.Chat
import com.google.ai.client.generativeai.type.Content
import com.google.ai.client.generativeai.java.GenerativeModuleFutures

...

val generativeModel = GenerativeModel(modelName = "MODEL_NAME",
  // Access your API key as a Build Configuration variable
  apiKey = BuildConfig.apiKey
)

// AFTER
import com.google.firebase.Firebase
import com.google.firebase.ai.ai
import com.google.firebase.ai.type.GenerativeBackend

...

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.0-flash")

Java

// BEFORE
import com.google.ai.client.generativeai.Chat;
import com.google.ai.client.generativeai.type.Content;
import com.google.ai.client.generativeai.java.GenerativeModuleFutures;

...

GenerativeModel gm = new GenerativeModel("MODEL_NAME",
  // Access your API key as a Build Configuration variable
  BuildConfig.apiKey
);

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

// AFTER
import com.google.firebase.ai.FirebaseAI;
import com.google.firebase.ai.GenerativeModel;
import com.google.firebase.ai.java.GenerativeModelFutures;
import com.google.firebase.ai.type.GenerativeBackend;

...

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-2.0-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);

Web

// BEFORE
import { GoogleGenerativeAI } from "@google/generative-ai";

// Fetch your API_KEY and access your API
const API_KEY = "...";
const genAI = new GoogleGenerativeAI(API_KEY);

...

const model = genAI.getGenerativeModel({ model: "MODEL_NAME"});

// AFTER
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.0-flash" });

Dart

// BEFORE
import 'package:google_generative_ai/google_generative_ai.dart';

final apiKey = Platform.environment['API_KEY'];
if (apiKey == null) {
print('No \$API_KEY environment variable');
exit(1);
}

final model = GenerativeModel(model: 'MODEL_NAME', apiKey: apiKey);

// AFTER
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-2.0-flash');

Unity

Google AI クライアント SDK では Unity をサポートしていませんでした。

Firebase AI Logic SDK for Unity のスタートガイドをご覧ください。

使用している機能によっては、GenerativeModel インスタンスを作成しない場合があることに注意してください。

ステップ 4: 使用する機能に応じてコードを更新する

このステップでは、使用する機能に応じて必要となる変更について説明します。

  • Firebase AI Logic クライアント SDK はコード実行をサポートしていません。この機能を使用する場合は、アプリで対応するようにしてください。

  • 次のリストで、Firebase AI Logic クライアント SDK への移行に対応するためにコードで変更が必要となる項目を確認します。

すべての言語とプラットフォームで必須

  • 関数呼び出し
    この機能を実装した場合は、スキーマの定義方法を更新する必要があります。関数宣言の作成方法については、更新された関数呼び出しガイドをご覧ください。

  • responseSchema を使用して構造化出力(JSON など)を生成する
    この機能を実装した場合は、スキーマの定義方法を更新する必要があります。JSON スキーマの作成方法については、新しい構造化出力ガイドをご覧ください。

  • タイムアウト

    • リクエストのデフォルトのタイムアウトを 180 秒に変更しました。

プラットフォームまたは言語に応じて必須

Swift

  • 列挙型

    • ほとんどの enum 型を、静的変数を持つ struct に置き換えました。この変更により、下位互換性のある方法で API をより柔軟に進化させることができます。switch ステートメントを使用する場合は、今後 SDK に追加される新しい値など、不明な値や処理されない値に対応するために、default: ケースを含める必要があります。

    • BlockThreshold 列挙型の名前を HarmBlockThreshold に変更しました。この型は struct になりました。

    • HarmCategoryHarmBlockThresholdHarmProbabilityBlockReasonFinishReason の各列挙型(現在は struct)から unknownunspecified のケースを削除しました。

    • 列挙型 ModelContent.PartPart という名前のプロトコルに置き換え、下位互換性のある方法で新しい型を追加できるようにしました。この変更の詳細については、コンテンツ部分のセクションをご覧ください。

  • コンテンツ部分

    • ThrowingPartsRepresentable プロトコルを削除し、ModelContent の初期化子を簡素化して、コンパイラ エラーが発生しないようにしました。正しくエンコードされていない画像は、generateContent で使用してもエラーがスローされます。

    • ModelContent.Part ケースを、Part プロトコルに準拠する次の struct タイプに置き換えました。

      • .textからTextPart
      • .dataInlineDataPart に設定
      • .fileDataFileDataPart に設定
      • .functionCallFunctionCallPart に設定
      • .functionResponseからFunctionResponsePart
  • 有害カテゴリ

    • HarmCategory を変更し、SafetySetting 型にネストされないようにしました。SafetySetting.HarmCategory として参照している場合は、HarmCategory に置き換えることができます。
  • 安全性に関するフィードバック

    • SafetyFeedback 型はどのレスポンスでも使用されていないため、削除しました。
  • 引用メタデータ

    • CitationMetadatacitationSources プロパティの名前を citations に変更しました。
  • 課金対象文字の合計数

    • 文字が送信されない状況を反映するため、CountTokensResponsetotalBillableCharacters プロパティを省略可能に変更しました。
  • 候補者の回答

    • 他のプラットフォームと一致するように、CandidateResponse の名前を Candidate に変更しました。
  • 生成構成

    • GenerationConfig のパブリック プロパティを internal に変更しました。これらはすべて、イニシャライザで構成できます。

Kotlin

  • 列挙型

    • enum クラスと sealed クラスを通常のクラスに置き換えました。この変更により、下位互換性のある方法で API をより柔軟に進化させることができます。

    • BlockThreshold 列挙型の名前を HarmBlockThreshold に変更しました。

    • HarmBlockThresholdHarmProbabilityHarmSeverityBlockReasonFinishReason の各列挙型から値を削除しました。

  • Blob メソッド

    • 名前に Blob を含むすべてのメソッドの名前を変更し、代わりに InlineData を使用するようにしました。
  • 緊急情報の設定

    • method フィールドを NULL 可能に変更しました。
  • Duration クラス

    • Kotlin の Duration クラスの使用をすべて削除し、long に置き換えました。この変更により、Java との相互運用性が向上します。
  • 引用メタデータ

    • CitationMetadata で以前に宣言されたすべてのフィールドを、Citation という新しいクラスにラップしました。引用は、CitationMetadatacitations というリストにあります。この変更により、プラットフォーム間で型をより適切に調整できるようになります。
  • トークンをカウントする

    • totalBillableCharacters フィールドを NULL 可能に変更しました。
  • 課金対象文字の合計数

    • 文字が送信されない状況を反映するため、CountTokensResponsetotalBillableCharacters プロパティを省略可能に変更しました。
  • モデルのインスタンス化

    • 他のプラットフォームに合わせて、requestOptions パラメータをパラメータリストの末尾に移動しました。

Java

  • 列挙型

    • enum クラスと sealed クラスを通常のクラスに置き換えました。この変更により、下位互換性のある方法で API をより柔軟に進化させることができます。

    • BlockThreshold 列挙型の名前を HarmBlockThreshold に変更しました。

    • HarmBlockThresholdHarmProbabilityHarmSeverityBlockReasonFinishReason の各列挙型から値を削除しました。

  • Blob メソッド

    • 名前に Blob を含むすべてのメソッドの名前を変更し、代わりに InlineData を使用するようにしました。
  • 緊急情報の設定

    • method フィールドを NULL 可能に変更しました。
  • Duration クラス

    • Kotlin の Duration クラスの使用をすべて削除し、long に置き換えました。この変更により、Java との相互運用性が向上します。
  • 引用メタデータ

    • CitationMetadata で以前に宣言されたすべてのフィールドを、Citation という新しいクラスにラップしました。引用は、CitationMetadatacitations というリストにあります。この変更により、プラットフォーム間で型をより適切に調整できるようになります。
  • トークンをカウントする

    • totalBillableCharacters フィールドを NULL 可能に変更しました。
  • 課金対象文字の合計数

    • 文字が送信されない状況を反映するため、CountTokensResponsetotalBillableCharacters プロパティを省略可能に変更しました。
  • モデルのインスタンス化

    • 他のプラットフォームに合わせて、requestOptions パラメータをパラメータリストの末尾に移動しました。

Web

JavaScript 用の Google AI クライアント SDK は、Firebase AI Logic クライアント SDK がそこから分岐してから多くの変更が加えられています。次のリストは、Firebase AI Logic クライアント SDK に移行する際に考慮する必要がある可能性のある変更点です。

  • 列挙型

    • 次の列挙型から値を削除しました。HarmCategoryBlockThresholdHarmProbabilityHarmSeverityBlockReasonFinishReason
  • ブロックの理由

    • PromptFeedbackblockReason を省略可能に変更しました。
  • 検索でのグラウンディング

    • この機能は Firebase AI Logic SDK でまだサポートされていないため、この機能の使用をすべて削除しました。
  • エラー

    • GoogleGenerativeAIError の使用をすべて削除し、必要に応じて AIError に移動しました。

Dart

  • 列挙型

    • HarmCategoryHarmProbabilityBlockReasonFinishReason の列挙型から値を削除しました。
  • データ部分

    • 他のプラットフォームに合わせ、DataPart の名前を InlineDataPart に、static data 関数の名前を inlineData に変更しました。
  • リクエスト オプション

    • timeout が機能しないため、RequestOptions を削除しました。近い将来に再び追加される予定ですが、他のプラットフォームに合わせて GenerativeModel タイプに移動されます。
  • 停止シーケンス

    • GenerationConfigstopSequences パラメータを省略可能にし、デフォルトを空の配列ではなく null に変更しました。
  • 引用

    • CitationMetadatacitationSources プロパティの名前を citations に変更しました。他のプラットフォームに合わせて、CitationSource 型の名前が Citation に変更されました。
  • 不要なパブリック タイプ、メソッド、プロパティ

    • 意図せず公開されていた次のタイプ、メソッド、プロパティを削除しました。defaultTimeoutCountTokensResponseFieldsparseCountTokensResponseparseEmbedContentResponseparseGenerateContentResponseparseContentBatchEmbedContentsResponseContentEmbeddingEmbedContentRequestEmbedContentResponse
  • トークンをカウントする

    • 不要になった余分なフィールドを countTokens 関数から削除しました。contents のみが必須です。
  • モデルのインスタンス化

    • 他のプラットフォームに合わせて、systemInstruction パラメータをパラメータ リストの末尾に移動しました。
  • 埋め込み機能

    • サポートされていないエンベディング機能(embedContentbatchEmbedContents)をモデルから削除しました。

Unity

Google AI クライアント SDK では Unity をサポートしていませんでした。

Firebase AI Logic SDK for Unity のスタートガイドをご覧ください。


Firebase AI Logic の使用感に関するフィードバックを送信する