はじめに
APIキーなど、Gitで管理したくない場合や、環境によって値が変わる情報は、環境変数で管理するのがベターです。今回はその方法をご紹介します。
IDEはVSCode、CI/CDにGithubActionsの利用を想定しています。
パターン
環境変数を取得する場合、取得する場所によって定義方法が変わります。
取得するパターンとしては以下の通り。
- Dartから利用する場合
- Android、iOSで利用する場合
前準備
- Github Actionsで利用する環境変数をリポジトリの「Settings」→「Secrets」で登録しておきます。
Dartで利用する
設定編
ローカル環境(VSCode)で設定する
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "flutter_mobile",
"program": "lib/main.dart",
"request": "launch",
"type": "dart",
"args": [
"--dart-define=API_KEY=<値>"
]
}
]
}
Github Actionsで設定する
「Secrets」で登録した変数は、 ${{secrets.<変数名>}}
で取得できます。
.github/workflows/deploy.yml(抜粋)
steps:
- name: build
run: flutter build apk --dart-define=API_KEY=${{secrets.API_KEY}}
取得編
dart
String.fromEnvironment("API_KEY");
Android、iOSで利用する
設定編
ローカル環境(VSCode)で設定する
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "flutter_mobile",
"program": "lib/main.dart",
"request": "launch",
"type": "dart",
"env":{
"API_KEY": "<値>"
},
}
]
}
Github Actionsで設定する
.github/workflows/deploy.yml(抜粋)
steps:
- name: build
env:
API_KEY: ${{secrets.API_KEY}}
run: flutter build apk
取得編
Androidで取得する
build.gradle
System.getenv('API_KEY')
AndroidManifest.xmlで取得したい場合、build.gradleにビルド変数を定義し、そこから取得する必要があります。
build.gradle
android {
・・・
defaultConfig {
・・・
// manifestPlaceholdersを利用して、環境変数から取得した値を任意の変数で定義する
// ビルド変数名と環境変数名は同じになっていますが、異なっていても問題ないです。
manifestPlaceholders = [API_KEY: System.getenv('API_KEY')]
}
次にAndroidManifest.xmlにbuild.gradleに定義したビルド変数を取得します。
AndroidManifest.xml
<application
android:name="io.flutter.app.FlutterApplication"
android:label="flutter_mobile"
android:icon="@mipmap/ic_launcher">
<meta-data
android:name="API_KEY"
android:value="${API_KEY}"/> <!-- ${ビルド変数名}でビルド変数の値を取得できる -->
iOSで取得する
swift
ProcessInfo.processInfo.environment["API_KEY"]