一般的で無駄のないRailsのインストール手順はありますか？


## まずそもそもRailsがないのでgemでインストール

まずそもそもRailsがないので、インストール。  

(1) `gem install rails`

## プロジェクトを作る

`rails new hoge_project`

(2) この`rails new`で自動で`bundler`で`rails`が入る （`bundle exec rails`で動く）。

## 共通のbundleは嫌なので、 --path vendor/bundle

`bundler`で扱うものは、プロジェクトごとで扱いたいので、  
`hoge_project`ディレクトリに移動して、  
(3)`bundle install --path vendor/bundle`

## 以上の操作で全部で3つのrails

上記操作で合計3つのrailsが私のPCに入ったことになり、  
最終的に(3)の手順でいれた`rails`を`bundle exec rails`の形で使うのが主流のように感じるのですが、認識に間違いはないでしょうか？

## 質問

Q0. そもそも認識に間違いはないか？  
Q1. 使わない2つのrailsは削除するのかどうか？  
Q2. 手順(2)で自動で入るrailsは不要に思えるスキップできないか？  
Q3. 他のフレームワークでもこのようにたくさんの同じようなものが入るのが一般的なのだろうか？(言語問わず何か似たようなものがあれば)




> Q0. そもそも認識に間違いはないか？

間違いがあるように思います。  
(2)の時は(1)でインストールしたrailsを利用し新たにrailsがインストールされないと思います。

bundlerはインストールPATHを変更しない限り、同名、同バージョンのrubygemsがンストール済みの場合、新たにインストールしません。

結果としてインストールされるrailsは2つになるかと思います。

> Q1. 使わない2つのrailsは削除するのかどうか？

後述しますが私なら最初からvendor/bundle配下にrailsをインストールします。

> Q2. 手順(2)で自動で入るrailsは不要に思えるスキップできないか？

`rails new hoge_project --skip-bundle` すれば`bundle install`せずにrailsプロジェクトを作れます。

> Q3. 他のフレームワークでもこのようにたくさんの同じようなものが入るのが一般的なのだろうか？(言語問わず何か似たようなものがあれば)

PerlならCarton、PHPならComposer、nodejsならnpmあたりがbundlerと似たような機能を提供しているように思います。しかしそれらに見識がないので詳しくご説明ができません。

* * *

最後に蛇足ですが、最初から`vendor/bundle`配下にrailsをインストールする方法をご紹介したいと思います。

  1. プロジェクトディレクトリを作って移動する  
`mkdir hoge_project && cd hoge_project`

  2. Gemfileを作る  
`bundle init`  
hoge_project配下にGemfileがつくられます。

  3. Gemfileにrailsを追加する  
`echo “gem ‘rails’” >> Gemfile`  
エディタでGemfileを編集していただいて構いません。

  4. bundle installする  
`bundle install --path vendor/bundle`  
`vendor/bundle`を指定してbundle installする。

  5. rails newする  
`bundle exec rails new .`  
ピリオドを忘れずにつけてください。`HogeProject`なrailsプロジェクトができます。




> Q0. そもそも認識に間違いはないか？

間違いがあるように思います。  
(2)の時は(1)でインストールしたrailsを利用し新たにrailsがインストールされないと思います。

bundlerはインストールPATHを変更しない限り、同名、同バージョンのrubygemsがンストール済みの場合、新たにインストールしません。

結果としてインストールされるrailsは2つになるかと思います。

> Q1. 使わない2つのrailsは削除するのかどうか？

後述しますが私なら最初からvendor/bundle配下にrailsをインストールします。

> Q2. 手順(2)で自動で入るrailsは不要に思えるスキップできないか？

`rails new hoge_project --skip-bundle` すれば`bundle install`せずにrailsプロジェクトを作れます。

> Q3. 他のフレームワークでもこのようにたくさんの同じようなものが入るのが一般的なのだろうか？(言語問わず何か似たようなものがあれば)

PerlならCarton、PHPならComposer、nodejsならnpmあたりがbundlerと似たような機能を提供しているように思います。しかしそれらに見識がないので詳しくご説明ができません。

* * *

最後に蛇足ですが、最初から`vendor/bundle`配下にrailsをインストールする方法をご紹介したいと思います。

  1. プロジェクトディレクトリを作って移動する  
`mkdir hoge_project && cd hoge_project`

  2. Gemfileを作る  
`bundle init`  
hoge_project配下にGemfileがつくられます。

  3. Gemfileにrailsを追加する  
`echo “gem ‘rails’” >> Gemfile`  
エディタでGemfileを編集していただいて構いません。

  4. bundle installする  
`bundle install --path vendor/bundle`  
`vendor/bundle`を指定してbundle installする。

  5. rails newする  
`bundle exec rails new .`  
ピリオドを忘れずにつけてください。`HogeProject`なrailsプロジェクトができます。

