node.jsの環境変数をdirenvで管理する

bashを使っている場合は、主に.bash_profileや.bashrcに環境変数を設定しますが、開発するアプリ毎に環境変数を変えたい場合では不便

direnvはディレクトリ毎に環境変数を定義できる

direnv

GitHub - direnv/direnv: unclutter your .profile
unclutter your .profile. Contribute to direnv/direnv development by creating an account on GitHub.

インストール

$ git clone https://github.com/direnv/direnv
$ cd direnv
$ sudo make install

Homebrewを利用している場合は、下記のコードでインストールできる

$ brew install direnv

shellにhookを追加する

これしとかないと動かない

# bash
$ echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
$ source ~/.bashrc
# zsh
$ echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
$ source ~/.zshrc

使い方

$ mkdir ~/project
$ cd ~/project
$
# 環境変数 TEST=salad を設定する
$ echo "export TEST=salad" > .envrc
export TEST=salad .envrc
$
$ direnv allow .
direnv: loading .envrc
direnv: export +TEST
$
$ echo $TEST
salad

この状態で別のフォルダに移動するとTESTが無効になっていることがわかる

$ cd ..
direnv: unloading
$
$ echo $TEST

「別のフォルダに移動すると、」と書きましたが、
下記のような構成になっている場合…

Project
└── dirA
└── dirB
└── dirC
|    └── dirD
└── .envrc

dirB以外にも、dirC, dirDでも有効となる。

ただし、dirC直下に新たに.envrcを配置した場合は、dirC, dirDは新たに配置した方に優先的に従うようになる。

複数の環境変数を設定するときに楽なやり方

~/.bashrc、もしくは~/.zshrcexport EDITOR=vim(お好みのエディタ)を設定し、環境変数を設定したいディレクトリにcd後、

$ direnv edit .
direnv: loading .envrc
direnv: export +NETWORK_GENERATION_HASH +PRIVATE_KEY

で、カレントディレクトリでvim(お好みのエディタ)が開く

あとは、下記のように編集して保存して終了すれば、ok

成功した場合は、上記のように読み込んだ環境変数名が表示される

export NETWORK_GENERATION_HASH=00000000000000000
export PRIVATE_KEY=11111111111111111
# 上位フォルダで設定した環境変数の削除(unset)もできる
unset TEST

トラブルシューティング

  • .envrcに記述している環境変数が有効になっていない!

ディレクトリ構成が間違っていない場合は、大概読み込めてないだけ

$ source ~/.bashrc

これでdirenv: loading .envrcと表示されれば成功

  • エラーがでる
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

このエラーが発生する場合がある

そんなときは、下記のコマンドを実行する

$ direnv allow

最後に

.envrcは忘れずに.gitignore

タイトルとURLをコピーしました