17292


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


CC BY-SA 3.0
2015-10-05T09:03:49.253
17269
2016-01-11T02:00:33.220
2015-10-05T10:32:26.710
9008
9008
question
ruby-on-rails ruby rubygems bundler
一般的で無駄のないRailsのインストール手順はありますか？


`rails new`したときに自動で実行されるbundle
installでは、(後述するようにBundlerでのgemのインストール先をいじっていないのであれば)Railsは新たにインストールされる事は無かったと思います。自動生成されるGemfileに記載される`rails`のバージョンは`rails
new`で読み込まれる`rails`と同じバージョンですし、特に指定しなければ`gem install`と`bundle
install`ではインストール先は同じです。

ただし、Railsが直接依存しないがGemfileで指定されているgemはインストールされてしまいます。あとで`bundle exec --path
...`を実行するのが前提なのであれば、`rails new APPNAME -B`でbundle installの自動実行をキャンセルすることができます。

もしくは、かならず`bundle install --path 決まったパス`を実行することにしているのであれば、あらかじめ`bundle config
--global path 決まったパス`を実行しておけばいちいち`bundle install`に`--path`を指定する必要はありません。`rails
new`が自動実行する`bundle install`に任せてしまえます。

Bundlerで別のパスに改めてRailsをインストールするのであれば、`rails
new`したときのRailsは不要です。削除したければ削除して良いでしょう。


CC BY-SA 3.0
2015-10-05T12:22:44.047
17278
2015-10-05T12:22:44.047
5793
17269
answer


> 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プロジェクトができます。


CC BY-SA 3.0
2015-10-05T15:02:31.477
17292
2015-10-11T10:00:59.783
2015-10-11T10:00:59.783
9008
2646
17269
answer


<https://ja.stackoverflow.com/a/17292/9008>  
で回答は頂いていますがRVMを使った場合の例を記載しておきます。

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

  2. rvm系の準備  
`echo '2.3.0' > .ruby-version`  
`echo 'hoge_project' > .ruby-gemset`  
`cd -`  
`cd -`  
rvm系の設定をしたあと、ディレクトリを出て入り直さないといけない。  
`gem install bundler`  
bundlerをrvmで指定したruby用にインストール。

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

  4. vimでGemファイルを修正  
`gem "rails"`の部分がコメントアウトされているのでコメントアウトを取る

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

  6. rails newする  
<https://ja.stackoverflow.com/a/17278/9008>  
で頂いた回答を参考に  
`bundle exec rails new . -B`  
このときGemfileをオーバーライトしますかというようなメッセージがでるのでYESと答える。（`-B`を付けずにYESと答えてしまうとうまくいかなかった）

  7. オーバーライトされたGemfileでもう一度 bundle install  
`bundle install`  
一度`--path
vendor/bundle`して実行しているので、`.bundle/config`ファイルが作られ、`vendor/bundle`にインストールすることを記憶しているので、今回から`--path
vendor/bundle`は不要。


CC BY-SA 3.0
2016-01-11T02:00:33.220
20815
2016-01-11T02:00:33.220
2017-04-13T12:52:38.920
-1
9008
17269
answer