direnvの使い方完全ガイド【インストールから応用まで】
開発プロジェクトを進める上で、環境変数の管理は避けて通れません。しかし、その管理方法が原因で、日々の開発体験が大きく損なわれているかもしれません。
1. 環境変数管理の悩みから解放されるdirenvの世界
あなたは複数のプロジェクトを掛け持ちしていますか? 例えば、Python、Node.js、Goといった異なる言語やフレームワークを使うこともあるでしょう。それぞれのプロジェクトには、専用の環境変数やツールパスが必要です。
direnvがない世界
direnvがなければ、こんな状況に陥りがちです。
あるプロジェクトAでは、Pythonの仮想環境を手動でアクティベートし、AWSの認証情報を設定します。その後、別のプロジェクトBに移ると、今度はNode.jsのバージョンを切り替え、異なるAPIキーを設定し直す手間が発生します。
うっかり設定を忘れたり、前のプロジェクトの環境変数が残ったまま作業を進めてしまい、意図しない挙動に悩まされることもあるでしょう。~/.bashrcや~/.zshrcといったシェルの設定ファイルは、プロジェクト固有の環境変数で肥大化していきます。これにより、ファイルの見通しが悪くなり、管理が非常に困難になります。環境変数の設定ミスは、開発速度の低下やデバッグ時間の増加に直結します。
direnvがある世界
direnvを導入すれば、この状況は一変します。
プロジェクトAのディレクトリに入ると、Pythonの仮想環境が自動でアクティベートされ、必要なAWS認証情報が読み込まれます。プロジェクトBのディレクトリに移動すれば、Node.jsのバージョンが自動で切り替わり、適切なAPIキーが設定されます。
これらの切り替えは、あなたがディレクトリを移動するだけで自動的に行われます。プロジェクトを離れると、設定された環境変数は自動的に解除されます。~/.bashrcはクリーンなまま保たれ、プロジェクト固有の設定は各プロジェクトディレクトリ内の.envrcファイルに集約されます。
つまり、direnvは、プロジェクトごとに完全に分離された開発環境を自動で構築し、開発者が環境変数の管理から解放される世界を提供します。
2. direnvとは:30秒でわかる概要とその背景
direnvは、ディレクトリ単位で環境変数を自動的に切り替えるためのシェル拡張ツールです。特定のディレクトリに移動した際に、そのディレクトリに紐付けられた環境変数を自動で読み込み、ディレクトリから離れると解除します。
30秒でわかるdirenvの概要
direnvの核となるのは、プロジェクトディレクトリ内に配置される.envrcというファイルです。このファイルはBashスクリプトとして機能します。direnvは、シェルのプロンプトが表示される前に、カレントディレクトリとその親ディレクトリに.envrcファイルが存在するかをチェックします。もし存在し、かつその実行が許可されていれば、.envrcファイルの内容がBashのサブシェルで実行されます。そこでexportされた変数が、現在のシェルに引き継がれる仕組みです。
これにより、プロジェクト固有の環境変数を、手動で設定し直すことなく、常に最新の状態に保てます。macOSやLinuxなどのUnix系OSで動作し、Bash、Zsh、Fishなど主要なシェルに対応しています。
direnvが誕生した背景
開発者が複数のプロジェクトを扱う際、それぞれのプロジェクトで異なる設定が必要になることが増えました。特に、12 Factor Appのような考え方が広まり、設定情報を環境変数として外部化するプラクティスが一般的になりました。
しかし、これらの環境変数を手動で管理したり、~/.bashrcのようなグローバルな設定ファイルに書き込んだりすると、以下のような問題が生じます。
- 設定ファイルの肥大化: プロジェクトが増えるたびに、シェル設定ファイルが複雑になり、保守が困難になります。
- 環境の衝突: 異なるプロジェクト間で同じ名前の環境変数がある場合、意図しない値が適用されるリスクがあります。
- 手動の手間: プロジェクトを切り替えるたびに、必要な環境変数を設定し直す手間が発生します。
direnvは、これらの問題を解決するために生まれました。rbenvやpyenvといった言語バージョン管理ツールが、言語のバージョンをプロジェクトごとに分離するのと同様に、direnvは環境変数をプロジェクトごとに分離します。これにより、開発者は環境設定に煩わされることなく、純粋な開発作業に集中できるようになります。
3. インストール方法
direnvは、多くのOSでパッケージマネージャーを通じて簡単にインストールできます。ここでは、主要なOSでのインストール方法を紹介します。
macOS
Homebrewを使えば、macOSでのインストールは非常に簡単です。
brew install direnv
Linux
各ディストリビューションのパッケージマネージャーを使います。
Debian/Ubuntu系
sudo apt update
sudo apt install direnv
Fedora/CentOS系
sudo dnf install direnv
# または yum install direnv (古いバージョン)
Arch Linux系
sudo pacman -S direnv
Windows
Windows環境では、WSL (Windows Subsystem for Linux) を利用するのが一般的です。WSL上にLinuxディストリビューションをインストールし、上記Linuxのインストール方法に沿って導入します。
ネイティブWindows環境で利用する場合は、Scoopなどのパッケージマネージャーを使う方法もあります。
# PowerShellでScoopをインストール済みの場合
scoop install direnv
シェルへのフック設定
direnvをインストールしたら、次に使用しているシェルにフックを設定する必要があります。これにより、direnvがシェルのプロンプト表示前に環境変数をチェックできるようになります。
Bashの場合
~/.bashrcまたは~/.bash_profileに以下の行を追加します。
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
Zshの場合
~/.zshrcに以下の行を追加します。
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
Fishの場合
~/.config/fish/config.fishに以下の行を追加します。
echo 'direnv hook fish | source' >> ~/.config/fish/config.fish
設定を終えたら、シェルを再起動するか、設定ファイルを再読み込みしてください。
# 例: Bashの場合
source ~/.bashrc
これでdirenvの基本的なセットアップは完了です。
4. 基本的な使い方
direnvの使い方は非常にシンプルです。最低限、以下のコマンドと概念を理解すればすぐに使い始められます。
1. プロジェクトディレクトリの作成
まず、direnvを試すための新しいディレクトリを作成します。
mkdir ~/my-direnv-project
cd ~/my-direnv-project
2. 環境変数の確認(ロード前)
まだdirenvは何も設定していません。例えば、MY_VARIABLEという環境変数が設定されていないことを確認してみましょう。
echo ${MY_VARIABLE:-"設定されていません"}
出力は「設定されていません」となるはずです。
3. .envrcファイルの作成
次に、このディレクトリに入ったときに自動で読み込まれる.envrcファイルを作成します。このファイルはBashスクリプトとして記述します。
echo 'export MY_VARIABLE="Hello from direnv!"' > .envrc
direnvはセキュリティ上の理由から、作成したばかりの.envrcファイルをすぐに読み込みません。ファイルを作成すると、以下のようなメッセージが表示されるはずです。
.envrc is not allowed
これは、悪意のある.envrcファイルが自動実行されるのを防ぐための仕組みです。
4. .envrcファイルの実行許可
.envrcファイルを信頼できると判断したら、direnv allowコマンドで実行を許可します。
direnv allow .
このコマンドを実行すると、direnvは.envrcを読み込み、変更をシェルに適用します。
direnv: reloading
direnv: loading .envrc
direnv export: +MY_VARIABLE
5. 環境変数の確認(ロード後)
もう一度、MY_VARIABLEの値を確認してみましょう。
echo ${MY_VARIABLE:-"設定されていません"}
今度は「Hello from direnv!」と表示されるはずです。これにより、.envrcファイルで設定した環境変数が、カレントシェルにロードされたことが確認できます。
6. ディレクトリから出る(アンロード)
プロジェクトディレクトリから親ディレクトリに戻ってみましょう。
cd ..
ディレクトリを離れると、direnvは自動的にロードされた環境変数を解除します。
direnv: unloading
もう一度MY_VARIABLEを確認すると、再び設定されていない状態に戻っていることがわかります。
echo ${MY_VARIABLE:-"設定されていません"}
出力は「設定されていません」となるはずです。
基本コマンドのまとめ
direnv allow .: カレントディレクトリの.envrcファイルの実行を許可します。信頼できるファイルであることを明示的に伝える必要があります。direnv deny .: カレントディレクトリの.envrcファイルの実行を拒否します。一度許可したファイルを無効にしたい場合に利用します。direnv edit .: カレントディレクトリの.envrcファイルをデフォルトのエディタで開きます。ファイルが存在しない場合は新規作成します。
これらのコマンドと、.envrcファイルの作成・編集、そしてディレクトリ移動による自動切り替えがdirenvの基本的な操作です。
5. 便利な使い方・応用例 3選
direnvは、単に環境変数を設定するだけでなく、開発ワークフローを大幅に改善する様々な応用が可能です。ここでは、特に役立つ3つの応用例を紹介します。
1. Python仮想環境の自動アクティベート
Python開発において、プロジェクトごとに仮想環境を使い分けるのは一般的なプラクティスです。direnvを使えば、プロジェクトディレクトリに入るだけで仮想環境を自動でアクティベートできます。
.envrcの例
# .envrc
# プロジェクト内に .venv/ ディレクトリが存在する場合に仮想環境を有効にする
if [ -d .venv ]; then
layout python
fi
解説:
layout pythonはdirenvのstdlib(標準ライブラリ)関数の一つです。プロジェクトディレクトリ直下またはvenv/、.venv/などの場所にあるPython仮想環境を自動で検出し、アクティベートします。if [ -d .venv ]; then ... fiは、.venvディレクトリが存在する場合のみlayout pythonを実行するための条件分岐です。これにより、仮想環境がまだ作成されていないプロジェクトでエラーになるのを防ぎます。
使い方
プロジェクトディレクトリを作成します。
mkdir my-python-project cd my-python-project仮想環境を作成します。
python3 -m venv .venv.envrcファイルを作成し、上記の内容を記述します。echo 'if [ -d .venv ]; then layout python; fi' > .envrc.envrcの実行を許可します。direnv allow .
これで、my-python-projectディレクトリに入るたびに、仮想環境が自動的にアクティベートされます。cd ..でディレクトリを離れると、仮想環境は自動でディアクティベートされます。
2. クラウドサービス認証情報やAPIキーの分離
AWS、GCP、Azureなどのクラウドサービスや、各種APIを利用する際、認証情報やAPIキーを環境変数で管理することがよくあります。direnvを使えば、プロジェクトごとにこれらの機密情報を安全に分離できます。
.envrcの例
# .envrc
# .envファイルが存在すれば、それを読み込む
dotenv
解説:
dotenvもdirenvのstdlib関数です。これは、カレントディレクトリに存在する.envファイルを読み込み、そこに記述された変数を環境変数として設定します。.envファイルは通常、キーと値のペアをKEY=VALUE形式で記述します。- この設定の利点は、
.envrcファイル自体はGitで管理し、.envファイルは.gitignoreに追加してGit管理から除外できる点です。これにより、機密情報が誤ってリポジトリにコミットされるのを防ぎつつ、プロジェクトの環境変数を簡単に共有できます(ただし、チームメンバーには.envファイルを別途共有する必要があります)。
使い方
プロジェクトディレクトリを作成します。
mkdir my-cloud-project cd my-cloud-project.envrcファイルを作成し、dotenvを記述します。echo 'dotenv' > .envrc direnv allow .機密情報を含む
.envファイルを作成します。echo 'AWS_ACCESS_KEY_ID="AKIAxxxxxxxxxxxxxx"' > .env echo 'AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"' >> .env echo 'API_KEY="your_super_secret_api_key"' >> .env.envファイルを.gitignoreに追加します。(重要!)echo '.env' >> .gitignore
これで、my-cloud-projectディレクトリに入ると、AWS認証情報やAPIキーが自動でロードされます。
3. プロジェクト固有のツールパスの追加
プロジェクトによっては、特定のバージョンのツールや、プロジェクト固有のスクリプトをパスに追加したい場合があります。direnvのPATH_add関数を使えば、簡単にこれを実現できます。
.envrcの例
# .envrc
# プロジェクト内の bin ディレクトリをPATHに追加
PATH_add bin
解説:
PATH_addはdirenvのstdlib関数です。引数に与えられたパスを、既存のPATH環境変数の先頭に追加します。これにより、プロジェクト固有の実行ファイルやスクリプトが優先的に検索されるようになります。
使い方
プロジェクトディレクトリを作成します。
mkdir my-tool-project cd my-tool-projectプロジェクト固有の実行ファイルやスクリプトを格納する
binディレクトリを作成します。mkdir bin例えば、簡単なスクリプトを作成します。
echo '#!/bin/bash' > bin/my-script.sh echo 'echo "Hello from my-script in direnv!"' >> bin/my-script.sh chmod +x bin/my-script.sh.envrcファイルを作成し、上記の内容を記述します。echo 'PATH_add bin' > .envrc direnv allow .
これで、my-tool-projectディレクトリに入ると、binディレクトリがPATHに追加され、my-script.shを直接実行できるようになります。
my-script.sh
出力は「Hello from my-script in direnv!」となるはずです。ディレクトリを離れると、binディレクトリはPATHから自動的に削除されます。
これらの応用例からわかるように、direnvは単なる環境変数管理ツールではなく、開発環境の自動化と分離を強力にサポートするツールです。
6. 他ツールとの組み合わせ
direnvは、他の開発ツールと組み合わせることで、その真価を発揮します。ここでは、相性の良いツールとその組み合わせ方を紹介します。
1. 言語バージョンマネージャー(pyenv, rbenv, nvm)
Pythonのpyenv、Rubyのrbenv、Node.jsのnvmなど、言語バージョンマネージャーはプロジェクトごとに言語のバージョンを切り替えるのに使われます。direnvと組み合わせることで、ディレクトリ移動時に自動で適切な言語バージョンが選択されるようになります。
Python (pyenv) の例
.envrcにlayout pythonとpyenvのフックを追加します。
# .envrc
# pyenvがインストールされていれば、それを有効にする
if command -v pyenv &> /dev/null; then
eval "$(pyenv init -)"
fi
# プロジェクト固有のPythonバージョンを設定(例: 3.9.10)
pyenv local 3.9.10
# 仮想環境を自動で有効にする
layout python
解説:
eval "$(pyenv init -)"はpyenvをシェルにフックするための標準的なコマンドです。direnvの.envrc内で実行することで、pyenvの機能が利用可能になります。pyenv local 3.9.10は、カレントディレクトリで使うPythonのバージョンを3.9.10に設定します。このバージョンは事前にpyenv install 3.9.10でインストールしておく必要があります。layout pythonは、上記で設定されたPythonバージョンに対応する仮想環境を自動でアクティベートします。
2. Docker / Docker Compose
DockerやDocker Composeを使うプロジェクトでは、環境変数でコンテナ名やネットワーク設定、環境ごとの設定などを管理することがあります。
.envrcの例
# .envrc
# プロジェクト固有のDocker Composeファイルや環境変数を設定
export COMPOSE_PROJECT_NAME="my-app-dev"
export DOCKER_IMAGE_TAG="latest"
# 例えば、開発環境用のDocker Composeファイルを使う場合
# export COMPOSE_FILE="docker-compose.dev.yml"
# Docker Compose の .env ファイルも読み込む場合
dotenv
解説:
COMPOSE_PROJECT_NAMEを設定することで、複数のプロジェクトでDocker Composeを使う場合にコンテナ名の衝突を防げます。DOCKER_IMAGE_TAGのような変数は、CI/CDパイプラインや開発環境で異なるイメージタグを使いたい場合に便利です。dotenvを使うことで、Docker Composeの.envファイル(通常、Docker Composeコマンドが自動で読み込むファイル)をdirenv経由でも読み込めます。これにより、direnvで設定した変数をDocker Composeの環境変数として利用できるようになります。
3. Kubernetes (kubectl)
Kubernetesのクラスター設定をプロジェクトごとに切り替えたい場合、KUBECONFIG環境変数をdirenvで管理するのが便利です。
.envrcの例
# .envrc
# プロジェクト固有のKubeconfigファイルを指定
export KUBECONFIG="$(pwd)/kubeconfig.yaml"
# または、複数のKubeconfigファイルを指定する場合
# export KUBECONFIG="$(pwd)/kubeconfig-dev.yaml:$(pwd)/kubeconfig-prod.yaml"
# プロジェクト固有の名前空間を設定
export KUBERNETES_NAMESPACE="my-project-dev"
解説:
KUBECONFIG環境変数を設定することで、kubectlコマンドが参照する設定ファイルを切り替えられます。これにより、開発用、ステージング用、本番用など、環境ごとに異なるクラスター設定を簡単に扱えます。$(pwd)/kubeconfig.yamlのように相対パスを指定することで、kubeconfig.yamlファイルをプロジェクトディレクトリ直下に配置し、Gitで管理できます(ただし、機密情報を含む場合は.gitignoreに追加し、安全な方法で共有する必要があります)。KUBERNETES_NAMESPACEを設定することで、kubectlコマンドの実行時にデフォルトで使用する名前空間を指定できます。
4. Terraform
Terraformでインフラをコード化する際、環境ごとのバックエンド設定や変数定義をdirenvで管理できます。
.envrcの例
# .envrc
# TerraformバックエンドS3バケット名を環境変数で指定
export TF_VAR_backend_s3_bucket="my-terraform-state-bucket-dev"
export TF_VAR_backend_s3_key="my-project/terraform.tfstate"
export TF_VAR_aws_region="ap-northeast-1"
# 例: Terraformのワークスペースを自動で選択する場合
# tf_workspace_name="dev"
# if terraform workspace list | grep -q "${tf_workspace_name}"; then
# terraform workspace select "${tf_workspace_name}"
# else
# terraform workspace new "${tf_workspace_name}"
# fi
解説:
TF_VAR_プレフィックスを付けた環境変数は、Terraformが自動的に変数として読み込みます。これにより、バックエンド設定(S3バケット名など)やプロバイダ設定(AWSリージョンなど)をプロジェクトや環境ごとに切り替えられます。terraform workspaceコマンドと組み合わせることで、プロジェクトディレクトリに入るだけで特定のTerraformワークスペースを自動的に選択・作成することも可能です。
これらの組み合わせにより、direnvは開発者が直面する多様な環境管理の課題を解決し、よりスムーズな開発ワークフローを実現します。
7. よくある設定・カスタマイズ
direnvは、そのままでも強力ですが、いくつかの設定やカスタマイズを加えることで、さらに使い勝手を向上させることができます。
1. グローバルなdirenvrcの利用
direnvは、ユーザーのホームディレクトリ配下の特定の場所に設定ファイルを置くことで、すべての.envrcファイルで共通の関数や設定を利用できるようにします。これは~/.config/direnv/direnvrcというファイルです。
このファイルは、各プロジェクトの.envrcファイルが読み込まれる前に実行されます。そのため、独自のヘルパー関数を定義したり、特定の環境変数をデフォルトで設定したりするのに便利です。
例: よく使う関数を定義する
# ~/.config/direnv/direnvrc
# 例えば、特定のツールを常にPATHに追加する関数
add_my_tool_path() {
PATH_add "${HOME}/.local/bin"
echo "My custom tool path added!"
}
# Python開発で常に Poetry を使うための関数
layout_poetry() {
if ! command -v poetry &> /dev/null; then
echo "Poetry is not installed. Please install it first." >&2
return 1
fi
if [ ! -f pyproject.toml ]; then
echo "pyproject.toml not found. Is this a Poetry project?" >&2
return 1
fi
poetry env use python
poetry shell
}
このdirenvrcにlayout_poetry関数を定義すれば、各プロジェクトの.envrcではシンプルにlayout_poetryと記述するだけでPoetry環境をアクティベートできます。
# プロジェクトの.envrc
layout_poetry
これにより、.envrcファイルが簡潔になり、共通ロジックの再利用性が高まります。
2. .envファイルの読み込み
前述の通り、direnvは.envrcファイル内でdotenv関数を呼び出すことで、標準的な.env形式のファイルを読み込むことができます。これは、機密情報やチームで共有する環境変数を管理する際に非常に便利です。
.envrcファイル
# .envrc
dotenv
.envファイル (Git管理外)
# .env
# これは.gitignoreに追加してGit管理から除外してください
DATABASE_URL="postgresql://user:password@host:port/dbname"
STRIPE_SECRET_KEY="sk_test_..."
注意点:
.envファイルは、必ず.gitignoreに追加してGit管理から除外してください。- 機密情報をチームで共有する際は、パスワードマネージャーや環境変数管理サービス(AWS Secrets Managerなど)を併用することを検討してください。
3. 特定のディレクトリでのdirenvの無効化
稀に、特定のディレクトリでdirenvの自動的な動作を一時的に停止したい場合があります。direnvには、これを実現するための環境変数や設定はありませんが、.envrcファイル内で条件分岐を使うことで、同様の振る舞いを実現できます。
例えば、特定のサブディレクトリでは環境変数をロードしないようにする、といったケースです。
# .envrc (親ディレクトリ)
export PROJECT_ROOT_VAR="I am from project root"
# サブディレクトリでdirenvを無効にする例
if [[ "$PWD" == *"/ignore-me"* ]]; then
echo "direnv disabled for this subdirectory."
exit 0 # direnvの処理をここで終了させる
fi
# 通常の処理
PATH_add bin
解説:
exit 0を.envrc内で使用すると、direnvはその後の処理を停止し、環境変数のロードを行いません。$PWD(現在の作業ディレクトリ)をチェックし、特定のパターンにマッチした場合にexit 0を実行することで、部分的な無効化を実現できます。
これらの設定やカスタマイズを使いこなすことで、direnvはあなたの開発環境をより柔軟かつ強力にサポートするツールとなるでしょう。
8. 今日からできる実行プラン:3ステップで始める
direnvの導入は、あなたの開発ワークフローを大きく改善します。複雑に感じるかもしれませんが、以下の3つのステップで簡単に始められます。
ステップ1: direnvのインストールとシェルフックの設定
まずは、お使いのOSとシェルに合わせてdirenvをインストールし、シェルにフックを設定しましょう。
インストール:
- macOS:
brew install direnv - Linux:
sudo apt install direnv(Debian/Ubuntu系) など - Windows: WSLを利用し、Linuxのインストール方法に従う
- macOS:
シェルフックの設定:
- Bash:
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc - Zsh:
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc - Fish:
echo 'direnv hook fish | source' >> ~/.config/fish/config.fish
- Bash:
シェルを再起動: 新しい設定を反映させるために、ターミナルを閉じて再度開くか、
source ~/.bashrc(または~/.zshrc) を実行してください。
ステップ2: 簡単な.envrcファイルで動作確認
次に、direnvの基本的な動作を体験してみましょう。
テストディレクトリの作成: どこか適当な場所に新しいディレクトリを作ります。
mkdir ~/direnv-test cd ~/direnv-test.envrcファイルの作成: 環境変数を設定するファイルを作成します。echo 'export MY_TEST_VAR="Hello direnv!"' > .envrcこの時点で「.envrc is not allowed」というメッセージが表示されるはずです。
実行許可: 作成した
.envrcの実行を許可します。direnv allow .「direnv: reloading」「direnv: loading .envrc」「direnv export: +MY_TEST_VAR」のようなメッセージが表示されれば成功です。
動作確認: 環境変数が読み込まれたか確認します。
echo $MY_TEST_VAR「Hello direnv!」と表示されればOKです。
ディレクトリ移動でアンロード確認: 親ディレクトリに戻ってみましょう。
cd ..「direnv: unloading」と表示され、再び
echo $MY_TEST_VARを実行すると何も表示されなくなるはずです。
ステップ3: 既存のプロジェクトに適用してみる
基本的な動作が確認できたら、実際に使っているプロジェクトの一つにdirenvを適用してみましょう。
例えば、Pythonのプロジェクトであれば、プロジェクトディレクトリに移動し、以下の内容で.envrcを作成します。
# .envrc (Pythonプロジェクトのルートに配置)
if [ -d .venv ]; then
layout python
fi
その後、direnv allow .を実行します。これで、そのプロジェクトディレクトリに入るだけでPython仮想環境が自動でアクティベートされるようになります。
まずは一つのプロジェクトから始め、その便利さを実感してください。慣れてきたら、他のプロジェクトや、クラウド認証情報の管理、ツールパスの追加など、この記事で紹介した応用例を試してみてください。
direnvは、あなたの開発環境をよりクリーンに、より自動化されたものへと変える強力なツールです。今日からその恩恵を受けて、開発に集中できる環境を手に入れましょう。
参考文献
- direnv GitHubリポジトリ
- More practical direnv
- Why Every Developer Should Be Using Direnv (But Probably Isn't Yet)
- 5 Ways to Manage Environment Variables with direnv
- Using direnv to improve your workflow