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


移行手順に直接移動する

Firebase AI Logic SDK を使用するために移行する理由

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

これらのクライアント SDK は、モバイルアプリとウェブアプリに重要なサービスを提供する堅牢な Firebase エコシステムに統合されていませんでした。現在、これらのメソッドは非推奨となり、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 に接続します。

  • ステップ 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 をインストールします。

    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.5-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.5-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.5-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.5-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.5-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 ステートメントを使用する場合は、default: ケースを含めて、不明な値や未処理の値(今後 SDK に追加される新しい値を含む)を処理する必要があります。

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

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

    • 列挙型 ModelContent.PartPart というプロトコルに置き換え、下位互換性を維持したまま新しい型を追加できるようにしました。この変更については、コンテンツ パーツのセクションで詳しく説明します。

  • コンテンツ パーツ

    • ThrowingPartsRepresentable プロトコルを削除し、ModelContent のイニシャライザを簡素化して、コンパイラ エラーがまれに発生するのを回避しました。正しくエンコードされていない画像は、generateContent で使用されるときにエラーをスローします。

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

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

    • HarmCategorySafetySetting 型にネストされなくなりました。SafetySetting.HarmCategory と呼んでいる場合は、HarmCategory に置き換えることができます。
  • Safety feedback

    • 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 の使用感についてフィードバックを送信する