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
、もしくは~/.zshrc
にexport 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
へ