質問: railsで、下記の認識であっているか、確認をしたいと思っています。 Gemfileにgemを追加した後、bundle installすれば、gemはグローバルにインストールされる。よって、以降、rails関連のコマンドは、 rails s rails g model rails g controller などになる。(つまり頭にbundle exeが不要) Gemfileにgemを追加した後、bundle install --path vendor/bundleと、オプションを付ければ、gemはローカルにインストールされるため、以降、rails関連のコマンドは、 bundle exec rails s bundle exec rails g model bundle exec rails g controller などになる。(つまり頭にbundle exeが必要)
回答: > > よって、以降、rails関連のコマンドは、(中略)などになる。(つまり頭にbundle exeが不要) > > > 結論だけはあっていますが、経緯は**違います**。 `rails`コマンドをグローバルインストールしている場合も、ディレクトリにRailsがインストールされていると、`bin/rails`として呼べる**ローカル環境に合わせたRails**を呼び出してそちらに処理を任せる、という挙動になります(参考)。 ということで、このような中継を行わない`rails`以外のコマンドを使う場合、ローカルの`Gemfile`に合わせたものを呼ぶには`bundle exec`が必要となります。 > > gemはローカルにインストールされるため、以降、rails関連のコマンドは、(中略)などになる。(つまり頭にbundle exeが必要) > > > 逆に、`bundle install`と無縁にグローバルな`rails`がインストールされていれば、そのRailsがローカルのRailsに中継してくれますので、`bundle exec`なしでも動きます。 なお、springなどの関係上、`bundle exec rails`より`bin/rails`を呼ぶほうがいいかもしれません(上の「参照」記事にも書かれています)。