📱

flutter_flavorizrでフレーバーを生成する際の注意点

2024/10/18に公開

概要

Flutterでスマホアプリを開発中なのですが、環境ごとに異なる設定を適用したいシーンがあります。例えば、開発環境、ステージング環境、本番環境で、それぞれに異なるAPIエンドポイントを設定したい場合などです。flutter_flavorizrというパッケージを使って実現しているのですが、少し注意ポイントがありましたので、まとめておきたいと思います。

flutter_flavorizrとは

複数の「フレーバー」を使い分けるためのツールです。フレーバーとは、アプリのビルド設定を環境ごとにカスタマイズするための仕組みで、iOSとAndroidの両方でそれぞれのフレーバーを設定することが可能です。このツールを使うことで、ビルド時に適切な環境設定を適用し、簡単に環境ごとにアプリをビルドできるようになります。

便利な点

flavorizr.yamlファイルに環境ごとに分けたい設定を記載しておくだけで、以下のコマンドを実行すると、さまざまなファイルを一度に生成してくれます。

dart run flutter_flavorizr

※公式ドキュメントには flutter pub run flutter_flavorizr と書いてありますが、非推奨となったようです。

また、以下のようにプロセッサセットを指定して、指定したものだけを生成することもできます。

dart run flutter_flavorizr -p android:icons,ios:icons

flavorizr.yamlにフレーバーとして dev, stg, prd を定義して、dart run flutter_flavorizr を実行すると以下のdartファイルも生成してくれます。

  • app.dart
  • flavors.dart
  • main_dev.dart
  • main_stg.dart
  • main_prd.dart
  • main.dart

フレーバーを実行する際は、エントリーファイルがフレーバーごとに分けられていますので、 dev フレーバーを実行したかったら以下のように -t オプションでファイルを指定して実行するように起動コマンドを変えるだけです。

flutter run --flavor dev -t lib/main_dev.dart

注意ポイント

作成されたdartファイルの内容は大変参考になるので、導入が簡単でいいなと思ったのですが、その後に、プロダクト仕様に合わせてファイルを修正した後、もう一度 dart run flutter_flavorizr を実行したら、上記のdartファイルがまた新規で作り直され、修正内容がリセットされてしまいました。
なるほど初回の生成は嬉しいが、2回目以降の再生成は嬉しくないな・・・・と思いまして、2回目以降はこれらdartファイルの生成だけは除外してスクリプトを実行したいなぁと思ったのですが、excludeのようなオプションはないらしく、除外設定はできないらしいです。

解決策

パッケージのドキュメントの[Default processors set]のセクションに記載があるのですが、生成スクリプトはプロセッサセットの指定がない場合はデフォルトで以下のプロセッサセットが実行されるようです。

assets:download
assets:extract
android:androidManifest
android:buildGradle
android:dummyAssets
android:icons
flutter:flavors
flutter:app
flutter:pages
flutter:main
flutter:targets
ios:podfile
ios:xcconfig
ios:buildTargets
ios:schema
ios:dummyAssets
ios:icons
ios:plist
ios:launchScreen
macos:podfile
macos:xcconfig
macos:configs
macos:buildTargets
macos:schema
macos:dummyAssets
macos:icons
macos:plist
google:firebase
huawei:agconnect
assets:clean
ide:config

そしてこのデフォルトのプロセッサセットは、flavorizr.yamlで変えることができます。
生成を抑制したいdartファイルに関わるプロセッサセットは以下です。

flutter:flavors
flutter:app
flutter:pages
flutter:main

flutter:pages も、flavors.dartファイルの使い方を示すためのサンプルページの生成なので、後に不要になります。

以下のように、flavorizr.yamlファイルに instructions を追加し、必要なプロセッサセットのみを記載(不要な行をコメントアウト)することで、オプションを指定せずに生成スクリプトを実行しても、不要なプロセッサセットを除外することができました。

flavorizr.yaml
flavors:
  dev:
    ...
  stg:
    ...
  prd:
    ...
instructions: [
  "assets:download",
  "assets:extract",
  "android:androidManifest",
  "android:buildGradle",
  "android:dummyAssets",
  "android:icons",
  #"flutter:flavors",
  #"flutter:app",
  #"flutter:pages",
  #"flutter:main",
  "flutter:targets",
  "ios:podfile",
  "ios:xcconfig",
  "ios:buildTargets",
  "ios:schema",
  "ios:dummyAssets",
  "ios:icons",
  "ios:plist",
  "ios:launchScreen",
  "macos:podfile",
  "macos:xcconfig",
  "macos:configs",
  "macos:buildTargets",
  "macos:schema",
  "macos:dummyAssets",
  "macos:icons",
  "macos:plist",
  "google:firebase",
  "huawei:agconnect",
  "assets:clean",
  "ide:config"
]

まとめ

flutter_flavorizrの生成スクリプト実行時における、注意点と解決策をまとめました。

レスキューナウテックブログ

Discussion