0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Firebase AI Logic 実践ガイド — サーバープロンプトテンプレートとリプレイ攻撃防止

0
Last updated at Posted at 2026-05-19

Firebase AI Logic アーキテクチャ概要

はじめに

Firebase AI Logic(旧: Vertex AI in Firebase)は、モバイル・Webアプリから直接 Gemini モデルを呼び出せる Google の SDK です。バックエンドサーバーを構築しなくても、クライアントコードから安全に生成 AI 機能を実装できます。

2026年5月、Firebase AI Logic に リプレイ攻撃防止(Replay Attack Protection)という新しいセキュリティ機能が追加されました。同時に、2025年12月にローンチしたサーバープロンプトテンプレートの活用事例も増えています。

本記事では、Google I/O 2026(2026年5月19〜20日)を前に注目が高まる Firebase AI Logic の最新機能を、実装コードとともに解説します。

この記事で学べること

  • Firebase AI Logic の概要とバックエンドレス Gemini 呼び出しの仕組み
  • サーバープロンプトテンプレートによるプロンプト管理の実装方法
  • 2026年5月追加のリプレイ攻撃防止の仕組みと設定手順
  • Web(JavaScript)/ Android(Kotlin)/ iOS(Swift)の実装例

対象読者

  • モバイル・Web アプリに生成 AI 機能を追加したい開発者
  • Gemini API を直接クライアントから呼び出す際のセキュリティを強化したい方
  • バックエンドなしで AI 機能を実装したい方

前提環境

  • Firebase プロジェクト(設定済み)
  • Node.js v22.x(Web の場合)/ Android Studio / Xcode

TL;DR

  • Firebase AI Logic は、クライアントから Gemini を安全に呼び出す Firebase の GA SDK
  • サーバープロンプトテンプレート: プロンプトをクライアントコードの外に置き、IP 保護 + アプリ更新なしで変更可能
  • リプレイ攻撃防止(2026/05 新機能): App Check トークンをシングルユース化し、傍受されたトークンの再利用を防止
  • サポート言語: JavaScript / Kotlin / Swift / Dart(Flutter)/ C#(Unity)/ React Native

Firebase AI Logic とは

Firebase AI Logic は、Gemini API へのアクセスを Firebase セキュリティ基盤と統合した SDK です。

従来アーキテクチャ vs Firebase AI Logic

従来、クライアントアプリから LLM API を呼び出す際には「API キーの秘匿」が課題でした。Firebase AI Logic はこの問題を以下の仕組みで解決しています。

機能 説明
API キーの隠蔽 Gemini API キーは Firebase サーバー側に保管。クライアントコードに露出しない
App Check 統合 Play Integrity(Android)/ DeviceCheck(iOS)でリクエスト元の正当性を検証
Firebase セキュリティルール Firestore と同じセキュリティモデルで API アクセスを制御
使用量モニタリング Firebase Console でリクエスト数・トークン消費を可視化

2026年5月現在、数千のアプリが本番環境で Firebase AI Logic を活用しています(Google Cloud Blog, 2026/04)。

対応 SDK とモデル

サポート言語:

  • Android: Kotlin / Java
  • iOS: Swift
  • Web: JavaScript / TypeScript
  • クロスプラットフォーム: Flutter(Dart)、Unity(C#)、React Native

利用可能なモデル(2026/05 時点):

  • gemini-3-flash-preview(推奨・Preview ステータス)
  • gemini-3.1-flash-image-preview(画像生成対応・Preview ステータス)
  • ※旧モデルは 2026年6月以降順次廃止予定。サポートモデル一覧を参照

-preview のついたモデルは Preview ステータスです。本番環境での利用は SLA 適用外となる場合があるため、公式ドキュメントで最新のモデルステータスを確認してください。


基本実装:SDK の初期化と Gemini 呼び出し

セットアップ

Firebase コンソールでプロジェクトを作成後、各プラットフォームの SDK をインストールします。

# Web(npm)
npm install firebase

Web(JavaScript)

import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// Firebase アプリ初期化
const firebaseApp = initializeApp(firebaseConfig);

// Firebase AI Logic インスタンスを取得
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Gemini モデルを取得
const model = getGenerativeModel(ai, { model: "gemini-3-flash-preview" });

// コンテンツ生成
const prompt = "Firebase AI Logicの主なメリットを3点説明してください。";
const result = await model.generateContent(prompt);
const text = result.response.text();
console.log(text);

Android(Kotlin)

import com.google.firebase.Firebase
import com.google.firebase.ai.ai
import com.google.firebase.ai.type.GenerativeBackend

// Gemini モデルを取得
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel("gemini-3-flash-preview")

// コンテンツ生成
val response = model.generateContent("Firebase AI Logicの主なメリットを3点説明してください。")
println(response.text)

iOS(Swift)

import FirebaseAILogic

// Gemini モデルを取得
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
let model = ai.generativeModel(modelName: "gemini-3-flash-preview")

// コンテンツ生成
let prompt = "Firebase AI Logicの主なメリットを3点説明してください。"
let response = try await model.generateContent(prompt)
print(response.text ?? "No response.")

サーバープロンプトテンプレート

概要

サーバープロンプトテンプレート(Server Prompt Templates)は、2025年12月にローンチした機能です(Firebase Blog, 2025/12)。プロンプトの内容をクライアントコードから切り離し、Firebase のサーバーサイドに保管します。

サーバープロンプトテンプレート フロー

主なメリット:

メリット 説明
プロンプト IP の保護 ビジネスロジックを含むプロンプトがクライアントコードに露出しない
アプリ更新不要 プロンプトの変更が Firebase Console 上で即反映。ストア審査を待たずに対応可能
バージョン管理 テンプレートにバージョン番号を付けて段階的ロールアウトが可能
A/Bテスト対応 複数テンプレートを並行管理し、効果測定が容易

テンプレートの作成(Firebase Console)

Firebase Console の「AI Logic」→「Server Prompt Templates」から作成します。テンプレートは Dotprompt 形式で記述します。

---
model: 'gemini-3-flash-preview'
---

{{role "system"}}
あなたは日本語で丁寧に回答する AI アシスタントです。
回答は必ず200文字以内に収めてください。

{{role "user"}}
{{customerName}}さんのご注文内容: {{orderDetails}}
注文確認メールの本文を作成してください。

変数は Handlebars 構文({{変数名}})で定義します。クライアントからリクエスト時に値を渡します。

クライアント実装(テンプレート参照)

Web(JavaScript)

import { getAI, getTemplateGenerativeModel, GoogleAIBackend } from "firebase/ai";

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// テンプレートモデルを取得(generateContent の代わりに使用)
const model = getTemplateGenerativeModel(ai);

// テンプレート ID と変数を指定してリクエスト
const result = await model.generateContent(
  "order-confirmation-v1-0-0",  // テンプレート ID
  {
    customerName: "田中 太郎",
    orderDetails: "商品A × 2個、商品B × 1個"
  }
);

console.log(result.response.text());

Android(Kotlin)

val model = Firebase.ai(backend = GenerativeBackend.googleAI())
    .templateGenerativeModel()

val response = model.generateContent(
    "order-confirmation-v1-0-0",
    mapOf(
        "customerName" to "田中 太郎",
        "orderDetails" to "商品A × 2個、商品B × 1個"
    )
)
println(response.text)

iOS(Swift)

let model = FirebaseAI.firebaseAI(backend: .googleAI())
    .templateGenerativeModel()

let response = try await model.generateContent(
    templateID: "order-confirmation-v1-0-0",
    inputs: [
        "customerName": "田中 太郎",
        "orderDetails": "商品A × 2個、商品B × 1個"
    ]
)
print(response.text ?? "")

completable() など一部の高度な機能はテンプレートモデルでは非対応です。通常の generativeModel() と適宜使い分けてください。


リプレイ攻撃防止(2026年5月 新機能)

背景:App Check トークンの脆弱性

Firebase AI Logic は App Check を使って「このリクエストは正規アプリから来た」ことを検証します。仕組みは以下の通りです。

  1. アプリが Play Integrity(Android)/ DeviceCheck(iOS)で端末の正当性を証明
  2. Firebase が App Check トークンを発行
  3. API リクエストにトークンを添付→Firebase サーバーで検証

従来の問題点: App Check トークンが有効期間内であれば、傍受した攻撃者が**同じトークンを再利用(リプレイ攻撃)**できていました。AI エンドポイントは 1 回のリクエストで直接コスト(トークン課金)が発生するため、リプレイ攻撃は即座に経済的被害につながります。

新機能:シングルユーストークン

2026年5月から、Firebase AI Logic の App Check トークンが**シングルユース(Single-use)**になりました(Firebase 公式ブログ, 2026/04)。

仕組み:

  • トークンは最初のリクエストで消費され、それ以降は無効
  • 傍受された有効なトークンを再送信しても、Firebase サーバーが拒否
  • トークン消費と Gemini API 呼び出しがアトミックに処理される

セットアップ手順

1. App Check の有効化

Firebase Console → 「App Check」→ 各プロバイダーを設定します。

プラットフォーム プロバイダー
Android Play Integrity(推奨)または reCAPTCHA Enterprise
iOS App Attest(推奨)または DeviceCheck
Web reCAPTCHA v3 / reCAPTCHA Enterprise

2. SDK でリプレイ保護を有効化

App Check の設定なしに Firebase AI Logic を使い続けることは可能ですが、リプレイ攻撃防止はApp Check 有効化が必須です。

Web(JavaScript):

import { initializeApp } from "firebase/app";
import { initializeAppCheck, ReCaptchaV3Provider } from "firebase/app-check";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

const firebaseApp = initializeApp(firebaseConfig);

// App Check の初期化(reCAPTCHA v3 を使用)
const appCheck = initializeAppCheck(firebaseApp, {
  provider: new ReCaptchaV3Provider("YOUR_RECAPTCHA_SITE_KEY"),
  isTokenAutoRefreshEnabled: true
});

// Firebase AI Logic は自動的に App Check トークンを付与
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
const model = getGenerativeModel(ai, { model: "gemini-3-flash-preview" });

Android(Kotlin):

// build.gradle に以下を追加
// implementation("com.google.firebase:firebase-appcheck-playintegrity")

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory

// Application.onCreate() で初期化
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance()
)

// 以降の Firebase AI Logic 呼び出しで自動的にリプレイ保護が有効

3. Firebase Console で強制有効化

Firebase Console → App Check → Firebase AI Logic → 「Enforce」を ON にすることで、App Check トークンなしのリクエストを拒否できます。

開発中は「Debug Mode」を有効化することで、実端末なしでも App Check をテストできます。本番環境では必ず Debug Mode を無効化してください。


ハイブリッド推論(オプション)

Firebase AI Logic は、クラウドと**オンデバイス推論を組み合わせた「ハイブリッドモード」**も提供しています(Firebase ドキュメント)。

import { getAI, getGenerativeModel, HybridParams, InferenceMode } from "firebase/ai";

const ai = getAI(firebaseApp, {
  backend: { /* ハイブリッド設定 */ }
});

// ネットワーク不要時はオンデバイス、それ以外はクラウドにフォールバック
const model = getGenerativeModel(ai, {
  model: "gemini-3-flash-preview",
  // オンデバイスが利用可能な場合は優先使用
});

オンデバイス推論はレイテンシの低下・プライバシー向上・オフライン対応に有効ですが、モデルサイズや端末スペックの制約があります。


注意点

モデルの廃止スケジュール

2026年6月以降、旧バージョンのモデルが順次廃止されます。サポートモデルページで最新の廃止予定を確認してください。

completable() 関数はテンプレートモデル非対応

completable() は Zod スキーマの .shape を利用しており、サーバープロンプトテンプレートモデルでは動作しません。補完(オートコンプリート)機能が必要な場合は通常の generativeModel() を使用してください。

App Check の段階的適用

既存アプリへの App Check 導入は、まず「モニタリングモード」で開始し、正当なリクエストのみが通過することを確認してから「Enforce モード」に切り替えることを推奨します。


まとめ

Firebase AI Logic は、モバイル・Webアプリから Gemini モデルを安全に活用するための実用的な SDK です。

機能 ポイント
サーバープロンプトテンプレート プロンプト IP を保護し、アプリ更新なしで内容変更可能
リプレイ攻撃防止 App Check トークンをシングルユース化、AI エンドポイントへの不正利用を防止
ハイブリッド推論 オンデバイス + クラウドの柔軟な推論選択

Google I/O 2026 では Firebase Studio の更なる機能強化や新 Gemini モデルの発表が期待されており、Firebase AI Logic も引き続き進化していく見込みです。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?