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 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 に接続します。
ステップ 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 をインストールします。
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.5-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.5-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.5-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.5-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.5-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
ステートメントを使用する場合は、default:
ケースを含めて、不明な値や未処理の値(今後 SDK に追加される新しい値を含む)を処理する必要があります。BlockThreshold
列挙型の名前をHarmBlockThreshold
に変更しました。この型はstruct
になりました。次の列挙型(現在は
struct
)からunknown
とunspecified
のケースを削除しました:HarmCategory
、HarmBlockThreshold
、HarmProbability
、BlockReason
、FinishReason
。列挙型
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
に置き換えることができます。
Safety feedback
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 の使用感についてフィードバックを送信する