direnv で環境変数を管理する方法

Tadashi Shigeoka ·  Thu, April 4, 2019

direnv で環境変数を管理する方法をご紹介します。

direnv

前提

類似ライブラリ *dotenv

direnv の類似ライブラリとして dotenv 系ライブラリがあります。

direnv のメリット

*dotenv は環境変数を読み込むためにソースコードから明示的に Dotenv.load を呼ぶ必要があります。

direnv はソースコードにわざわざ Dotenv.load を明記しなくてよく、ディレクトリに移動してきたタイミングで自動で有効化してくれるという点がメリットだと考えています。

また、Node.js や Ruby などのプログラミング言語によって *dotenv 系のライブラリを使い分ける必要もなくなる点もメリットです。ちなみに direnv は Go 製です。

direnv インストール

macOS 編

macOS なら Homebrew でインストールするのが楽です。

brew install direnv

shell へ hook 追加

Setup を参考に自分の shell へ hook を追加しましょう。

zsh の場合

自分は zsh を利用しているので zsh の場合を紹介します。

~/.zshrc ファイルに以下のコードを追加するだけで OK です。

eval "$(direnv hook zsh)"

上記追記後に忘れずに source ~/.zshrc もしくは Terminal を開き直しましょう。

新規 .envrc で direnv を使う

direnv edit .

direnv edit .

.envrc ファイルに以下のように load したい環境変数を export で記述します。

# .envrc
export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY

direnv: loading

$ cd /path/to/envrc/dir
direnv: loading .envrc
direnv: export +AWS_ACCESS_KEY_ID +AWS_DEFAULT_REGION +AWS_SECRET_ACCESS_KEY

既存 .envrc で direnv を使う

エラーが出たら direnv allow

direnv: error .envrc is blocked. Run direnv allow to approve its content. というエラーメッセージが表示されたら、エラーメッセージに記載されている通り direnv allow を実行しましょう。

その他 direnv Tips

direnv: unloading

direnv を設定したディレクトリ以下から移動すると、自動で環境変数が unload されます。

$ cd ../
direnv: unloading

以上、direnv で環境変数を管理していきたい、現場からお送りしました。