direnvを使うときは環境変数を.envrcに書くより.envに書いた方が使い勝手が良い

2 min read | #direnv #環境変数 #OSS

こんにちは、@p1ass です。
自分はローカル開発時に、環境変数を設定するために direnv を使っています。 その際に、環境変数を.envrcに書くより、.envに書いた方が諸々の使い勝手が良いと感じたので紹介します。

tl;dr

そもそも 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に環境変数の設定をまとめることで、いい感じに色々な場面で使い回すことができます。
同じ環境変数を複数箇所で書いていた方は一度試してみてはどうでしょうか?

Top