※2012/10/24 RVMでの設定について追記しました
こんにちは、河野です。
2012年3月入社でRubyやRailsを使い始めた、Ruby1年生です。最近ようやくパッケージ管理にbundlerを使い始めました。パッケージ管理が楽にできるのがありがたいですね。
1 |
$ bundle install --path vendor/bundle |
パスを指定してインストールすると、システム(もしくはrvmとか)の環境を汚染せずに、アプリに応じたgemの管理ができて、良い感じです。
が、しかし!実行時にbundle execを入力しないといけない!面倒くさい!
1 2 3 |
$ bundle exec rake ~ $ bundle exec rails ~ $ bundle exec cap ~ |
とか、何なんですかこれは。
とりあえず alias にしてみた
何度も入力するコマンドは、aliasにして省入力するというのが定石ですね。
1 2 3 4 5 |
$ alias be='bundle exec' $ be rails -T Usage: rails new APP_PATH [options] (略) |
これで、ずいぶんと楽になりました。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 を使うと良いみたいです。
変更前はこんな感じです。
1 2 3 4 5 6 |
$ bundle exec rails -T Usage: rails new APP_PATH [options] (略) $ ls Gemfile Gemfile.lock vendor |
--binstubsを実行してみます。
1 2 3 4 5 6 7 8 |
$ bundle install --binstubs Using rake (0.9.2.2) Using i18n (0.6.1) (略) $ ls Gemfile Gemfile.lock bin vendor $ ls bin erubis rackup rails rake rake2thor rdoc ri thor tilt tt |
binディレクトリと実行ファイルが作成されていますね。
1 2 3 4 |
$ bin/rails -T Usage: rails new APP_PATH [options] (略) |
bundle exec を省略しても、ちゃんと実行されました!
でもまだ bin/ が余計です。
RVMを利用している場合: RVMのhookを有効にする
rvmのhookを有効にすると、PATHの問題は解決します。
参考
RVM: Ruby Version Manager - Bundler Integration with RVM
bundle execを使わずにすむ方法 @ Qiita
すでに良い記事がありましたね…
1 2 3 4 5 6 7 8 |
$ rails -T -bash: rails: コマンドが見つかりません $ chmod +x ~/.rvm/hooks/after_cd_bundler $ cd . $ rails -T Usage: rails new APP_PATH [options] (略) |
hookスクリプトを有効にした後に、bundlerが利用されているディレクトリに移動することでhookが実行されます。今回はカレントディレクトリだったのでcd .
を実行しています。
hookが実行されるとbin配下の実行ファイルが利用できるようになります。
RVMを利用してない場合: PATHを設定する
RVMではない場合はPATHの設定を行えば解決します。
1 2 3 4 5 |
$ PATH=./bin:$PATH $ rails -T Usage: rails new APP_PATH [options] (略) |
やったね!これでbundle execともオサラバ!
相対パスをPATHに設定する、というのがちょっと個人的には気になりますが…。
bundle exec を省略する手順のまとめ
- bundle install --binstubs を実行する
- RVMの場合:hookを有効にする
- RVMじゃない場合:PATHに./binを追加する
これで楽々bundle生活のできあがりですね!