めんどくさい bundle exec を省略する方法


※2012/10/24 RVMでの設定について追記しました

こんにちは、河野です。

2012年3月入社でRubyやRailsを使い始めた、Ruby1年生です。最近ようやくパッケージ管理にbundlerを使い始めました。パッケージ管理が楽にできるのがありがたいですね。

パスを指定してインストールすると、システム(もしくはrvmとか)の環境を汚染せずに、アプリに応じたgemの管理ができて、良い感じです。

が、しかし!実行時にbundle execを入力しないといけない!面倒くさい!

とか、何なんですかこれは。

とりあえず alias にしてみた

何度も入力するコマンドは、aliasにして省入力するというのが定石ですね。

これで、ずいぶんと楽になりました。zshrcとかbashrcとかに記述しておけば、すぐに呼び出せます。

しかし、うーん。まぁこんなもんか…と我慢していたんですが、解決できました。

bundle install --binstubs を使う

bundle-exec のヘルプを見ると、ちゃんとした方法が書いてありました。

BUNDLE INSTALL --BINSTUBS
If you use the --binstubs flag in bundle install(1), Bundler will automatically create a directory (which defaults to app_root/bin) containing all of the executables available from gems in the bundle.

After using --binstubs, bin/rspec spec/my_spec.rb is identical to bundle exec rspec spec/my_spec.rb.

bundle install --binstubs を使うと良いみたいです。

変更前はこんな感じです。

--binstubsを実行してみます。

binディレクトリと実行ファイルが作成されていますね。

bundle exec を省略しても、ちゃんと実行されました!
でもまだ bin/ が余計です。

RVMを利用している場合: RVMのhookを有効にする

rvmのhookを有効にすると、PATHの問題は解決します。

参考
RVM: Ruby Version Manager - Bundler Integration with RVM
bundle execを使わずにすむ方法 @ Qiita
すでに良い記事がありましたね…

hookスクリプトを有効にした後に、bundlerが利用されているディレクトリに移動することでhookが実行されます。今回はカレントディレクトリだったのでcd .を実行しています。
hookが実行されるとbin配下の実行ファイルが利用できるようになります。

RVMを利用してない場合: PATHを設定する

RVMではない場合はPATHの設定を行えば解決します。

やったね!これでbundle execともオサラバ!
相対パスをPATHに設定する、というのがちょっと個人的には気になりますが…。

bundle exec を省略する手順のまとめ

  • bundle install --binstubs を実行する
  • RVMの場合:hookを有効にする
  • RVMじゃない場合:PATHに./binを追加する

これで楽々bundle生活のできあがりですね!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です