mcpField
F
firebase-ai

firebase-ai

github.com/evanca開発663162 回インストール3 週間前に更新
リポジトリ

firebase-ai について

Flutter アプリで Firebase AI Logic を使うためのガイドです。Gemini によるテキスト生成、チャット、ストリーミング、画像プロンプトに加え、エラー処理と安全上の注意点を扱います。

主な機能

  1. 01Firebase AI Logic の設定
  2. 02Gemini のテキスト生成とチャット
  3. 03ストリーミング応答
  4. 04テキストと画像のプロンプト
  5. 05エラー、レート制限、オフラインへの対応
  6. 06安全性とプライバシーの指針

活用シーン

  1. 01Flutter アプリへのテキスト生成機能の追加
  2. 02複数ターンのチャット UI の構築
  3. 03AI の出力をストリーミング表示
  4. 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),
  ],
);

参考資料

コメント