Flutter で環境を分ける方法
はじめに
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
インストール
-
pubspec.yaml
のdev_dependencies
に以下を追記します。
flutter_flavorizr: ^2.0.0
-
pub get
を実行します。
使い方
-
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を入力"
- 以下コマンドを実行すると iOS では xcconfig や xcscheme、Android では build.gradle に productFlavors が自動追加されます。
flutter pub run flutter_flavorizr
- 上記コマンドで各 flavor に対応した
main-{flavor名}.dart
が lib 配下に作成されているはずなので、Android Studio であれば、実行するファイルなどを設定する Run -> Edit Configurations から設定を開きます。 - Dart entrypoint に実行する flavor の
main-{flavor名}.dart
のパスを指定し、Build flavor には flavor名を指定します。名前は任意のものでOKです。
- 実行したい 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 の開発では必須になってくるようなツールだと思います。
参考
Discussion