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 allowNode.jsバージョン指定(nvmなどと併用)
$ echo 'export NODE_VERSION=18.0.0' > .envrcAWSの資格情報切り替え
export AWS_PROFILE=dev-account便利な組み込みレイアウト関数
layout python:自動で仮想環境をセットアップlayout node:Nodeプロジェクト向けセットアップuse nix:Nix環境を自動で読み込み
セキュリティと承認モデル
direnvは、.envrcに書かれたスクリプトがシェルで実行されるため、明示的にdirenv allowで許可しないと有効化されません。これにより、悪意のあるコードの自動実行を防止します。
注意点
.envrcはシェルスクリプトとして動作するため、文法ミスに注意- プロジェクトごとに異なる環境を使う際はGitで
.envrcを管理すると便利 - セキュリティ上、知らないディレクトリでの
allowは慎重に
まとめ
direnvは、開発ディレクトリごとに異なる環境設定が必要な場面で非常に便利なツールです。仮想環境の自動切り替えや認証情報の分離、PATHのカスタマイズなど、手作業では煩雑になりがちな作業を自動化してくれます。
プロジェクトの生産性向上と安全な環境切り替えを支援する、現代のシェル環境に欠かせないツールのひとつです。






