採用はこちら!

Shinonome Tech Blog

株式会社Shinonomeの技術ブログ
2 min read

【GitHub Actions】warning • The asset file '.env' doesn't existの原因と解決方法

GitHub Actionsのコードチェックでwarning • The asset file '.env' doesn't existが表示される場合の原因と解決方法をまとめました。

はじめに

モバイルコースの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が表示されない場合はリモートリポジトリ作成者に招待してもらってください。

スクリーンショット 2024-03-29 10.34.52.png

Actions secrets and variablesの画面が開けたら、Repository secretsのNew repository secretをクリックしてください。

スクリーンショット 2024-03-29 10.38.06.png

そこで、ローカルリポジトリの.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が表示されなくなるはずです。