【Rails】bin/rspec と bundle exec rspec の違い

Ruby on Railsアイキャッチ画像

Rspecを、bin/rspecで実行すると、viewが更新されていない現象が起きた。

そこでbundle exec rspecで実行すると、ちゃんと最新のviewとなった。

この違いはなんなのか?それぞれの動きについて説明します。

bin/rspec

・そのRailsアプリケーションのルートディレクトリ直下の bin ディレクトリにある rspec というスクリプトを呼び出している。
・bin/ を付けておけば、Spring経由で高速にコマンドが実行される
・bundlerが、gemのバージョンや依存関係も正しく処理してくれる

bundle exec rspec

・Gemfile.lockに書かれているバージョンのgemが動く
・bundle exec を付けることで意図しないバージョンが起動することを防ぐ
 (だから別にrspecだけでできないこともない)

結論

bin/rspecでvieが更新されなかったのは、gemとの依存関係が逆に悪さをしているように考えられる。binによる高速処理はあきらめてbundle execで実行する。

コメント