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 Logic で Firebase App Check を使用する場合、Gemini Developer API の Gemini 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 プロジェクトを設定してアプリを接続する
Firebase コンソールにログインし、Firebase プロジェクトを選択します。
Firebase コンソールで、[Firebase AI Logic] ページに移動します。
[使ってみる] をクリックして、プロジェクトに必要な API とリソースを設定するガイド付きワークフローを開始します。
Gemini Developer API を選択します。必要に応じて、後で別の API プロバイダを設定して使用できます。
コンソールで必要な API が有効になり、プロジェクトに新しい専用の Gemini API キーが作成されます。
この新しい Gemini API キーをアプリのコードベースに追加しないでください。詳細コンソールのワークフローでプロンプトが表示されたら、画面上の指示に沿ってアプリを登録し、Firebase に接続します。
この移行ガイドに沿って、アプリのライブラリと初期化を更新します。
ステップ 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 以降であることを確認します。
Xcode でアプリ プロジェクトを開いたまま、[File] > [Add Package Dependencies] の順に移動します。
プロンプトが表示されたら、Firebase Apple プラットフォーム SDK リポジトリを追加します。
https://github.com/firebase/firebase-ios-sdk
最新の SDK バージョンを選択します。
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 の一部として含まれています。
npm を使用して Firebase JS SDK for Web をインストールします。
npm install firebase
アプリで 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 へのアクセスを提供します。
Flutter プロジェクト ディレクトリで、次のコマンドを実行してコア プラグインと Firebase AI Logic プラグインをインストールします。
flutter pub add firebase_core && flutter pub add firebase_ai
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';
また、
lib/main.dart
ファイルで、構成ファイルによってエクスポートされたDefaultFirebaseOptions
オブジェクトを使用して Firebase を初期化します。await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, );
Flutter アプリケーションを再ビルドします。
flutter run
Unity
Google AI クライアント SDK では Unity をサポートしていませんでした。
アプリから古い SDK を削除する
アプリの移行が完了したら(このガイドの残りのセクションを参照)、古いライブラリを削除してください。
Swift
古いライブラリを削除します。
Xcode でアプリ プロジェクトを開き、[Packages Dependencies] ペインに移動します。
パッケージ依存関係のリストから
generative-ai-swift
パッケージを選択します。リストの下部にある
-
ボタンをクリックし、[削除] をクリックして確定します。
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 をサポートしていませんでした。
ステップ 3: アプリのインポートと初期化を更新する
インポートと、Gemini Developer API バックエンド サービスを初期化して GenerativeModel
インスタンスを作成する方法を更新します。
Swift
// BEFOREimport 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
// BEFOREimport 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
// BEFOREimport 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
// BEFOREimport { 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
// BEFOREimport '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 をサポートしていませんでした。
使用している機能によっては、GenerativeModel
インスタンスを作成しない場合があることに注意してください。
- Imagen モデルにアクセスするには、
ImagenModel
インスタンスを作成します。
ステップ 4: 使用する機能に応じてコードを更新する
このステップでは、使用する機能に応じて必要となる変更について説明します。
Firebase AI Logic クライアント SDK はコード実行をサポートしていません。この機能を使用する場合は、アプリで対応するようにしてください。
次のリストで、Firebase AI Logic クライアント SDK への移行に対応するためにコードで変更が必要となる項目を確認します。
すべての言語とプラットフォームで必須
関数呼び出し
この機能を実装した場合は、スキーマの定義方法を更新する必要があります。関数宣言の作成方法については、更新された関数呼び出しガイドをご覧ください。responseSchema
を使用して構造化出力(JSON など)を生成する
この機能を実装した場合は、スキーマの定義方法を更新する必要があります。JSON スキーマの作成方法については、新しい構造化出力ガイドをご覧ください。タイムアウト
- リクエストのデフォルトのタイムアウトを 180 秒に変更しました。
プラットフォームまたは言語に応じて必須
Swift
列挙型
ほとんどの
enum
型を、静的変数を持つstruct
に置き換えました。この変更により、下位互換性のある方法で API をより柔軟に進化させることができます。switch
ステートメントを使用する場合は、今後 SDK に追加される新しい値など、不明な値や処理されない値に対応するために、default:
ケースを含める必要があります。BlockThreshold
列挙型の名前をHarmBlockThreshold
に変更しました。この型はstruct
になりました。HarmCategory
、HarmBlockThreshold
、HarmProbability
、BlockReason
、FinishReason
の各列挙型(現在はstruct
)からunknown
とunspecified
のケースを削除しました。列挙型
ModelContent.Part
をPart
という名前のプロトコルに置き換え、下位互換性のある方法で新しい型を追加できるようにしました。この変更の詳細については、コンテンツ部分のセクションをご覧ください。
コンテンツ部分
ThrowingPartsRepresentable
プロトコルを削除し、ModelContent
の初期化子を簡素化して、コンパイラ エラーが発生しないようにしました。正しくエンコードされていない画像は、generateContent
で使用してもエラーがスローされます。ModelContent.Part
ケースを、Part
プロトコルに準拠する次のstruct
タイプに置き換えました。.text
からTextPart
.data
をInlineDataPart
に設定.fileData
をFileDataPart
に設定.functionCall
をFunctionCallPart
に設定.functionResponse
からFunctionResponsePart
有害カテゴリ
HarmCategory
を変更し、SafetySetting
型にネストされないようにしました。SafetySetting.HarmCategory
として参照している場合は、HarmCategory
に置き換えることができます。
安全性に関するフィードバック
SafetyFeedback
型はどのレスポンスでも使用されていないため、削除しました。
引用メタデータ
CitationMetadata
のcitationSources
プロパティの名前をcitations
に変更しました。
課金対象文字の合計数
- 文字が送信されない状況を反映するため、
CountTokensResponse
のtotalBillableCharacters
プロパティを省略可能に変更しました。
- 文字が送信されない状況を反映するため、
候補者の回答
- 他のプラットフォームと一致するように、
CandidateResponse
の名前をCandidate
に変更しました。
- 他のプラットフォームと一致するように、
生成構成
GenerationConfig
のパブリック プロパティをinternal
に変更しました。これらはすべて、イニシャライザで構成できます。
Kotlin
列挙型
enum
クラスとsealed
クラスを通常のクラスに置き換えました。この変更により、下位互換性のある方法で API をより柔軟に進化させることができます。BlockThreshold
列挙型の名前をHarmBlockThreshold
に変更しました。HarmBlockThreshold
、HarmProbability
、HarmSeverity
、BlockReason
、FinishReason
の各列挙型から値を削除しました。
Blob メソッド
- 名前に
Blob
を含むすべてのメソッドの名前を変更し、代わりにInlineData
を使用するようにしました。
- 名前に
緊急情報の設定
method
フィールドを NULL 可能に変更しました。
Duration クラス
- Kotlin の
Duration
クラスの使用をすべて削除し、long
に置き換えました。この変更により、Java との相互運用性が向上します。
- Kotlin の
引用メタデータ
CitationMetadata
で以前に宣言されたすべてのフィールドを、Citation
という新しいクラスにラップしました。引用は、CitationMetadata
のcitations
というリストにあります。この変更により、プラットフォーム間で型をより適切に調整できるようになります。
トークンをカウントする
totalBillableCharacters
フィールドを NULL 可能に変更しました。
課金対象文字の合計数
- 文字が送信されない状況を反映するため、
CountTokensResponse
のtotalBillableCharacters
プロパティを省略可能に変更しました。
- 文字が送信されない状況を反映するため、
モデルのインスタンス化
- 他のプラットフォームに合わせて、
requestOptions
パラメータをパラメータリストの末尾に移動しました。
- 他のプラットフォームに合わせて、
Java
列挙型
enum
クラスとsealed
クラスを通常のクラスに置き換えました。この変更により、下位互換性のある方法で API をより柔軟に進化させることができます。BlockThreshold
列挙型の名前をHarmBlockThreshold
に変更しました。HarmBlockThreshold
、HarmProbability
、HarmSeverity
、BlockReason
、FinishReason
の各列挙型から値を削除しました。
Blob メソッド
- 名前に
Blob
を含むすべてのメソッドの名前を変更し、代わりにInlineData
を使用するようにしました。
- 名前に
緊急情報の設定
method
フィールドを NULL 可能に変更しました。
Duration クラス
- Kotlin の
Duration
クラスの使用をすべて削除し、long
に置き換えました。この変更により、Java との相互運用性が向上します。
- Kotlin の
引用メタデータ
CitationMetadata
で以前に宣言されたすべてのフィールドを、Citation
という新しいクラスにラップしました。引用は、CitationMetadata
のcitations
というリストにあります。この変更により、プラットフォーム間で型をより適切に調整できるようになります。
トークンをカウントする
totalBillableCharacters
フィールドを NULL 可能に変更しました。
課金対象文字の合計数
- 文字が送信されない状況を反映するため、
CountTokensResponse
のtotalBillableCharacters
プロパティを省略可能に変更しました。
- 文字が送信されない状況を反映するため、
モデルのインスタンス化
- 他のプラットフォームに合わせて、
requestOptions
パラメータをパラメータリストの末尾に移動しました。
- 他のプラットフォームに合わせて、
Web
JavaScript 用の Google AI クライアント SDK は、Firebase AI Logic クライアント SDK がそこから分岐してから多くの変更が加えられています。次のリストは、Firebase AI Logic クライアント SDK に移行する際に考慮する必要がある可能性のある変更点です。
列挙型
- 次の列挙型から値を削除しました。
HarmCategory
、BlockThreshold
、HarmProbability
、HarmSeverity
、BlockReason
、FinishReason
。
- 次の列挙型から値を削除しました。
ブロックの理由
PromptFeedback
のblockReason
を省略可能に変更しました。
検索でのグラウンディング
- この機能は Firebase AI Logic SDK でまだサポートされていないため、この機能の使用をすべて削除しました。
エラー
GoogleGenerativeAIError
の使用をすべて削除し、必要に応じてAIError
に移動しました。
Dart
列挙型
HarmCategory
、HarmProbability
、BlockReason
、FinishReason
の列挙型から値を削除しました。
データ部分
- 他のプラットフォームに合わせ、
DataPart
の名前をInlineDataPart
に、static
data
関数の名前をinlineData
に変更しました。
- 他のプラットフォームに合わせ、
リクエスト オプション
timeout
が機能しないため、RequestOptions
を削除しました。近い将来に再び追加される予定ですが、他のプラットフォームに合わせてGenerativeModel
タイプに移動されます。
停止シーケンス
GenerationConfig
のstopSequences
パラメータを省略可能にし、デフォルトを空の配列ではなくnull
に変更しました。
引用
CitationMetadata
のcitationSources
プロパティの名前をcitations
に変更しました。他のプラットフォームに合わせて、CitationSource
型の名前がCitation
に変更されました。
不要なパブリック タイプ、メソッド、プロパティ
- 意図せず公開されていた次のタイプ、メソッド、プロパティを削除しました。
defaultTimeout
、CountTokensResponseFields
、parseCountTokensResponse
、parseEmbedContentResponse
、parseGenerateContentResponse
、parseContent
、BatchEmbedContentsResponse
、ContentEmbedding
、EmbedContentRequest
、EmbedContentResponse
。
- 意図せず公開されていた次のタイプ、メソッド、プロパティを削除しました。
トークンをカウントする
- 不要になった余分なフィールドを
countTokens
関数から削除しました。contents
のみが必須です。
- 不要になった余分なフィールドを
モデルのインスタンス化
- 他のプラットフォームに合わせて、
systemInstruction
パラメータをパラメータ リストの末尾に移動しました。
- 他のプラットフォームに合わせて、
埋め込み機能
- サポートされていないエンベディング機能(
embedContent
とbatchEmbedContents
)をモデルから削除しました。
- サポートされていないエンベディング機能(
Unity
Google AI クライアント SDK では Unity をサポートしていませんでした。
Firebase AI Logic の使用感に関するフィードバックを送信する