firebase-ai について
Flutter アプリで Firebase AI Logic を使うためのガイドです。Gemini によるテキスト生成、チャット、ストリーミング、画像プロンプトに加え、エラー処理と安全上の注意点を扱います。
主な機能
- 01Firebase AI Logic の設定
- 02Gemini のテキスト生成とチャット
- 03ストリーミング応答
- 04テキストと画像のプロンプト
- 05エラー、レート制限、オフラインへの対応
- 06安全性とプライバシーの指針
活用シーン
- 01Flutter アプリへのテキスト生成機能の追加
- 02複数ターンのチャット UI の構築
- 03AI の出力をストリーミング表示
- 04テキストプロンプトと画像の送信
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ evanca/ flutter-ai-rules --skill firebase-aiインストール後、Claude Code で/firebase-aiを入力して読み込まれたか確認します。
詳細
Firebase AI スキル
このスキルでは、Flutter アプリケーションで Firebase AI Logic を正しく使用する方法を説明します。
使用する場面
次のような場合に、このスキルを使用してください。
- Flutter プロジェクトで Firebase AI を設定し、構成する場合。
- Gemini モデルでテキストコンテンツやチャットの応答を生成する場合。
- リアルタイムの UI 更新に対応するストリーミング AI 応答を実装する場合。
- Gemini にマルチモーダルプロンプト(テキスト+画像)を送信する場合。
- AI の操作に関するエラー、オフラインの状況、レート制限に対処する場合。
- AI 機能にセキュリティとプライバシーの考慮事項を適用する場合。
1. セットアップと構成
flutter pub add firebase_ai
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
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');
- Firebase Console の Firebase AI Logic ページで、Firebase プロジェクトが AI サービス向けに構成されていることを確認します。
- Firebase AI 機能を使用する前に、Firebase を初期化します。
- Gemini Developer API バックエンドには、
FirebaseAI.googleAI()を使用します(まずはこちらを推奨します)。 - Firebase AI エンドポイントの不正使用を防ぐため、App Check を実装します。
プラットフォームのサポート状況:
| プラットフォーム | サポート |
|---|---|
| iOS | 完全対応 |
| Android | 完全対応 |
| Web | 完全対応 |
| macOS/その他の Apple プラットフォーム | ベータ版 |
| Windows | 非対応 |
2. コンテンツの生成
単一ターンのテキスト生成
final response = await model.generateContent([
Content.text('Summarize the benefits of Flutter for mobile development'),
]);
final text = response.text; // The generated summary string
複数ターンのチャット
final chat = model.startChat();
final response = await chat.sendMessage(
Content.text('What is the difference between StatelessWidget and StatefulWidget?'),
);
print(response.text);
// Follow-up in the same conversation
final followUp = await chat.sendMessage(
Content.text('When should I use StatefulWidget?'),
);
print(followUp.text);
ストリーミング応答
結果が届くたびに部分的な結果を表示するには、ストリーミングを使用します。
final stream = model.generateContentStream([
Content.text('Write a step-by-step guide to implementing dark mode in Flutter'),
]);
await for (final chunk in stream) {
// Append chunk.text to the UI progressively
setState(() => _output += chunk.text ?? '');
}
マルチモーダルプロンプト(テキスト+画像)
final imageBytes = await File('photo.jpg').readAsBytes();
final response = await model.generateContent([
Content.multi([
TextPart('Describe what you see in this image'),
InlineDataPart('image/jpeg', imageBytes),
]),
]);
3. エラー処理
AI 呼び出しを、構造化されたエラー処理で囲みます。
try {
final response = await model.generateContent([Content.text(prompt)]);
return response.text;
} on FirebaseAIException catch (e) {
if (e.message?.contains('quota') ?? false) {
// Handle rate limiting — show retry message or queue the request
return 'Service is busy. Please try again shortly.';
}
return 'AI service error: ${e.message}';
} catch (e) {
return 'Unexpected error: $e';
}
- AI の操作に失敗した場合は、ユーザーにわかりやすいエラーメッセージを提示します。
- 適切なフォールバック動作(キャッシュされた応答など)で、オフラインの状況に対処します。
- レート制限や一時的なエラーには、指数バックオフを実装します。
4. セキュリティとプライバシー
- AI サービスを他の Firebase プロダクトと併用する場合は、Firebase Security Rules のベストプラクティスに従います。
- AI 機能へのアクセスに、適切な認証と認可を確保します。
- プロンプトインジェクションを防ぐため、モデルに送信する前にユーザー入力をサニタイズします。
- AI サービスでユーザーコンテンツを処理する際は、データプライバシー要件に留意します。
- セーフティ設定を使用して、適切なコンテンツフィルタリングとモデレーションを実装します。
final model = FirebaseAI.googleAI().generativeModel(
model: 'gemini-2.5-flash',
safetySettings: [
SafetySetting(HarmCategory.harassment, HarmBlockThreshold.medium),
SafetySetting(HarmCategory.dangerousContent, HarmBlockThreshold.high),
],
);
参考資料
コメント
Markdown 対応