flutter_flavorizrで開発環境と本番環境に分ける

Flutterアプリ開発で開発環境と本番環境を分ける必要が出てきたため、flutter_flavorizrを導入しました。

## 環境・バージョン
VS Code使用
flutter_flavorizr 2.1.3

記事を書いている時点での最新バージョンを導入しました。


## 参考
https://pub.dev/packages/flutter_flavorizr

公式サイトを参考にしました。


## 手順
まずはパッケージをpubspec.yamlに追加します。

```yaml:pubspec.yaml
dev_dependencies:
  flutter_flavorizr: ^2.1.3
```

さらにプロジェクトに導入したい環境を追記します。今回はdev（開発環境）とprod（本番環境）を作成します。

```yaml:pubspec.yaml
flavorizr:
  app:
    android:
      flavorDimensions: "flavor-type"
    ios:
  flavors:
    dev:
      app:
        name: "app name(dev)"
      android:
        applicationId: "com.example.appname.dev"
      ios:
        bundleId: "com.example.appname.dev"
    prod:
      app:
        name: "app name"
      android:
        applicationId: "com.example.appname"
      ios:
        bundleId: "com.example.appname"
```

※appnameにはアプリ名が入ります
※exampleには組織名が入ります

もろもろの設定が書けたら、下記コマンドを実行します。

```
flutter pub run flutter_flavorizr
```

色々なファイルが自動作成・変更されます。

```
android/app/build.gradle
android/app/src/main/AndroidManifest.xml
ios/Runner.xcodeproj/project.pbxproj
ios/Runner/Info.plist
android/app/src/dev/
android/app/src/prod/
ios/Flutter/devDebug.xcconfig
ios/Flutter/devProfile.xcconfig
ios/Flutter/devRelease.xcconfig
ios/Flutter/prodDebug.xcconfig
ios/Flutter/prodProfile.xcconfig
ios/Flutter/prodRelease.xcconfig
ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme
ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme
ios/Runner/Assets.xcassets/devAppIcon.appiconset/
ios/Runner/Assets.xcassets/devLaunchImage.imageset/
ios/Runner/Assets.xcassets/prodAppIcon.appiconset/
ios/Runner/Assets.xcassets/prodLaunchImage.imageset/
ios/Runner/devLaunchScreen.storyboard
ios/Runner/prodLaunchScreen.storyboard
lib/app.dart
lib/flavors.dart
lib/main_dev.dart
lib/main_prod.dart
lib/pages/
```

色々なファイルが変更されたり、main_dev.dartやmain_prod.dartなどが自動生成されて、取り回ししづらくなるのが嫌な人はdart-defineを使って環境を分ける方法もあります。

https://zenn.dev/riscait/articles/separating-environments-in-flutter

アプリを実行するときは、下記コマンドを実行します。
<flavorName>には、先程作成した環境（devやprodなど）が入ります。

```
flutter run --flavor <flavorName> -t lib/main_<flavorName>.dart
```

https://qiita.com/kogepan159/items/eade1c9d3049b0d9a4d9

下記、prodで実行した結果です。
きちんと環境が分けられているのが分かります。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3333333136312f63316636353832612d373163622d316361352d363934302d3039323231376539353166612e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333161/aeed0a78-8dd4-cb02-02a0-02c157be6ac5.png)

ただこのままだと、いちいちアプリを実行するのにコマンドを打たなければいけません。環境を分ける前のようにF5キーを入力してアプリを実行するには、launch.jsonを作成し設定をする必要があります。

https://riscait.medium.com/if-youve-created-a-flavor-environment-in-flutter-edit-the-launch-json-in-vs-code-acfc9d6313a9

launch.jsonを.vscodeフォルダ内に作成します。.vscodeフォルダがない場合はプロジェクトのルートに作成してください。


```
touch .vscode/launch.json
```

下記、設定の内容です。

```json:.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flutter Debug-Development",
            "request": "launch",
            "type": "dart",
            "program": "lib/main_dev.dart",
            "args": [
                "--debug",
                "--flavor",
                "dev",
            ]
        }
    ]
}
```

これでF5キーを押すだけで開発環境でビルドできるようになりました。本番環境でビルドしたい場合はlaunch.jsonに本番用ビルドの設定を書き加えて必要に応じて切り替えてください。