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 -sT
を bundle 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 を諦めた。