direnvはディレクトリに応じて自動で環境変数を設定してくれるツールです。
今までpythonやnode.jsのCLIツールを作るときはdotenvという類似ツールを使っていましたが、プログラム上で環境変数を記載した設定ファイル読み込む必要があり煩わしさがありました。
direnvはカレントディレクトリに設定ファイルを置くだけで自動的に環境変数を読み込んでくれ、より使い勝手が良さそうなので試してみることにします。
インストール方法
macOSにてHomeBrewを利用している場合は、次のコマンドでインストールできます。
$ brew install direnv
その他のLinux環境にインストールする場合はこちら。
$ git clone https://github.com/direnv/direnv
$ cd direnv
$ sudo make install
インストールが完了した後は自動で読み込むための設定として、~/.bashrc
に設定を追記します。
※zshやfish等を利用している場合は、それぞれ読み替えてください。
$ echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
$ echo 'export EDITOR="/usr/bin/vim"' >> ~/.bashrc
設定が完了したら再読込を行います。
$ source ~/.bashrc
上手くインストールできているか確認してみます。
$ direnv version
2.19.1
direnvについてもっと詳しく知りたい方はGitHubをご覧ください。
使い方
環境変数を設定したい開発環境のディレクトリに移動します。
$ cd ~/my-app/
direnv edit ディレクトリ
コマンドを実行すると設定ファイルを編集するためエディタが起動します。
今回はこのディレクトリ以下にTEST_TOKEN
という環境変数を追加してみます。
$ direnv edit .
# vimが起動するので環境変数を入力
# ex. export TEST_TOKEN=1234567890
# 入力後、エディタを閉じる
direnv: loading .envrc
direnv: export +TEST_TOKEN
追加したTEST_TOKEN
が環境変数として確認できるか確かめてみましょう。
$ env | grep TEST
TEST_TOKEN=1234567890
設定ファイルがあるディレクトリ外に移動すると自動的に読み込みが解除されます。
$ cd ..
direnv: unloading
$ env | grep TEST
# 出力なし
逆に設定ファイルがあるディレクトリに移動すると自動的に読み込まれます。
$ cd my-app/
direnv: loading .envrc
direnv: export +TEST_TOKEN
$ env | grep TEST
TEST_TOKEN=1234567890
設定ファイルは.envrc
というファイル名で作成されます。
重要な設定情報をGitHub等に公開しないように.envrcファイルは.gitignoreでコミット対象外にしておきましょう。
ちなみに直接ファイルを修正することも可能です。
$ vim .envrc
# 下記を追加して保存
# export TEST2=abcde
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
エラーとなるのでメッセージに従ってコマンドを実行すると正常に読み込まれるようになります。
$ direnv allow
direnv: loading .envrc
direnv: export +TEST2 +TEST_TOKEN
$ env | grep TEST
TEST_TOKEN=123456789
TEST2=abcde