こんにちは、@p1assです。
自分はローカル開発時に、環境変数を設定するために direnv を使っています。
その際に、環境変数を.envrc
に書くより、.env
に書いた方が諸々の使い勝手が良いと感じたので紹介します。
tl;dr
.env
は汎用性が高いので様々な用途で使い回せる。.envrc
にdotenv
と記述するだけで、自動的に.env
ファイルを読み込んでくれるので楽。
そもそも direnv とは
direnv はディレクトリごとに環境変数を設定することができるツールです。
.zshrc
などにeval "$(direnv hook zsh)"
と書くことで、カレントディレクトリに存在する.envrc
に書かれたスクリプトを実行してくれます。
例えば、次のように.envrc
を記述することで、HOGE
という環境変数を設定することができます。
export HOGE=hogehoge
これが direnv の README に書かれている使い方です。
direnv で.env
を読み込む
さて、環境変数をファイルで管理する際に、次のような書式で書かれた.env
ファイルが使われることがあります。
HOGE=hogehoge
FUGA=fugafuga
.envrc
と違ってexport
は書かず、単にKEY=VALUE
という形になっています。
direnv では.envrc
を以下のように記述することで、 .env
ファイルを読み込むことができる うになります。
dotenv
.env
に書くことで何が嬉しいのか
.env
は汎用性が高いフォーマットであり、様々な場面で流用することができます。
1 つ目の例として、docker-compose が挙げられます。
docker-compose は以下のように書くことで、コンテナ内に環境変数を流し込むことができます。
その際のフォーマットが.env
と一致しています。
version: "3"
services:
hoge:
image: python
restart: always
env_file: .env
これにより、「ずっとコンテナ内で開発してたけど、ローカルで試したいな」と思った時に、(少なくとも環境変数は)楽に移行できます。
2 つ目は、エディターのエクステンションと相性が良い点です。
私は JetBrains 製の IDE を愛している人間 のですが、IDE でコンパイル・実行するときにdirenv
のフックを発火してくれません。
そのため、環境変数は別の手段で読み込む必要があります。
幸いにも JetBrains Plugins には、.env
ファイルを読み込んでくれるプラグインがあるため、正しく環境変数を読み込むことができます。
このように.env
に環境変数の設定をまとめることで、いい感じに色々な場面で使い回すことができます。
同じ環境変数を複数箇所で書いていた方は一度試してみてはどうでしょうか?