Firebase AI Logic とそのクライアント SDK は、以前は「Vertex AI in Firebase」と呼ばれていました。拡張されたサービスと機能(Gemini Developer API のサポートなど)をより適切に反映するため、サービスの名前を変更し、Firebase AI Logic に再パッケージ化しました。
モバイルアプリやウェブアプリから Google の生成 AI モデルに直接安全にアクセスするには、「Gemini API」プロバイダ(以前から利用可能な Agent Platform Gemini API (formerly Vertex AI) または Gemini Developer API)を選択できるようになりました。つまり、 Gemini Developer API を使用できるようになりました。 には、妥当なレート制限と割り当てが設定された無料枠 が用意されています。
Firebase AI Logic SDK への移行手順の概要
ステップ 1: アプリとユースケースに最適な「Gemini API」プロバイダを選択します。
ステップ 2: 必要な API を有効にします。
ステップ 3: アプリで使用されているライブラリを更新します。
ステップ 4: アプリで初期化を更新します。
ステップ 5: 使用する機能に応じてコードを更新します。
ステップ 1: アプリに最適な「Gemini API」プロバイダを選択する
この移行では、Gemini API プロバイダを選択できます。
以前の「Vertex AI in Firebase」SDK では、Agent Platform Gemini API (formerly Vertex AI) のみを使用できました。
新しい Firebase AI Logic SDK では、モバイルアプリまたはウェブアプリから直接呼び出す「Gemini API」プロバイダ(Gemini Developer API または Agent Platform Gemini API (formerly Vertex AI))を選択できます。
2 つの Gemini API プロバイダの使用の違い(特に、サポートされている機能、料金、レート制限)を確認します。たとえば、Gemini Developer API は Cloud Storage URL を使用したファイルの提供をサポートしていませんが、無料枠と妥当な割り当てを利用したい場合は、適切な選択肢となる可能性があります。
ステップ 2: 必要な API を有効にする
選択した「Gemini API」プロバイダを使用するには、Firebase プロジェクトで必要な API がすべて有効になっていることを確認してください。
プロジェクトで両方の API プロバイダを同時に有効にすることもできます。
Firebase コンソールにログインし、Firebase プロジェクトを選択します。
Firebase コンソールで、[AI サービス] > [AI ロジック] に移動します。
[開始] をクリックして、プロジェクトに必要な API とリソースの設定に役立つガイド付きワークフローを起動します。
Firebase AI Logic SDK で使用する「Gemini API」プロバイダを選択します。必要に応じて、別の API プロバイダを後で設定して使用することもできます。
この移行ガイドに沿って、アプリのライブラリと初期化を更新してください。
ステップ 3: アプリで使用されているライブラリを更新する
Firebase AI Logic ライブラリを使用するようにアプリのコードベースを更新します。
Swift
Xcode でアプリ プロジェクトを開いたまま、次のいずれかの方法で Firebase パッケージを v12.5.0 以降に更新します。
オプション 1: すべてのパッケージを更新する。[File] > [Packages] > [Update to Latest Package Versions] に移動します。
オプション 2: Firebase を個別に更新する: [パッケージの依存関係] セクションで Firebase パッケージに移動します。Firebase パッケージを右クリックし、[Update Package] を選択します。
Firebase パッケージが v12.5.0 以降になっていることを確認します。そうでない場合は、指定したパッケージ要件で v12.5.0 以降への更新が許可されていることを確認します。
プロジェクト エディタでアプリのターゲットを選択し、[Frameworks, Libraries, and Embedded Content] セクションに移動します。
新しいライブラリを追加します。+ ボタンを選択し、Firebase パッケージから FirebaseAILogic を追加します。
アプリの移行が完了したら(このガイドの残りのセクションを参照)、古いライブラリを削除します。
[FirebaseVertexAI-Preview] を選択し、[—] ボタンを押します。
Kotlin
モジュール(アプリレベル)の Gradle ファイル(通常は
<project>/<app-module>/build.gradle.ktsまたは<project>/<app-module>/build.gradle)で、古い依存関係(該当する場合)を以下に置き換えます。古い依存関係を削除する前に、アプリのコードベースを移行する(このガイドの残りのセクションを参照)方が簡単な場合があります。
// BEFORE dependencies {
implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")} // AFTER dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.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") }Android プロジェクトを Gradle ファイルと同期します。
Firebase Android BoM を使用しない場合は、firebase-ai ライブラリの依存関係を追加し、Android Studio で推奨される最新バージョンを承認します。
Java
モジュール(アプリレベル)の Gradle ファイル(通常は
<project>/<app-module>/build.gradle.ktsまたは<project>/<app-module>/build.gradle)で、古い依存関係(該当する場合)を以下に置き換えます。古い依存関係を削除する前に、アプリのコードベースを移行する(このガイドの残りのセクションを参照)方が簡単な場合があります。
// BEFORE dependencies {
implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")} // AFTER dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.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") }Android プロジェクトを Gradle ファイルと同期します。
Firebase Android BoM を使用しない場合は、firebase-ai ライブラリの依存関係を追加して、Android Studio で推奨される最新バージョンを承認します。
Web
npm を使用して、ウェブ用の Firebase JS SDK の最新バージョンを取得します。
npm i firebase@latest
または
yarn add firebase@latest
ライブラリをインポートした場所で、インポート ステートメントを更新して、代わりに
firebase/aiを使用します。古いインポートを削除する前に、アプリのコードベースを移行する方が簡単な場合があります(このガイドの残りのセクションをご覧ください)。
// BEFORE import { initializeApp } from "firebase/app";
import { getVertexAI, getGenerativeModel } from "firebase/vertexai-preview";// AFTER import { initializeApp } from "firebase/app"; import { getAI, getGenerativeModel } from "firebase/ai";
Dart
Flutter プロジェクト ディレクトリから次のコマンドを実行して、
pubspec.yamlファイルでfirebase_aiパッケージを使用するように更新します。flutter pub add firebase_ai
Flutter プロジェクトを再ビルドします。
flutter run
アプリの移行が完了したら(このガイドの残りのセクションを参照)、古いパッケージを必ず削除してください。
flutter pub remove firebase_vertexai
Unity
「Vertex AI in Firebase」から Unity のサポートを利用できませんでした。
ステップ 4: アプリの初期化を更新する
|
Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。 |
選択した API プロバイダのサービスを初期化する方法を更新し、GenerativeModel インスタンスを作成します。
Swift
import FirebaseAILogic
// 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-3.8-flash")
Kotlin
// 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-3.8-flash")
Java
// 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-3.8-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Web
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-3.8-flash" });
Dart
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-3.8-flash');
Unity
「Vertex AI in Firebase」では Unity のサポートをご利用いただけませんでした。
使用する機能によっては、GenerativeModel インスタンスを作成しない場合もあります。Gemini Live API を使用して入出力をストリーミングするには、LiveModel インスタンスを作成します。
ステップ 5: 使用する機能に応じてコードを更新する
このステップでは、使用する機能に応じて必要になる可能性のある変更について説明します。
Cloud Storage URL を使用していて、この移行で Gemini Developer API を使用するように切り替えた場合は、ファイルをインライン データとして含めるようにマルチモーダル リクエストを更新する必要があります(または、動画に YouTube URL を使用します)。
「Vertex AI in Firebase」SDK の一般提供版にいくつかの変更が導入されました。Firebase AI Logic SDK を使用する場合も、同じ変更が必要です。Firebase AI Logic SDK を導入するためにコードに加える必要のある変更については、以下のリストをご覧ください。
すべての言語とプラットフォームで必須
関数呼び出し
この機能を GA 前に実装した場合は、スキーマの定義方法を更新する必要があります。関数の宣言を記述する方法については、更新された関数呼び出しガイドをご覧ください。responseSchemaを使用して構造化出力(JSON など)を生成する
一般提供前にこの機能を実装した場合は、スキーマの定義方法を更新する必要があります。JSON スキーマの記述方法については、新しい構造化出力ガイドをご覧ください。タイムアウト
- リクエストのデフォルトのタイムアウトを 180 秒に変更しました。
プラットフォームまたは言語に基づいて必須
Swift
列挙型
ほとんどの
enum型を静的変数を持つstructに置き換えました。この変更により、下位互換性を維持しながら API を進化させる柔軟性が向上します。switchステートメントを使用する場合は、将来 SDK に追加される新しい値など、不明な値や処理されない値をカバーするために、default:ケースを含める必要があります。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に置き換えることができます。
安全性に関するフィードバック
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パラメータをパラメータ リストの末尾に移動しました。
- 他のプラットフォームと整合性を保つため、
Live API
列挙型クラス
ResponseModalityのUNSPECIFIED値を削除しました。代わりにnullを使用します。LiveGenerationConfig.setResponseModalitiesの名前をLiveGenerationConfig.setResponseModalityに変更しました。LiveContentResponse.Statusクラスを削除し、ステータス フィールドをLiveContentResponseのプロパティとしてネストしました。LiveContentResponseクラスを削除し、代わりにモデルからのレスポンスと一致するLiveServerMessageのサブクラスを提供しました。ListenableFuture<LiveSession>ではなくListenableFuture<LiveSessionFutures>を返すようにLiveModelFutures.connectを変更しました。
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パラメータをパラメータ リストの末尾に移動しました。
- 他のプラットフォームと整合性を保つため、
Live API
列挙型クラス
ResponseModalityのUNSPECIFIED値を削除しました。代わりにnullを使用します。LiveGenerationConfig.setResponseModalitiesの名前をLiveGenerationConfig.setResponseModalityに変更しました。LiveContentResponse.Statusクラスを削除し、ステータス フィールドをLiveContentResponseのプロパティとしてネストしました。LiveContentResponseクラスを削除し、代わりにモデルからのレスポンスと一致するLiveServerMessageのサブクラスを提供しました。ListenableFuture<LiveSession>ではなくListenableFuture<LiveSessionFutures>を返すようにLiveModelFutures.connectを変更しました。
さまざまな Java ビルダー メソッドを変更し、
voidではなく、クラスのインスタンスを正しく返すようにしました。
Web
列挙型
HarmCategory、BlockThreshold、HarmProbability、HarmSeverity、BlockReason、FinishReasonの列挙型から値を削除しました。
ブロックの理由
PromptFeedbackのblockReasonを省略可能に変更しました。
Agent Platform Gemini API (formerly Vertex AI) ではなく Gemini Developer API の使用を開始する場合にのみ変更が必要です。
安全に関する設定
- サポートされていない
SafetySetting.methodの使用を削除しました。
- サポートされていない
インライン データ
- サポートされていない
InlineDataPart.videoMetadataの使用を削除しました。
- サポートされていない
Dart
列挙型
HarmCategory、HarmProbability、BlockReason、FinishReasonの列挙型から値を削除しました。
データ部分
- 他のプラットフォームとの整合性を図るため、
DataPartの名前をInlineDataPartに、staticdata関数の名前を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
「Vertex AI in Firebase」から Unity のサポートを利用できませんでした。
移行に関連して発生する可能性のあるエラー
Firebase AI Logic の GA バージョンを使用するように移行する際に、この移行ガイドに記載されている必要な変更をすべて完了していないと、エラーが発生することがあります。
403 エラー: Requests to this API firebasevertexai.googleapis.com ... are blocked.
Requests to this API firebasevertexai.googleapis.com ... are blocked. という 403 エラーが表示された場合は、通常、Firebase 構成ファイルまたはオブジェクトの Firebase API キーの許可リストに、使用しようとしているプロダクトに必要な API が含まれていないことを意味します。
アプリで使用されている Firebase API キーの「API の制限」許可リストに必要な API がすべて含まれていることを確認してください。Firebase AI Logic の場合、Firebase API キーの許可リストに Firebase AI Logic API が少なくとも 1 つ必要です。この API は、Firebase コンソールで必要な API を有効にしたときに、API キーの許可リストに自動的に追加されているはずです。
すべての API キーは、Google Cloud コンソールの [API とサービス] > [認証情報] パネルで確認できます。
Firebase AI Logic の使用感に関するフィードバックを送信する