実装に至る経緯
E2Eのplaywrightでテストを実装している際に、ログイン処理を書く必要がありました。ただログイン情報(メールアドレス・パスワード)をそのままテストファイルに書くのもセキュリティ的に良くなかったので、ログイン情報を非公開ファイル扱いとしてそこに定義した環境変数をコンテナに渡してアプリケーション側(Node.js)から参照する方法を取りました。以下にその手順を記載していきます。
.envファイルを用意
まず.envファイルを用意します。これは環境変数を定義しておく為のファイルで、ここにログインに必要な情報を記載していきます。
MAIL_ADDRESS=xxxxx.jp
LOGIN_PASSWORD=xxxxx
.envファイルはdocker-compose.ymlと同階層にあれば、勝手に参照されるので必ず同階層に置くようにしてください。
docker-compose.ymlにコンテナ側から参照できる環境変数を定義する
environment:
MAIL_ADDRESS: $MAIL_ADDRESS
LOGIN_PASSWORD: $LOGIN_PASSWORD
.envファイルに定義した環境変数がコンテナ内部からも参照できるように、compose.ymlに上記の定義を加えました。こうすることでアプリケーション側(Node.js)からも参照することができるようになります。
後はコンテナに渡された環境変数を参照するだけ
playwrightのテストはNode.jsのスクリプトとして実行されますが、Node.jsで環境変数を参照する為には'process.env'を使用します。
await page.getByRole('textbox', {name: 'email'}).fill(process.env.MAIL_ADDRESS);
await page.getByPlaceholder('password').fill(process.env.LOGIN_PASSWORD);
上記ではメールアドレス・パスワードをそれぞれformに入力するスクリプトを書いているのですが、それぞれのfillコマンドで環境変数に定義された値を詰めています。これでログイン情報を直接テストファイルに書くことなく、テストを実行できるようになりました。
終わりに
以上が(.envファイル => docker-compose.yml => コンテナ)と環境変数を渡して、Node.js側から参照するまでの流れでした。処理の流れとしては非常に簡単なので、手順さえ覚えてしまえばどなたでも使えるはずです。参考になれば幸いです。