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

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のカスタマイズなど、手作業では煩雑になりがちな作業を自動化してくれます。
プロジェクトの生産性向上と安全な環境切り替えを支援する、現代のシェル環境に欠かせないツールのひとつです。