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
##参考