Rails
Linux
direnv

Linuxでdirenvを使う

direnv

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 execbin/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がロードされて中に記述した環境変数が使えるようになりました。

もちろんこのディレクトリを出ると無効になるので、外の開発プロジェクトに影響を与えることもありません。