「bundle exec 〜」ってナゼいるの?
そもそもBundlerってナニ?
プロジェクト内で使うGemのパッケージを管理するツールのことで、簡単にいうならばrbenvと似ている感じ。
rbenvとは
Rubyのバージョン管理を切り替えるツールのこと。
使っている環境全体のバージョンだけではなく、ディレクトリごとにバージョンを設定することもできる。
Rubyのバージョンは、プロジェクト毎にrbenvで管理し、
gemのバージョンは、プロジェクト毎にBundlerで管理する。
「bundle exec」を付けない状態でコマンドを実行するとどうなるのか?
・Gemfile.lockに基づかずにgemのバージョンが決定されてしまう。
逆に「bundle exec」をつけることでGemfile.lockに書かれているバージョンでgemが動く
・bin/rspecのように書くと、springのおかげで動作が速くなる
(springってなんだったっけ...)
・railsコマンドだけはbinを省略してもbin/railsとして解釈される
なので
・railsコマンドは何も付けずに実行できる
・binディレクトリにファイルが存在するコマンドはbin/○○
・それ以外のコマンドはbundle execをつける
springとは
アプリケーションをバックグラウンドで実行し続けることで、開発をスピードアップするRailsアプリケーションプリローダのこと。
(pre + load = 前もってロードしておく)
●参考
・https://qiita.com/d0ne1s/items/fa2dafcee02e963fe997