3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Flutter + Firebase 環境別設定(開発、本番) & ビルド手順

Last updated at Posted at 2025-02-15

📌 はじめに

Flutter アプリに Firebase を導入し、開発環境(staging)と本番環境(production)を分ける ための手順を備忘も兼ねてまとめました。

内容

  • Firebase を staging(開発用)と production(本番用)に分ける
  • flutterfire_cli を使用した Firebase 設定
  • GoogleService-Info の環境ごとの管理
  • 実機ビルド手順

1️⃣ Firebase プロジェクトの作成

Firebasestaging(開発用)と production(本番用)を分けるため、2 つの Firebase プロジェクト を作成します。

環境 Firebase プロジェクト ID
開発環境 {任意の文字列}-staging
本番環境 {任意の文字列}-production

※APP名-stagingなど分かりやすいプロジェクト名が望ましいです。


2️⃣ flutterfire_cli のインストール

Flutter アプリと Firebase を連携するために、flutterfire_cli を使用します。

dart pub global activate flutterfire_cli

パスが通っていない場合は、.zshrc / .bashrc に以下を追加して適用

export PATH="$PATH":"$HOME/.pub-cache/bin"
source ~/.zshrc  # または source ~/.bashrc

3️⃣ Firebase 設定ファイルの生成

Firebase の GoogleService-Info.plistgoogle-services.jsonfirebase_options.dart環境ごとに生成 し、同時にFirebaseプロジェクトにアプリを登録します。

各設定ファイルの役割は下記です。

ファイル 役割 使われる場所 プラットフォーム
GoogleService-Info.plist iOS 用 Firebase 設定 iOS SDK (firebase_auth, firebase_core など) iOS
google-services.json Android 用 Firebase 設定 Android SDK (firebase_auth, firebase_core など) Android
firebase_options.dart Flutter アプリの Firebase 設定 Flutter (firebase_core) Flutter 共通

📌 Staging 用(開発環境)

flutterfire configure --project={任意の文字列}-staging \
  --out=lib/firebase_options_staging.dart \
  --ios-bundle-id={任意のID}.staging \
  --android-package-name={任意のID}.staging

開発環境用に下記の設定ファイルが作成されます。

 ios/Runner/GoogleService-Info.plist
 android/app/google-services.json
 lib/firebase_options_staging.dart

そのまま続けて本番環境用のコマンドを実行するとgoogle-services.jsonGoogleService-Info.plistが本番環境用に上書きされてしまうので、その前にiOSはstaging用としてリネーム、Androidはディレクトリを作成して移動します。
firebase_options.dartはコマンド実行時に開発環境用としてファイル名を指定しているので問題なし

mv ios/Runner/GoogleService-Info.plist ios/Runner/GoogleService-Info-staging.plist
mkdir android/app/src/staging
mv android/app/google-services.json android/app/src/staging/google-services.json

📌 Production 用(本番環境)

flutterfire configure --project={任意の文字列}-production \
  --out=lib/firebase_options_production.dart \
  --ios-bundle-id={任意のID} \
  --android-package-name={任意のID}

本番環境用に下記の設定ファイルが作成されます。

 ios/Runner/GoogleService-Info.plist
 android/app/google-services.json
 lib/firebase_options_production.dart

iOSはproduction用としてリネーム、Androidはディレクトリを作成して移動します

mv ios/Runner/GoogleService-Info.plist ios/Runner/GoogleService-Info-production.plist
mkdir android/app/src/production
mv android/app/google-services.json android/app/src/production/google-services.json

Tips:
設定ファイルを別環境のもので上書きしてしまった場合でも、Firebaseコンソール上から直接ダウンロードすることが可能です。または、もう一度コマンドを実行すれば再生成されます。

1.Firebaseコンソール にアクセス。
2.Firebase にログインし、対象のプロジェクトを開く。
3.左側のナビゲーションメニューから「⚙️ プロジェクトの設定」をクリック。
4.「アプリの設定」セクションに移動。
5.該当のアプリを選択。
6.「GoogleService-Info.plist をダウンロード」ボタンをクリック。


4️⃣ GoogleService-Info.plist の管理(iOS)

iOS では GoogleService-Info.plist を環境ごとに適用する必要があります。

📌 Info.plist に以下を追加

Xcodeを起動し、Info.plistを開くか、XMLに直接記載します。

Xcode を開く

open ios/Runner.xcworkspace

Info.plistに下記を追記

Info.plist 2025-02-15 8.05.02.png
XMLに直接記載する場合は下記を追記

<key>GoogleService-Info</key>
<string>GoogleService-Info-$(CONFIGURATION).plist</string>

📌 Build Configuration を設定

stagingでは「GoogleService-Info-staging.plist」、Productionでは「GoogleService-Info-production.plist」が使われるように設定をしていきます。

RunnerのConfigurationの左下の「+」をクリックし、「Duplicate "Debug" Configuration」でコピーし、「Staging」として保存します。
スクリーンショット 2025-02-15 8.19.24.png

Configurationの左下の「+」をクリックし、「Duplicate "Release" Configuration」でコピーし、「Production」として保存します。
スクリーンショット 2025-02-15 8.18.41.png
最終的には下記のようになります。
スクリーンショット 2025-02-15 8.22.27.png


5️⃣ google-services.json の管理(Android)

Android では google-services.json を環境ごとに適用するため、フレーバー設定を行います。

📌 android/app/build.gradle を編集

androidの下にフレーバー設定を追加します。


android {
    flavorDimensions "default"
    productFlavors {
        staging {
            applicationId "{任意のID}.staging"
        }
        production {
            applicationId "{任意のID}"
        }
    }
}

6️⃣ Firebase の初期化

Firebase の環境を firebase_options_staging.dart(開発環境用)と
firebase_options_production.dart(本番環境用)で切り替えられるように設定します。

📌 main.dart

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options_staging.dart' as staging;
import 'firebase_options_production.dart' as prod;

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 🔹 環境(開発・本番)を判定
  bool isProduction =
      const bool.fromEnvironment('PRODUCTION', defaultValue: false);

  // 🔹 Firebase の初期化(開発用 / 本番用の設定を適用)
  await Firebase.initializeApp(
    options: isProduction
        ? prod.DefaultFirebaseOptions.currentPlatform // 本番環境のFirebase設定
        : staging.DefaultFirebaseOptions.currentPlatform, // 開発環境のFirebase設定
  );


  runApp(MyApp());
}

7️⃣ 実機ビルドの準備

📌 iPhone 実機を認識

Xcodeでプロジェクトを開くか下記コマンドを実行

open ios/Runner.xcworkspace
  1. Runner を選択 → Signing & Capabilities タブ
  2. Team を設定(Apple ID を登録)
  3. 開発用プロビジョニングプロファイル を設定

📌 Android 実機を認識

  1. 端末のUSBデバッグ を有効にする
  2. 実機の 設定 → 端末情報 → ビルド番号を7回タップ(開発者オプションを有効化)
  3. 開発者オプション から USBデバッグ を有効にする

8️⃣ Debug で実機ビルド

端末に開発アプリをインストールするためのコマンドは下記です。

🔹 iOS

開発環境(Staging)

flutter run --dart-define=PRODUCTION=false

本番環境(Production)

flutter run --dart-define=PRODUCTION=true

🔹 Android

開発環境(Staging)

flutter run --flavor staging --dart-define=PRODUCTION=false

本番環境(Production)

flutter run --flavor production --dart-define=PRODUCTION=true

9️⃣ Release ビルド & インストール

🔹 iOS

実機に Release ビルドをインストール

開発環境(Staging)
flutter build ios --dart-define=PRODUCTION=false --release
flutter install
本番環境(Production)
flutter build ios --dart-define=PRODUCTION=true --release
flutter install
TestFlight / App Store にアップロードする場合
flutter build ipa --dart-define=PRODUCTION=true --release

Xcode で ProductArchive を実行し、TestFlight にアップロード
※ipaファイルはbuild/ios/ipa/Runner.ipaにあります。


🔹 Android

実機に Release ビルドをインストール

開発環境(Staging)
flutter build apk --flavor staging --dart-define=PRODUCTION=false --release

adb install android/app/build/outputs/apk/staging/release/app-staging-release.apk
本番環境(Production)
flutter build apk --flavor production --dart-define=PRODUCTION=true --release
adb install android/app/build/outputs/apk/production/release/app-production-release.apk

Play Store にアップロードする場合

flutter build appbundle --flavor production --dart-define=PRODUCTION=true --release

📌 作成された aab ファイルの保存場所

android/app/build/outputs/bundle/productionRelease/app-production-release.aab

📌 Staging 用の aab ファイル(内部テスト用)

android/app/build/outputs/bundle/stagingRelease/app-staging-release.aab

コマンドまとめ

📌 コマンド一覧

ビルド目的 ビルドモード 環境 Android コマンド iOS コマンド
開発用デバッグ(Staging) Debug Staging flutter run --flavor staging --dart-define=PRODUCTION=false flutter run --dart-define=PRODUCTION=false
本番環境デバッグ(Production) Debug Production flutter run --flavor production --dart-define=PRODUCTION=true flutter run --dart-define=PRODUCTION=true
社内テスト・内部テスト(Staging) Release Staging flutter build apk --flavor staging --dart-define=PRODUCTION=false --release flutter build ios --dart-define=PRODUCTION=false
本番リリース(Production) Release Production flutter build apk --flavor production --dart-define=PRODUCTION=true --release flutter build ios --dart-define=PRODUCTION=true
Google Play 内部テスト用(Staging) Release Staging flutter build appbundle --flavor staging --dart-define=PRODUCTION=false --release N/A
Google Play 本番公開用(Production) Release Production flutter build appbundle --flavor production --dart-define=PRODUCTION=true --release N/A
App Store / TestFlight アップロード(Staging) Release Staging N/A flutter build ipa --dart-define=PRODUCTION=false --release
App Store / TestFlight アップロード(Production) Release Production N/A flutter build ipa --dart-define=PRODUCTION=true --release

補足

📌 1️⃣ Debug(デバッグ)と Release(リリース)の違い

これは Flutter のビルドモード であり、アプリの最適化レベルやデバッグ機能の有無 を決めます。

モード 目的 特徴 主な用途
Debug 開発・デバッグ用 - ホットリロードが可能
- assert() が動作
- 開発ツール(DevTools)が利用可能
- 最適化されていないので動作が遅い
- 開発時の動作確認
- デバッグ作業
Release 本番リリース用 - 最適化されており動作が速い
- assert() は無効
- デバッグ情報なし(クラッシュログが少なくなる)
- アプリサイズが小さくなる
- 本番環境のビルド
- Google Play / App Store にアップロード

📌 ポイント

  • flutter run のデフォルトは Debug モード
  • flutter build apk / ios / appbundle のデフォルトは Release モード
  • --release を付けると Release ビルドになる

📌 2️⃣ Staging(開発環境)と Production(本番環境)の違い

これは アプリが接続する Firebase や API サーバーの違い です。

環境 目的 特徴 主な用途
Staging 開発・テスト用 - Firebase / API も開発用の環境を使用
- 開発チームやテスターが使用
- Google Play 内部テストや TestFlight に配布可能
- 社内テスト・QAテスト
- ストア公開前の最終チェック
Production 本番リリース用 - 一般ユーザーが使用する環境
- Firebase / API も本番用を使用
- 本番リリース版
- ユーザーに提供するアプリ
- Google Play / App Store への公開

📌 ポイント

  • Staging は開発チームやテスター向けの環境(本番と同じ設定で動作確認)。
  • Production は一般ユーザー向けの環境(本番用 Firebase / API を使用)。
  • Staging と Production で Firebase や API のエンドポイントを切り替えることが重要

📌 3️⃣ Debug / Release × Staging / Production の組み合わせ

Flutter では 「ビルドモード(Debug / Release)」と「環境(Staging / Production)」を組み合わせて使う のが一般的です。

目的 ビルドモード 環境 用途
開発中にデバッグ Debug Staging ホットリロードしながら開発
本番リリース前のテスト Release Staging ストアにアップロードする前の動作確認
ユーザー向け本番リリース Release Production Google Play / App Store に公開

📌

  • 開発時flutter run --flavor staging --dart-define=PRODUCTION=false
  • 本番ビルド時flutter build appbundle --flavor production --dart-define=PRODUCTION=true --release

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?