firebase-cloud-functions について
Flutter アプリから Firebase Cloud Functions を呼び出すためのスキルです。Callable 関数、データ交換、エラー処理、リージョン設定、エミュレーターでのテストを扱います。
主な機能
- 01Callable 関数の設定と呼び出し
- 02構造化データのシリアライズ
- 03例外処理と再試行の指針
- 04リージョンとタイムアウトの設定
- 05Firebase Emulator Suite でのテスト
活用シーン
- 01Flutter アプリからサーバー側関数を呼び出す
- 02データを渡して関数の結果を処理する
- 03ネットワークエラーとタイムアウトに対処する
- 04Callable 関数をローカルでテストする
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ evanca/ flutter-ai-rules --skill firebase-cloud-functionsインストール後、Claude Code で/firebase-cloud-functionsを入力して読み込まれたか確認します。
詳細
Firebase Cloud Functions スキル
このスキルでは、Flutter アプリケーションから Firebase Cloud Functions を正しく呼び出す方法を定義します。
使用するタイミング
次の場合にこのスキルを使用します。
- Flutter プロジェクトで呼び出し可能な Cloud Functions を実装するとき。
- 構造化データをサーバー側の関数に渡し、結果を処理するとき。
- 関数呼び出しのエラー、タイムアウト、再試行を処理するとき。
- リージョン固有の関数デプロイを設定するとき。
- Firebase Emulator Suite を使って Cloud Functions をローカルでテストするとき。
1. セットアップと設定
flutter pub add cloud_functions
import 'package:cloud_functions/cloud_functions.dart';
// After Firebase.initializeApp():
final functions = FirebaseFunctions.instance;
- Cloud Functions の機能を使用する前に Firebase を初期化します。
- リージョン固有のデプロイでは、リージョンを指定します。
final functions = FirebaseFunctions.instanceFor(region: 'europe-west1');
- Flutter アプリから呼び出す前に、呼び出し可能な関数を Firebase にデプロイします。
- Cloud Functions の不正利用を防ぐため、App Check の実装を検討してください。
2. 関数の呼び出し
httpsCallable を使って関数を参照し、call で呼び出します。
final result = await FirebaseFunctions.instance
.httpsCallable('functionName')
.call(data);
- データは
Mapとして渡します。自動的に JSON にシリアライズされます。
final result = await FirebaseFunctions.instance
.httpsCallable('addMessage')
.call({
"text": messageText,
"push": true,
});
dataプロパティから結果にアクセスします。自動的に JSON からデシリアライズされます。
final responseData = result.data;
// Cast to expected type if needed:
final message = result.data as Map<String, dynamic>;
final status = message['status'] as String;
- 関数のパラメーターに認証トークンを渡さないでください。 SDK によって自動的に含められます。
- クライアントコードとサーバー側の実装で関数名を統一してください。
3. エラー処理
関数呼び出しは必ず try-catch で囲み、FirebaseFunctionsException を確認してください。
try {
final result = await FirebaseFunctions.instance
.httpsCallable('functionName')
.call(data);
// Handle successful result
} on FirebaseFunctionsException catch (e) {
switch (e.code) {
case 'not-found':
// Function does not exist
break;
case 'permission-denied':
// User lacks permission
break;
case 'unavailable':
// Service temporarily unavailable — retry
break;
default:
debugPrint('Function error [${e.code}]: ${e.message}');
}
} catch (e) {
debugPrint('Unexpected error: $e');
}
- ネットワーク接続の問題やタイムアウトを適切に処理します。
- 関数呼び出しに失敗したときは、ユーザーにわかりやすいエラーメッセージを表示します。
- 一時的なエラー(
unavailable、deadline-exceeded)には、指数バックオフを用いた再試行ロジックを実装します。
4. パフォーマンスの最適化
想定される実行時間に応じてタイムアウトを設定します。
final callable = FirebaseFunctions.instance.httpsCallable(
'functionName',
options: HttpsCallableOptions(
timeout: const Duration(seconds: 30),
),
);
- レイテンシを減らすため、関数との間でやり取りするデータ量を最小限に抑えます。
- 可能な場合はバッチ処理を使用して、関数呼び出しの回数を減らします。
- 頻繁に使用する関数の結果には、クライアント側のキャッシュを検討してください。
- 使用頻度の低い関数では、コールドスタートを考慮します。
- 関数の応答を待つ間、UI に適切な読み込み状態を表示します。
5. テストと開発
ローカルでの開発やテストには Firebase Emulator Suite を使用します。
FirebaseFunctions.instance.useFunctionsEmulator('localhost', 5001);
- 適切な検証が行われることを確認するため、有効な入力と無効な入力の両方で関数をテストします。
- 関数が認証を正しく処理することを確認します。
- 適切なアクセス制御を確認するため、さまざまなユーザーロールと権限でテストします。
- クライアント側の関数呼び出しロジックに対するユニットテストを実装します。
参考資料
コメント
Markdown 対応