見出し画像

【Flutter】環境別Firebaseプロジェクト

以下のやり方がベストかどうかは今後も情報収集が必要そう。

環境別に作成した別々のFirebaseプロジェクトにFlutterアプリを関連づける。公式サイトの手順では一つのFirebaseプロジェクトにしか関連づけできないが、複数のプロジェクトに紐づけてみる。

なお、こちらで作成したように、開発・STG・本番の3つの環境があることを前提とする。


手順

1. Firebaseプロジェクト作成

開発・STG・本番のそれぞれのプロジェクトを作成しておく。

2. Firebase CLIインストール

FirebaseとFlutterのそれぞれのプロジェクトを紐づけてくれるツールFlutterFireが使えるようにFirebase CLIをインストールし、FlutterFireを有効化する(実行済みであれば不要)

4. Firebaseプロジェクトを追加

Flutterプロジェクトのルートディレクトリでconfigureコマンドを実行し、Firebaseプロジェクトとの関連付けを行う。実行後に以下のファイルが生成もしくは更新される。

  • android/build.gradle(更新)

  • android/app/build.gradle(更新)

  • lib/firebase_options.dart(生成)

  • android/app/google-services.json(生成)

  • ios/firebase_app_id_file.json(生成)

生成されるファイルはFirebaseプロジェクトごとに別にするため、環境ごとにコマンドを叩いて生成されたファイルをリネームしていく。具体的には、次のA〜Cの手順を環境ごとに繰り返していく(コードは開発環境用なので随時読み替える)

A. configureコマンド実行
firebase_options.dartを環境別に生成するようにパラメータを指定する。

$ flutterfire configure \
--project FirebaseプロジェクトID(開発) \
--out lib/path/to/firebase_options_dev.dart \
--android-app-id AndroidのアプリケーションID(開発) \
--ios-bundle-id iOSのバンドルID(開発)

実行後、Firebaseプロジェクトのコンソール画面で関連付けされていることを確認する。

ここから、生成されたファイルを環境ごとに移動やリネームする。

B. Androidの構成ファイルを移動
android/app/google-services.jsonを開発環境に移動する。

$ mv android/app/google-services.json android/app/src/debug/

C. iOSの設定ファイルをリネーム
ios/firebase_app_id_file.jsonをリネームする。

mv ios/firebase_app_id_file.json ios/firebase_app_id_file_dev.json

5. iOSビルドスクリプトの追加

firebase_app_id_file.jsonはpod installの際にファイル名で参照されるもののらしい。ビルド時に環境別のファイル置き換わるよう、リネームするスクリプトをBuild Phasesに追加する。

# 以前に生成されたFirebase設定ファイルを削除
rm -rf "${SRCROOT}/firebase_app_id_file.json"

# Firebase設定ファイルをコピーして生成
if [ "${CONFIGURATION}" = "Debug" ]; then
    cp "${SRCROOT}/firebase_app_id_file_dev.json" "${SRCROOT}/firebase_app_id_file.json"
elif [ "${CONFIGURATION}" = "Profile" ]; then
    cp "${SRCROOT}/firebase_app_id_file_stg.json" "${SRCROOT}/firebase_app_id_file.json"
else
    cp "${SRCROOT}/firebase_app_id_file_prd.json" "${SRCROOT}/firebase_app_id_file.json"
fi

6. パッケージインストール

疎通確認のため、Firebase Analyticsだけ入れてみる。

dependencies:
  firebase_core: ^1.21.1
  firebase_analytics: ^9.3.3

7. Firebase初期化の実装

FlutterのコードにFirebase初期化の実装をする。ビルド環境に応じてfirebase_options.dartを切り替えるようにしている。

import 'package:flutter/foundation.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:プロジェクト/path/to/firebase_options_dev.dart' as develop;
import 'package:プロジェクト/path/to/firebase_options_stg.dart' as staging;
import 'package:プロジェクト/path/to/firebase_options_prd.dart' as product;

...

void main() async {
  // Firebase初期化
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: kReleaseMode ?
      product.DefaultFirebaseOptions.currentPlatform:
      kProfileMode ?
      staging.DefaultFirebaseOptions.currentPlatform:
      develop.DefaultFirebaseOptions.currentPlatform,
  );

  ...

8. 動作確認

それぞれの環境でビルドしてアプリ起動、それぞれのFirebaseプロジェクトコンソールのDashboardでアクセスを確認できれば疎通OK。

この記事が気に入ったらサポートをしてみませんか?