firebase-remote-config について
Flutter で Firebase Remote Config を利用するためのガイドです。パラメーター管理、値の取得と有効化に加え、リアルタイム更新、ターゲティング、テストを扱います。
主な機能
- 01パラメーターのデフォルト値と型付き取得
- 02リモート値の取得と有効化
- 03リアルタイム設定変更の監視
- 04ターゲティングと A/B テストの設定
- 05スロットリングとオフライン時のフォールバック
活用シーン
- 01アプリ更新なしで機能フラグを変更
- 02アプリ起動時に更新設定を適用
- 03設定変更後に UI を更新
- 04選択したユーザー層向けの値をテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ evanca/ flutter-ai-rules --skill firebase-remote-configインストール後、Claude Code で/firebase-remote-configを入力して読み込まれたか確認します。
詳細
Firebase Remote Config スキル
このスキルでは、Flutter アプリケーションで Firebase Remote Config を正しく使用する方法を説明します。
使用する場面
次のような場合にこのスキルを使用します。
- アプリを更新せずに、フィーチャーフラグやリモート設定を実装する場合。
- パラメーターのデフォルト値を管理し、リモートの値を取得する場合。
- 即時反映が可能なリアルタイム設定更新を実装する場合。
- A/B テストやユーザーセグメントに対する条件付きターゲティングを設定する場合。
1. セットアップと設定
flutter pub add firebase_remote_config
flutter pub add firebase_analytics # required for conditional targeting of app instances
import 'package:firebase_remote_config/firebase_remote_config.dart';
final remoteConfig = FirebaseRemoteConfig.instance;
- ユーザープロパティとオーディエンスターゲティングのために、Firebase プロジェクトで Google Analytics を有効にします。
- Remote Config REST API が無効になっていないことを確認します。SDK はこの API に依存しています。
- macOS では、Xcode でキーチェーン共有を有効にします。
設定を構成します。
await remoteConfig.setConfigSettings(RemoteConfigSettings(
fetchTimeout: const Duration(minutes: 1),
minimumFetchInterval: const Duration(hours: 1),
));
2. パラメーターの管理
アプリ内のデフォルト値を設定します(バックエンドに接続する前に、アプリが意図したとおりに動作するようにします)。
await remoteConfig.setDefaults(const {
"feature_new_onboarding": false,
"max_retry_attempts": 3,
"welcome_message": "Hello, world!",
"promo_discount_pct": 0.0,
});
型に応じたゲッターで値を読み取ります。
final showNewOnboarding = remoteConfig.getBool("feature_new_onboarding");
final maxRetries = remoteConfig.getInt("max_retry_attempts");
final welcomeMsg = remoteConfig.getString("welcome_message");
final discount = remoteConfig.getDouble("promo_discount_pct");
- Remote Config のキーや値に機密データを保存することは絶対に避けてください。エンドユーザーがアクセスできる可能性があります。
- Firebase コンソールでは、アプリ内で使用するパラメーターと同じ名前を定義します。
- 関連するパラメーターは共通のプレフィックスでグループ化します(例:
login_timeout、login_attempts_max)。
3. 取得と有効化
await remoteConfig.fetchAndActivate();
fetchAndActivate()を使用すると、1 回の呼び出しで値を取得して適用できます。- または、値が反映されるタイミングを制御するために、
fetch()とactivate()を別々に呼び出します。 - 快適なユーザーエクスペリエンスを実現するために、適切なタイミング(例:アプリの起動時)で取得した値を有効化します。
remoteConfig.lastFetchStatusを確認し、取得が成功、失敗、またはスロットリングされたかを判定します。- 取得に失敗しても適切に処理できるようにします。取得に失敗した場合は、デフォルト値が自動的に使用されます。
4. リアルタイム更新
remoteConfig.onConfigUpdated.listen((event) async {
await remoteConfig.activate();
// event.updatedKeys contains the changed parameter names
if (event.updatedKeys.contains("feature_new_onboarding")) {
// Refresh UI based on the new value
}
});
- リアルタイム Remote Config は Web では利用できません。
- 新しい設定値が有効化されたら、UI の状態を更新します。
- リアルタイム更新によって、ユーザーが操作中のワークフローが中断されないようにします。
5. スロットリングとパフォーマンス
- アプリが短時間に何度も取得すると、取得呼び出しはスロットリングされます。
- 本番環境におけるデフォルトの最小取得間隔は 12 時間です。
- 開発時にはより短い間隔を使用します。ただし、デバッグビルドでのみ使用してください。
await remoteConfig.setConfigSettings(RemoteConfigSettings(
fetchTimeout: const Duration(minutes: 1),
minimumFetchInterval: const Duration(minutes: 5),
));
- 多数のユーザーがいる場合は、サービス側のクォータ制限に注意してください。
6. テストとデバッグ
- 新しいアプリのデプロイを行わずに設定をテストするには、Firebase コンソールで条件付きの値を使用します。
- ユーザーセグメントごとに異なるパラメーター値を指定して、A/B テストを実装します。
- デフォルト値とリモート値の両方でアプリをテストします。
- 実行時の設定変更が適切に処理されることを確認します。
- デフォルト値への適切なフォールバックを確認するため、オフライン時の動作をテストします。
参考資料
コメント
Markdown 対応