FirebaseAIを介してGeminiに質問を投げる
[質問]
Firebase AI を介して、Geminiに質問を投げる簡単なサンプルが作れますか
[回答] Gemini
はい、もちろんです。Firebase AI Logic (SDK) を使用して、Webアプリ(JavaScript/TypeScript)からGeminiに質問を投げる最小限のサンプルコードをご紹介します。
この方法を使うと、APIキーをフロントエンドに記述する必要がありません。 Firebaseがバックエンドでキーを安全に管理し、中継(プロキシ)してくれます。
1. 準備:Firebaseコンソールでの設定
- Firebase コンソールでプロジェクトを作成または選択します。
- 左メニューの「Build」→「AI Logic」を開き、セットアップを開始します。
- プロバイダーとして「Gemini Developer API」を選択して有効化します。
-
これにより、Firebaseが自動的にバックエンドでAPIキーを管理するようになります。
-
App Check(任意ですが本番では必須)を有効にすると、さらにセキュリティが強固になります。
2. サンプルコード (Web SDK v11+)
まず、ライブラリをインストールします。
次に、アプリの実装例です。
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel } from "firebase/ai";
// 1. Firebaseの設定(コンソールから取得したもの)
// ここにGeminiのAPIキーは含まれません!
const firebaseConfig = {
apiKey: "AIza...", // これはFirebase自体の識別キーであり、Geminiの秘密キーではありません
authDomain: "your-app.firebaseapp.com",
projectId: "your-app-id",
storageBucket: "your-app.appspot.com",
messagingSenderId: "...",
appId: "..."
};
// 2. 初期化
const app = initializeApp(firebaseConfig);
const ai = getAI(app);
// 3. モデルの取得 (例: gemini-2.0-flash)
const model = getGenerativeModel(ai, { model: "gemini-2.0-flash" });
async function askGemini(prompt) {
try {
// 4. 質問を送信
const result = await model.generateContent(prompt);
const response = await result.response;
console.log("Geminiの回答:", response.text());
return response.text();
} catch (error) {
console.error("エラーが発生しました:", error);
}
}
// 実行例
askGemini("Firebase AI Logicを使うメリットを3つ教えて。");
3. なぜこれで安全なのか?
このコードが動くとき、内部では以下のようなことが起きています。
- リクエストの送信: あなたのアプリは、GoogleのGeminiサーバーに直接行くのではなく、Firebaseの専用プロキシエンドポイントにリクエストを送ります。
- 認証の検証: Firebase側は「このリクエストは許可されたアプリから来ているか?」を(Firebaseの認証情報やApp Checkを使って)チェックします。
- キーの付与: Firebaseのサーバーサイドで、隠されている本物のGemini APIキーをリクエストに付加します。
- 回答の返却: Geminiからの回答を、あなたのアプリに安全に差し戻します。
次のステップ
実際に動かしてみる際に、「Firebaseコンソールでの有効化手順」や「特定のフレームワーク(ReactやNext.jsなど)での書き方」について、さらに詳細が必要な箇所はありますか?