Firebase Remote Configの概要
本記事は、Firebaseの機能の一つであるFirebase Remote Configについて、概要をまとめた記事です。
1. はじめに
1.1 Firebase Remote Config とは
Firebase Remote Configは、アプリから設定値を取得して使用できるサービスです。
Web上の管理画面(Firebaseコンソール)からアプリの設定値を設定し、アプリからその設定値を取得して使用します。
設定値をWeb上で変えることで、アプリを修正せずに変更した設定値を使用できます。
1.2 本資料の目的
アプリの強制アップデートの仕組みを実装するにあたって、Firebase Remote Configが使えないか調査しました。
本記事ではFirebase Remote Configの概要についてまとめました。
どういったサービスでどういう時に使えるのか、ざっと確認できることを目的とします。
Firebase Remote Configが解決する課題
モバイルアプリ特有の制約
Webアプリケーションであれば、サーバー上のソースコードを修正するだけで、すべてのユーザーに対して一瞬で最新の状態を届けることができます。
しかし、モバイルアプリでは、以下の2ステップが必要で最新の状態が届くまでラグがあります。
- ソースコードを修正し、審査を通過する
- リリースした後、ユーザーが最新のバージョンに更新する
この制約が原因で以下の問題が発生します
- ビジネス上の機会損失
文言を修正する、セール期間のバナーの表示/非表示を切り替えるなどといった軽微な対応でも、ラグにより遅くなります - 緊急時のリスク
リリース後に致命的なバグがあった場合、修正バージョンが届くまで時間がかかります
Firebase Remote Configは設定値をクラウド上で管理し、アプリ側はクラウドから設定値を取るという仕組みなので、値の変更に新しいバージョンのリリースは不要となります。
主要機能とユースケース
詳細はこちら
動的な値の配信
クラウド上で設定値を更新し、アプリ側でクラウド上の設定値を参照するという仕組みにより、動的な表示や機能の切り替えが可能になります。
Feature Flagという運用では、アプリでフラグによる制御を組み込んでおき、Firebaseコンソール上でフラグを切り替えることで、機能の制御が可能になります。
例えば、新しい画面を追加し、フラグによって画面への遷移ボタンの表示・非表示を切り替えるようにすれば、新しいバージョンのリリース後、Firebaseコンソール上でフラグを切り替えることで画面への遷移ができるかどうかをコントロールできます。
もし、仮に、リリース後、新しい画面にバグがあった場合は、フラグをOFFにするだけで、画面遷移できなくなるので、バグがある状態で機能を利用されるといったリスクを回避できます。
リアルタイム更新
Real-time Remote Configという機能で、Firebaseコンソール上で値を更新した瞬間に、アプリでも更新を検知し、新しい値を使用できます。
デフォルトではキャッシュを使用するため、最新の値を取得したいときは、キャッシュを破棄して再取得するか、この機能を使う必要がある
ターゲット配信
すべてのユーザーではなく、特定の条件に合致するユーザーへ値を配信できる
特定の条件は、例えば、以下のような条件がある
- アプリのバージョン
- OS
- 言語
- 国/地域
- 初回起動日時
- ランダム(設定した確率で、ランダムなユーザーに配信する)
詳細はこちら
この機能を使うと以下のようなことが可能
- iOSユーザーにはApp Storeへのリンク、AndroidユーザーにはGoogle Playへのリンクを表示する
- 日本語環境のスマホには日本語のメッセージ、英語環境には英語のメッセージを表示
- 初回起動時間を条件に、長く使っているユーザーに特典を付与する
- ランダムの条件を設定し、段階的に新機能を使えるようにする
導入によるメリット
- ビジネススピードを上げる
マーケティング施策、文言修正、デザイン変更などをリリースなしで届けることができる - 開発・運用コストの削減
コードの修正なしで、文言などのアプリの固定値を更新できる - リスク回避
リリースした機能にシステム障害や予期せぬ不具合が発覚しても、Firebaseコンソールの設定値で機能をOFFにするだけで、ユーザーの手元のアプリから該当機能を即時無効化できる
導入・運用にあたっての注意点
回避すべき読み込み方法
大量に取得リクエストを行わないようにする。
大量に取得リクエストを送ると制限がかかりエラーになる可能性がある。
リアルタイムで欲しいパラメータに関しては、頻繁に取得リクエストを送るのではなく、Real-time Remote Configを使う。
デフォルト値を設定する
Remote Configでの値は取得に失敗する前提で設計する。
ユーザーが完全にオフライン環境でアプリを開いた場合、Remote Configはクラウドから最新値を取得できない。
したがって、アプリ側でデフォルト値を設定し、フォールバック設計しておく。
セキュリティと機密データの扱い
Remote Configで配信されるデータは、アプリとサーバー間の通信を傍受すれば第三者でも読み取ることが可能です。そのため、ユーザーのパスワード、APIキー、個人情報、クレジットカード情報などの機密データをRemote Configを介して配信しないようにする。
まとめ
Firebase Remote Configは、単なる「設定値の変更ツール」にとどまらず、ストア審査の制約を飛び越えてアプリの価値を最速で検証し、かつ障害リスクからサービスを守るための**「アプリ運用のための強力なインフラ」**です。本プロダクトにおいて、どの範囲を自前バックエンドで管理し、どの範囲にRemote Configの俊敏性を活かすべきか、役割分担を明確に設計することが成功への鍵となります。