日常

ケ・セラ・セラ

direnvとbundle install --binstubsでbundle execを省略する術

bundle install した場合、毎回 bundle exec と打つのは面倒だ。 alias で be とかにしても、それすら無い方が心地よい。

ただし bundle exec を省略するためにややこしいことはしたくない。ダーティなのもいやだ。

そんなことを思っていた僕はこの direnv + bundle install --binstubs の方法に落ち着いている。


まずは --binstubs 付きで bundle install する。いつもやるのはこんな感じだ。alias しておくとよい。 これで vendor/bin 配下で実行可能な状態でイントールできる。

bundle install --path vendor/bundle --binstubs vendor/bin --without production --jobs=4

このままだと vendor/bin にパスが通っていないので、そこで direnv を使う。

direnv は .envrc に環境変数を書いて置いておくと、そのディレクトリ配下では .envrc の内容を有効にしてくれる。というもので、たとえば親ディレクトリに抜けたりするとまた元通り、.envrc の内容は無効な状態に戻る。

インストールは簡単で、たとえば ghq を使っているとこんな感じだ。

ghq get zimbatm/direnv
cd ~/src/github.com/zimbatm/direnv
sudo make install

.envrc には、こんな感じで書いてプロジェクトルートなどに置いておく。

PATH=${PWD}/bin:${PWD}/vendor/bin:${PATH}

こんな風に聞かれた場合には、 direnv allow と入力することで .envrc の内容が有効になる。

direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

これで bundle exec を入力せずやっていける。 好みで .gitignore に .envrc や vendor/bin を追加しておくとよいかもしれない。