log

unite-rake と bundler 環境の共存

bundler な開発環境で unite-rake という plugin を使おうとしたらうまく行かなかったお話。

ruby で開発するときには system gem 環境を汚したくないので、いつも Gemfile 書いて bundle install --path vendor/bundle するようにしている。

で、今回やりたかったのは unite-rake という plugin を使うことで、これを入れると vim 上から rake -T した結果が得られて、その結果を選択して実行ということができるらしい。

https://github.com/ujihisa/unite-rake

Unite.vim は導入済み、かつ、vim の plugin は neobundle で管理してるので、.vimrc に NeoBundle 'ujihisa/unite-rake' と書いてやって :NeoBundleInstall してやればいい。簡単。

ここまではよかったが、導入して実際にコマンド :Unite rake してみても何も表示されない。

仕方ないのでソースを読んでみる。

https://github.com/ujihisa/unite-rake/blob/master/autoload/unite/sources/rake.vim

system call で rake を実行していることがわかるので、試しに rake -sTbundle exec rake -sT に書き換えてやる。で、選択した rake task を実行する箇所も "VimProcBang " . v:val[0], から "VimProcBang bundle exec " . v:val[0], に書き換えてやった。これでとりあえず動いた。

だが、これでいいのかというと非常に怪しい。 bundler 環境かどうかを判定する処理を書いてやって、判定結果に応じて bundle exec を追加してやればいいかなーと思ったけど、どうにも納得いってない。同様なことする vim plugin は全てそういった判定処理入れるのか?ってのが頭をよぎる。

じゃあ bundle exec しなくても bundler 環境の rake が実行できればいいんだよね、ってことでそっち方面で調べてみる。plugin じゃなくて環境側を合わせる方向性。

bundle install --binstubs vendor/bin みたいにすれば特定のPATHに実行ファイルを閉じ込められるらしい。ってことはそこにPATH設定してやればいいのでは?と思ってやってみたが駄目だった。bundler が無いとか言われる。

で、いろいろやってみたが結論としては unite-rake を諦めた。

このあたり、vimmerrubyist な人達はどうやって解決してるのか。もしくはしてないのか。