direnvはシェルの拡張です。 現在のディレクトリによって、環境変数の読み込みないし読み戻しをする新しい機能で、既存のシェルを拡張します。
各プロンプトの前に、現在のディレクトリとその上位のディレクトリの.envrcファイル(と任意で.envファイル)の存在がdirenvにより確認されます。 ファイルが存在するとき(かつ権限があるとき)、bashの副シェルに読み込まれ、全てのエクスポートされた変数がdirenvに捕捉されて、現在のシェルで使えるようになります。
bash、zsh、tcsh、fishといった全ての一般的なシェルのフックに対応しています。 これにより、~/.profileファイルを散らかすことなく、プロジェクト固有の環境変数が使えます。
direnvは単一の静的実行ファイルにコンパイルされるため、プロンプトが表示されるとき、存在を感じさせない程度には高速です。 また言語に依らないため、rbenv、pyenv、phpenvに似たソリューションの構築に使えます。
それからシェルを再起動させてください。
direnvがインストールされたら、シェルで以下をやってみましょう。
# デモ用に新しいフォルダを作ります。
$ mkdir ~/my-project
$ cd ~/my-project
# FOO環境変数が読み込まれていないことを確かめます。
$ echo ${FOO-nope}
nope
# 新しく.envrcを作ります。このファイルはbashのコードで、direnvにより読み込まれます。
$ echo export FOO=foo > .envrc
.envrc is not allowed
# 安全上の仕組みにより、.envrcの読み込みが許可されませんでした。
# ここでは信頼できるため、実行を許可しましょう。
$ direnv allow .
direnv: reloading
direnv: loading .envrc
direnv export: +FOO
# FOO環境変数が読み込まれたことを確かめます。
$ echo ${FOO-nope}
foo
# プロジェクトを出ます
$ cd ..
direnv: unloading
# するとFOOは再び未設定になりました
$ echo ${FOO-nope}
nope
手作業で変数をエクスポートするのは、ちょっとした作業の繰り返しになってしまいます。 そこでdirenvでは、いろいろな補助関数が提供されており、.envrcファイルの文脈で使えるようになっています。
例えば、PATH_add関数は$PATH環境変数にパスを拡張したり、前置したりするのに使います。 export PATH=$PWD/bin:$PATHとする代わりに、PATH_add binと書けます。 こちらの方が短く、$PATH=binのようなよくある誤りを避けられます。
使える全ての関数の文書については、direnv-stdlib(1)のmanページをご確認ください。
~/.config/direnv/direnvrcや~/.config/direnv/lib/*.shにbashファイルを作ると、自分だけの拡張を作ることもできます。 このファイルは.envrcより前に読み込まれるため、direnvに独自の拡張を作ることができるようになっているのです。
なお、この機能は.envファイルでは対応していません。両方を共存させる必要があるときは、.envrcの標準ライブラリを活用し、末尾にdotenvを付けることで、次にdirenvに.envも読むよう伝えられます。
Make sure to take a look at the wiki! It contains all sorts of useful information such as common recipes, editor integration, tips-and-tricks.
GitHubの質問のやり取りに基づいたところ、利用者が混乱しがちなことの上位にくるものとして以下があります。
direnvには関数の標準ライブラリがあります。 これは補助機能の集まりであり、あって便利だと気付いて長年にわたって蓄積してきたものです。 https://github.com/direnv/direnv/blob/master/stdlib.sh にあります。
~/.config/direnv/direnvrcにbashファイルを追加して、自分だけの関数の集まりで標準ライブラリを上塗りすることができます。 このファイルが読み込まれると、その内容は任意の.envrcファイルで使えるようになります。
direnvは、現在のシェルに.envrcを読み込みません。 新しいbashの副プロセスを作り、標準ライブラリ、direnvrc、.envrcを読み込んで、環境の差分を元のシェルに送り返すだけです。 これにより、direnvは環境の変更を正確に記録することができ、また全ての種類のシェルで動作します。 また、エイリアスと関数は現時点でエクスポートできないということでもあります。
不具合の報告、貢献やフォークは歓迎します。 不具合やその他の議論は全て、 http://github.com/direnv/direnv/issues でされています。
もしくは、チャットをする際はMatrixにお立ち寄りください。 質問するときは、全員が一日中アクティブではないため、回答が返ってくるまでしばらく待ってみてください。
テストを実行するには、次のコマンドを使ってください(homebrewをインストールする必要があるかもしれません)。
brew bundle
make test
以下は、direnvを使う場合に見てみると良さそうなプロジェクトの一覧です。
use_nixの実装をさらに向上させる、様々なプロジェクトがあります。ご自由にお選びください。以下は、同じ設計の領域にある他のプロジェクトの一覧です。 新しいものがあったら遠慮なくご提案ください。
.envrcファイルの読込器で、シェルにフックを掛けません。利便性と引き換えに速度に長けています。ヘルプやカスタマイズをお求めですか?
お見積もりはNumtideまでご連絡ください。 我々は企業がオープンソースプロジェクトと協働しやすくなるようにしています:https://numtide.com/contact
MIT licence - Copyright (C) 2019 @zimbatm と貢献者の方々
この日本語訳の原文はdirenvです。
本文書の使用許諾は原文に従います。 翻訳の著作情報は以下の通りです。
MIT licence - Copyright (C) 2026 @gemmaro