direnv:ディレクトリごとに自動で環境変数を切り替え

目次
direnvコマンドについての概要と詳細
direnvとは
direnv
は、ディレクトリごとに自動で環境変数を読み込んだり破棄したりできる、便利なシェル拡張ツールです。
特定のプロジェクトディレクトリに入ったときに、対応する環境変数(PATH, PYTHONPATH, AWSキーなど)を自動で設定し、ディレクトリから出ると自動で無効化される仕組みを提供します。
主な特徴
- ディレクトリごとの環境構築を自動化
- 仮想環境やプロジェクトの切り替えをスムーズに
- 複数言語・複数環境の開発に最適
.envrc
ファイルによる柔軟な設定
インストール方法
Debian/Ubuntu系
$ sudo apt install direnv
Fedora系
$ sudo dnf install direnv
インストール後、シェルにフックを追加する必要があります。
シェル設定への追加
.bashrc
や.zshrc
などに以下を追加
eval "$(direnv hook bash)" # bashの場合
eval "$(direnv hook zsh)" # zshの場合
eval "$(direnv hook fish)" # fishの場合
追加後は、設定を反映させます:
$ source ~/.bashrc
基本的な使い方
1. .envrcファイルの作成
$ echo 'export PATH=$PWD/bin:$PATH' > .envrc
この例では、カレントディレクトリのbin
をPATHに追加しています。
2. direnvの許可
$ direnv allow
.envrc
ファイルは明示的にallow
しないと無効です。
3. 自動適用と無効化
このディレクトリに入ると環境変数が自動で適用され、ディレクトリを出ると元に戻ります。
使用例
Python仮想環境の自動有効化
$ echo 'layout python' > .envrc
$ direnv allow
Node.jsバージョン指定(nvmなどと併用)
$ echo 'export NODE_VERSION=18.0.0' > .envrc
AWSの資格情報切り替え
export AWS_PROFILE=dev-account
便利な組み込みレイアウト関数
layout python
:自動で仮想環境をセットアップlayout node
:Nodeプロジェクト向けセットアップuse nix
:Nix環境を自動で読み込み
セキュリティと承認モデル
direnv
は、.envrc
に書かれたスクリプトがシェルで実行されるため、明示的にdirenv allow
で許可しないと有効化されません。これにより、悪意のあるコードの自動実行を防止します。
注意点
.envrc
はシェルスクリプトとして動作するため、文法ミスに注意- プロジェクトごとに異なる環境を使う際はGitで
.envrc
を管理すると便利 - セキュリティ上、知らないディレクトリでの
allow
は慎重に
まとめ
direnv
は、開発ディレクトリごとに異なる環境設定が必要な場面で非常に便利なツールです。仮想環境の自動切り替えや認証情報の分離、PATHのカスタマイズなど、手作業では煩雑になりがちな作業を自動化してくれます。
プロジェクトの生産性向上と安全な環境切り替えを支援する、現代のシェル環境に欠かせないツールのひとつです。