direnvとは?
ディレクトリ毎に環境変数を定義して、そのディレクトリがカレントになった時だけ環境変数を有効/無効にしてくれるツール。開発中のアプリ毎に環境変数を変えたい時に重宝する。
リポジトリはこちら
https://github.com/direnv/direnv
direnvは今話題のgoで作成されているみたいですね。
インストール方法
git clone https://github.com/direnv/direnv
cd direnv
sudo make install
Mac上でHomebrewを利用しているのであれば、brew install direnv
でいいです。
shellにhookを追加する
bash
export EDITOR=お使いのエディタ
eval "$(direnv hook bash)"
zsh
export EDITOR=お使いのエディタ
eval "$(direnv hook zsh)"
fish
set -x EDITOR お使いのエディタ
eval (direnv hook fish)
使い方
環境変数を設定したいディレクトリにcdし、
direnv edit .
すると、カレントディレクトリに .envrc
が作成され、下記のように設定した環境変数が追記/削除されます。
# ここで設定したTESTはカレントディレクトリ配下のみ有効にできる
export TEST=test
# 上位フォルダで設定した環境変数の削除(unset)もできる
unset ABC
.envrc
は bash
で評価される点は注意してください。(fishを使っててもbashの記法で環境変数を指定します)
例えばカレントの"bin"をPATHに追加したいのであれば、下記のように環境変数を宣言しましょう。
export PATH=bin:$PATH
または、ショートカットで指定できます。
PATH_add bin
自動的に環境変数が読み込まれます。
direnvにはその他便利な関数が定義されています。詳しくは direnv stdlib を見てみてください。
エラーが発生する場合
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
というエラーが発生する場合は(エラーメッセージにある通り)以下のコマンドを実行してください。
direnv allow
注意: .envrcをリポジトリにコミットしないように注意しましょう
このファイルをリポジトリに追加し、githubにpushしてしまうと環境変数に設定したパスワード等が漏れてしまいます。こちらのQiitaを参考にシステム全体で.envrcをコミットできないよう、gitignoreを設定するか、.gitignore
に.envrc
を追加する、また、git-secretsを設定しておくことをオススメします。