direnv とは
direnvはディレクトリごとに異なる環境を設定できるツールです。direnvを使用することで、ディレクトリに移動するたびに、そのディレクトリに対して指定された環境変数、エイリアス、コマンド、シェル関数を自動的に設定することができます。これにより、プロジェクトごとに必要な環境を簡単に切り替えることができます。
direnvは.envrc
というファイルを使用して、ディレクトリに対する環境を設定します。.envrc
ファイルは、direnvがcd
コマンドで移動したときに読み込まれ、そのディレクトリに対する環境を設定します。
以下は.envrc
ファイルの例です。
# environment variable
export MY_VAR=example_value
export PATH=$PWD/bin:$PATH
# alias
alias ll='ls -l'
# shell function
function my_function() {
echo "Hello, World!"
}
この例では、MY_VAR
という環境変数を定義し、$PATH
に$PWD/bin
を追加しています。また、ll
というエイリアスを定義し、my_function
というシェル関数を定義しています。このように、プロジェクトごとに異なる環境を簡単に設定できます。
direnv の使い方
direnvの使い方を紹介します。
インストール
Macの場合はbrew
コマンドで簡単にdirenvをインストールすることができます。
$ brew install direnv
direnvのインストール後、シェルにhookを追加します。bashの場合は次のコマンドを実行します。
$ echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
$ source ~/.bashrc
allow
direnv allow
コマンドで.envrc
ファイルを読み込みます。
例えば/my-project
ディレクトリで次のような.envrc
ファイルを作成します。
export TEST=test
次のコマンドを実行します。
$ direnv allow
direnv: loading ~/my-project/.envrc
direnv: export +TEST
/my-project
ディレクトリ下ではTEST
という環境変数が設定されるようになります。
$ echo $TEST
test
/my-project
ディレクトリから移動するとdirenvがアンロードされます。
$ cd ..
direnv: unloading
TEST
という環境変数の設定が解除されていることが分かります。
$ echo $TEST
その他のコマンド
direnvはallow
コマンド以外にいくつかのコマンドが存在します。詳細はdirenv --help
コマンドで確認することができます。
$ direnv --help
direnv v2.32.2
Usage: direnv COMMAND [...ARGS]
Available commands
------------------
allow [PATH_TO_RC]:
permit [PATH_TO_RC]:
grant [PATH_TO_RC]:
Grants direnv permission to load the given .envrc or .env file.
block [PATH_TO_RC]:
deny [PATH_TO_RC]:
revoke [PATH_TO_RC]:
Revokes the authorization of a given .envrc or .env file.
edit [PATH_TO_RC]:
Opens PATH_TO_RC or the current .envrc or .env into an $EDITOR and allow
the file to be loaded afterwards.
exec DIR COMMAND [...ARGS]:
Executes a command after loading the first .envrc or .env found in DIR
fetchurl <url> [<integrity-hash>]:
Fetches a given URL into direnv's CAS
help [SHOW_PRIVATE]:
shows this help
hook SHELL:
Used to setup the shell hook
prune:
removes old allowed files
reload:
triggers an env reload
status:
prints some debug status information
stdlib:
Displays the stdlib available in the .envrc execution context
version [VERSION_AT_LEAST]:
prints the version or checks that direnv is older than VERSION_AT_LEAST.
.env と.envrc を併用
docker-composeや dotenv では.env
というファイルにより環境変数を設定します。
.env
と.envrc
を併用したい場合に、次のような方法で環境変数の2重管理を避けることができます。
環境変数の定義は.env
に書きます。
API_KEY=xxxxxxxxxxxxxxxxxxxx
.envrc
にdotenv
と記述すると、.envrc
で.env
に定義されている環境変数を参照することができます。
dotenv
ファイル名が.env
ではない場合は次のようにパスを指定することもできます。
dotenv ./.env.development
venv と.envrc を併用
direnvをPythonのvenv
と併用することで、プロジェクトディレクトリへ移動したときに仮想環境をactivateし、そのディレクトリを抜けると自動でdeactivateさせることができます。
まずはPythonの仮想環境を作成します。
$ cd my-project
$ python -m venv venv
プロジェクトディレクトリ配下に次のような.envrc
を作成します。
source venv/bin/activate
export PYTHONPATH=${APP_HOME}
export HOGE='HOGE'
export FUGA='FUGA'
対象のディレクトリに移動すると仮想環境がactivateされます。
$ cd my-project
direnv: loading ~/Projects/my-project/.envrc
direnv: export +BAR +FOO ~PYTHONPATH
(venv)$
ディレクトリを抜けると仮想環境がdeactivateされます。
(venv)$ cd ..
direnv: unloading
$
参考