direnvとはディレクトリに設定ファイルを置くことで、カレントディレクトリでのみ有効になる環境変数を設定できるツールです。開発中のアプリケーションごとに環境変数を変えたいといった場合や、設定ファイルをGitリポジトリに含めることでアプリケーションのソースコードと一緒に配布して開発者間で環境変数を揃えるといった用途に使っています。
Macではhomebrewを使って簡単にインストールして使っていましたが、Linux環境でも使いたくなったのでインストール方法を残しておきます。
環境
今回試したのは普段開発で使っている CentOS6.7 x86_64
の環境です。
インストール
Linuxでのインストール方法は2通りあります
- コンパイル済みのパッケージのインストール
- ソースコードからコンパイルしてインストール
コンパイル済みのパッケージのインストール
direnvはGitHubのReleasesページでコンパイル済みのパッケージを配布しています。
https://github.com/direnv/direnv/releases
今回はOSに合わせて direnv.linux-amd64
を使用します。
$ wget -O direnv https://github.com/direnv/direnv/releases/download/v2.6.0/direnv.linux-amd64
$ chmod +x direnv
$ sudo mv direnv /usr/local/bin/
これでインストールは完了です。
ただし、配布しているパッケージのバージョンはこの記事を書いた2015年10月時点で 2.6
、最新版は2.7
と若干古いので、どうせなら最新版を入れてみます。
最新版をインストールするにはソースコードからコンパイルが必要です。
ソースコードからコンパイルしてインストール
direnvはgolang製なのでコンパイルのためにgolangをインストールします。
$ sudo yum install go
続いてdirenvをインストールします
$ git clone https://github.com/direnv/direnv
$ cd direnv
$ make install
ソースコードからコンパイルしてインストールもこれで完了です。
続いてdirenvがシェルにフックされるように設定します
シェルにフック
$ echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
zsh等を使用している場合は、bash
部分を適宜書き換えます
https://github.com/direnv/direnv#setup
.envrcファイルの作成
環境変数を設定したいディレクトリに移動して .envrc
ファイルを作成します。
今回はRails環境で bundle exec
や bin/rails
を省略できるように、Railsプロジェクトの /bin
ディレクトリにパスを通します。
$ cd /path/to/rails_project/
$ echo -n 'export PATH=$PWD/bin:$PATH' >> .envrc
これでシェルを起動し直すか、.envrcを作成したディレクトリに移動し直します。
するとこのようなメッセージが出て怒られます。
$ cd /path/to/rails_project/
$ direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
メッセージの通りに direnv allow
コマンドを実行してみます
$ direnv allow
direnv: loading .envrc
direnv: export ~PATH
.envrc
がロードされて中に記述した環境変数が使えるようになりました。
もちろんこのディレクトリを出ると無効になるので、外の開発プロジェクトに影響を与えることもありません。