はじめに
モバイルコースのyoです。
今回は、Flutterの.envに関するエラーで休日が半分潰れてしまったため、そのエラーの解決方法について記録を残しておきます。
エラー
GitHub Actionsを用いてコードチェックを行なっているFlutterプロジェクトにおいて、dotenvを用いて.env(.gitignoreに追加)を読み取る処理を書いたところ、ローカルのFlutterプロジェクト上では問題がなかったにも関わらず、GitHub Actionsで以下のようなwarningが吐かれるようになりました。
warning • The asset file '.env' doesn't exist • pubspec.yaml:38:7 • asset_does_not_exist
原因
Gitの管理下から外している.envがリモートリポジトリ上に存在しないため。
解決策
リモートリポジトリ上に.envを作成してしまえば良い。GitHub Actionsとファイル作成のコマンドを組み合わせることにより、.envをGitの管理下から外したままリモートリポジトリ上に作成できる。
Actions secrets and variablesに環境変数を追加
まず、Actions secrets and variablesに.envの中身の環境変数を登録する必要があります。
これを行うことにより、リモートリポジトリに外部から自由に閲覧できない環境変数を追加することができます。
GitHubのリポジトリからSettings→Secrets and variables→Actionsを開いてください。
Settingsが表示されない場合はリモートリポジトリ作成者に招待してもらってください。
Actions secrets and variablesの画面が開けたら、Repository secretsのNew repository secretをクリックしてください。
そこで、ローカルリポジトリの.envにある環境変数の中身を書いていきます。
今回は、CLIENT_IDとCLIENT_SECRETの環境変数の値を入力し、Add secretをクリックして追加してみます。
スクショにあるVALUEの部分は実際の値に置き換えてください。
これで、リモートリポジトリに環境変数を追加できました。
GitHub Actionsにenvファイル作成コマンドを追加
GitHub Actionsでコードチェックを実行する前に、リモートリポジトリ上でenvファイルを作成するコマンドを追加します。リモートリポジトリ名/.github/workflows/flutter.yml
に以下のようなflutter.ymlがあったとします。
name: Check and analyze the source code
on:
pull_request:
branches:
- main
jobs:
test:
name: Check the source code
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.3.0
with:
flutter-version: '3.16.9'
- name: Install dependencies and analyze project source
run: |
for d in */ ; do
cd $d
flutter pub get
flutter analyze
cd ..
done
これに次の行を追加します。
- name: Create .env
run: echo "CLIENT_ID=${{ secrets.CLIENT_ID }}" >> .env
&& echo "CLIENT_SECRET=${{ secrets.CLIENT_SECRET }}" >> .env
今回は、CLIENT_IDとCLIENT_SECRETを例として扱っていますが、それ以外の環境変数を追加した場合、CLIENT_IDとCLIENT_SECRETの部分を登録した環境変数に置き換えてください。
また、リポジトリ内に複数プロジェクトが含まれているなど、.envの配置がリポジトリのルートディレクトリ直下ではない場合、.envの部分を<ディレクトリ名>/.envなどのように置き換え、パスを指定してください。
すると、追加後のflutter.ymlはこんな感じになります。
name: Check and analyze the source code
on:
pull_request:
branches:
- main
jobs:
test:
name: Check the source code
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2.3.0
with:
flutter-version: '3.16.9'
- name: Create .env
run: echo "CLIENT_ID=${{ secrets.CLIENT_ID }}" >> .env
&& echo "CLIENT_SECRET=${{ secrets.CLIENT_SECRET }}" >> .env
- name: Install dependencies and analyze project source
run: |
for d in */ ; do
cd $d
flutter pub get
flutter analyze
cd ..
done
最後に
ここまで完了すると、GitHub Actionsのコードチェック前に、Actions secrets and variablesの環境変数を元にリモートリポジトリ上でも.envが作成されるため、warning • The asset file '.env' doesn't existのwarningが表示されなくなるはずです。