rails sって書いても、bundle exec rails sって書いても同じ動きをするように見えるんですが、何が違うのでしょうか。気になったので調べてみました。
結論
-
bundle execをつけないと、Gemfile.lockに基づかずにgemのバージョンが決定される -
bundle execをつけると、Gemfile.lockに書かれているバージョンのgemが動く -
bin/rspecのように書くと、springの恩恵を受けて動作が早くなる -
railsコマンドだけはbinを省略してもbin/railsと解釈される
だから
-
railsコマンドは何も付けずに実行 -
binディレクトリにファイルが存在するコマンドはbin/◯◯ - それ以外のコマンドは
bundle exec ◯◯- vscode remote container等でコンテナ内で開発してる場合は
bundle exec不要
- vscode remote container等でコンテナ内で開発してる場合は
そもそもBundlerとは
- プロジェクト内で使うGemのパッケージ管理ツール。Gemをプロジェクト単位で管理することができる。
- rbenv(rubyのバージョンをプロジェクト単位で管理するツール)のGem版
-
bundle installコマンドを叩くと、Gemfileに記載されたGemをインストールする
bundle installした時のGemの保存先
rbenvを使っている場合
$ gem which byebug
/Users/***/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/byebug-11.0.1/lib/byebug.rb