📖

Flutter で環境を分ける方法

2021/07/16に公開

はじめに

Flutter で開発する上で開発環境やステージング環境、本番環境といった API などの向き先を環境ごとに設定して切り替えたいというケースがあると思います。手動で Flutter プロジェクト配下の iOS プロジェクトや Android プロジェクトを開いて、Build Configuration や Flavor を設定することも可能ですが、両方行うのは手間がかかりますし、少しややこしい部分もあります。

そこでそんな面倒な作業を肩代わりしてくれる便利なパッケージである Flutter Flavorizr というパッケージの紹介と簡単な使い方を説明します。

Flutter Flavorizr とは

Flutter で環境を分けるための設定を行うパッケージ。iOS でいう Build Configuration や Android でいう Flavor の設定を行ってくれます。

開発環境

  • Flutter 2.2.1
  • AndroidStudio 4.1.3

インストール

  1. pubspec.yamldev_dependencies に以下を追記します。
flutter_flavorizr: ^2.0.0
  1. pub get を実行します。

使い方

  1. pubspec.yaml の一番下に以下のように各環境の設定値を追記します。(以下の例だと Development, Staging, Production の3つを用意)
flavorizr:
  app:
    android:
      flavorDimensions: "flavor-type"
    ios:

  flavors:
    development:
      app:
        name: "Development"

      android:
        applicationId: "ここにdevelopmentの時のアプリケーションIDを入力"

      ios:
        bundleId: "ここにdevelopmentの時のBundleIDを入力"

    staging:
      app:
        name: "Staging"

      android:
        applicationId: "ここにstagingの時のアプリケーションIDを入力"
      ios:
        bundleId: "ここにstagingの時のBundleIDを入力"

    production:
      app:
        name: "Production"

      android:
        applicationId: "ここにproductionの時のアプリケーションIDを入力"
      ios:
        bundleId: "ここにproductionの時のBundleIDを入力"
  1. 以下コマンドを実行すると iOS では xcconfig や xcscheme、Android では build.gradle に productFlavors が自動追加されます。
 flutter pub run flutter_flavorizr
  1. 上記コマンドで各 flavor に対応した main-{flavor名}.dart が lib 配下に作成されているはずなので、Android Studio であれば、実行するファイルなどを設定する Run -> Edit Configurations から設定を開きます。
  2. Dart entrypoint に実行する flavor の main-{flavor名}.dart のパスを指定し、Build flavor には flavor名を指定します。名前は任意のものでOKです。
  3. 実行したい flavor を選択して、実行することで main-{flavor名}.dart が実行されます。

Flutter Flavorizr では flavors.dart も生成されているため、ここから現在の flavor を取得することで flavor ごとに異なる処理をさせるなどは可能です。また、Firebase についてもサポートされているので、環境ごとに Firebase の接続先を設定することも可能なようです。詳しくは Flutter Flavorizr のドキュメントを参考にして下さい。

*iOS の場合、Provisioning Profile などを環境ごとに変える場合は .xcworkspace を開いて手動で変える必要あります。

まとめ

Flutter Flavorizr が出てくる前は環境分けを手動でやっていたのですが、iOS は Xcode で操作して、Android は AndroidStudio で操作して、最後に AndroidStdio で各環境をボタン一発で Run できるよう設定と色々やることがありました。Flutter Flavorizr のおかげでこれらの作業負荷は激減されました。今後 Flutter の開発では必須になってくるようなツールだと思います。

参考

https://pub.dev/packages/flutter_flavorizr

Discussion