Firebase AI Logic とそのクライアント SDK は、以前は「Vertex AI in Firebase」と呼ばれていました。サービスと機能の拡大(Gemini Developer API のサポートなど)をより適切に反映するため、サービスの名前を変更し、Firebase AI Logic に再パッケージ化しました。
モバイルアプリやウェブアプリから Google の生成 AI モデルに安全にアクセスするには、「Gemini API」プロバイダを選択できるようになりました。以前から利用可能な Vertex AI Gemini API と、新たに Gemini Developer API が追加されました。つまり、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 では、Vertex AI Gemini API のみを使用できました。
新しい Firebase AI Logic SDK を使用すると、モバイルアプリやウェブアプリから直接呼び出す Gemini API プロバイダ(Gemini Developer API または Vertex AI Gemini API)を選択できます。
2 つの Gemini API プロバイダの使用の違い(特にサポートされている機能、料金、レート制限の観点から)を確認します。たとえば、Gemini Developer API は Cloud Storage URL を使用したファイルの提供をサポートしていませんが、無料枠と妥当な割り当てを利用したい場合は、適切な選択肢となる可能性があります。
ステップ 2: 必要な API を有効にする
選択した「Gemini API」プロバイダを使用するには、Firebase プロジェクトで必要な API がすべて有効になっていることを確認してください。
プロジェクトで両方の API プロバイダを同時に有効にできます。
Firebase コンソールにログインし、Firebase プロジェクトを選択します。
Firebase コンソールで、Firebase AI Logic ページに移動します。
[始める] をクリックして、プロジェクトに必要な API とリソースの設定に役立つガイド付きワークフローを起動します。
Firebase AI Logic SDK で使用する「Gemini API」プロバイダを選択します。別の API プロバイダは、後でいつでも設定して使用できます。
この移行ガイドに沿って、アプリのライブラリと初期化を更新してください。
ステップ 3: アプリで使用されているライブラリを更新する
Firebase AI Logic ライブラリを使用するようにアプリのコードベースを更新します。
Swift
Xcode でアプリ プロジェクトを開いたまま、次のいずれかの方法で Firebase パッケージを v11.13.0 以降に更新します。
オプション 1: すべてのパッケージを更新する: [File] > [Packages] > [Update to Latest Package Versions] に移動します。
オプション 2: Firebase を個別に更新する: [パッケージの依存関係] セクションで Firebase パッケージに移動します。Firebase パッケージを右クリックし、[Update Package] を選択します。
Firebase パッケージに v11.13.0 以降が表示されていることを確認します。そうでない場合は、指定したパッケージ要件で v11.13.0 以降への更新が許可されていることを確認します。
プロジェクト エディタでアプリのターゲットを選択し、[Frameworks, Libraries, and Embedded Content] セクションに移動します。
新しいライブラリを追加する: [+] ボタンを選択し、Firebase パッケージから FirebaseAI を追加します。
アプリの移行が完了したら(このガイドの残りのセクションを参照)、古いライブラリを削除してください。
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:33.16.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:33.16.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 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
// 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
// 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
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
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
「Vertex AI in Firebase」から Unity のサポートを利用できませんでした。
使用する機能によっては、必ずしも GenerativeModel
インスタンスを作成するとは限りません。
- Imagen モデルにアクセスするには、
ImagenModel
インスタンスを作成します。
ステップ 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 など)を生成する GA より前にこの機能を実装した場合は、スキーマの定義方法を更新する必要があります。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
パラメータをパラメータ リストの末尾に移動しました。
- 他のプラットフォームとの整合性を保つため、
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
を省略可能に変更しました。
Vertex AI Gemini API の代わりに Gemini Developer API の使用を開始する場合にのみ変更が必要です。
安全性設定
- サポートされていない
SafetySetting.method
の使用を削除しました。
- サポートされていない
インライン データ
- サポートされていない
InlineDataPart.videoMetadata
の使用を削除しました。
- サポートされていない
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
「Vertex AI in Firebase」では Unity のサポートをご利用いただけませんでした。
移行に関連して発生する可能性のあるエラー
Firebase AI Logic の一般提供版を使用するように移行する際に、この移行ガイドで説明されている必要な変更をすべて完了していないと、エラーが発生する可能性があります。
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 の使用感についてフィードバックを送信する