【Ruby】systemのrubyやbundlerを参照していることで起こるエラーを解決する【mac】


##状況

macで初めてrubyの環境を構築する際に、macにデフォルトで入っているrubyやbundlerのPATHを参照していたことが原因で、プロジェクトで使用するrubyやbundlerのバージョンとの整合性が取れずエラーが多発したので、備忘録メモです。


##エラーが出るまでの流れ
homebrewでruby-buildとrbenvをインストールしました。
homebrewでプロジェクトで使われている（Gemfileに記述されている）ruby2.3.0をインストールしました。

```
Installing ruby-2.3.0...
ruby-build: use readline from homebrew
Installed ruby-2.3.0 to /Users/user/.rbenv/versions/2.3.0
```

問題なくruby2.3.0のインストールが完了しました。

##RubyのPATHを変更する
次に以下のコマンドを実行すると、エラーが出てしまいました。

```
$ bundle install --path vendor/bundle
Your Ruby version is 2.3.7, but your Gemfile specified 2.3.0

```

というエラーです。

`$ ruby -v`で確認をすると、なぜかruby2.3.7を参照しています。

```
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

```

which rubyを行うと、

```

$ which ruby
/usr/bin/ruby

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

//パスを確認すると、そもそも/Users/ユーザー名/.rbenv/shims が PATH に含まれていません。


```


こちらを参考にしました→
・[rbenvでバージョンがうまく切り替わらなかった時にやったこと](https://qiita.com/akatsuki174/items/c0384b9903b4b5cbbdaf)
・[【2018年版】macにrbenvを入れてrubyを管理できるようにしちゃう](https://qiita.com/Alex_mht_code/items/d2db2eba17830e36a5f1)
[rbenv+ruby-buildを使ってMacにRubyの環境を構築する](https://qiita.com/1000ch/items/a61e65fe82d8bdea840e)

```
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ rbenv rehash
$ which ruby
/Users/user/.rbenv/shims/ruby
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin18]

```

rubyのPATHを設定し、2.3.0を参照することに成功しました。

##bundlerのPATHを変更する

そのあと、`$ bundle install --path vendor/bundle`を行うとまたも`Your Ruby version is 2.3.7, but your Gemfile specified 2.3.0`のエラーが出ました。


```

//bundleのPATHを確認してみる
$ which bundle
/usr/local/bin/bundle

$ echo $PATH
/Users/user/.rbenv/shims:/Users/user/.rbenv/bin:/Users/user/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/.rbenv/shims:/Users/user/.rbenv/bin

```

bundlerがshimsの中にありません。
さらに、`$ bundle env`を実行してみると、

```

$ bundle env
## Environment

Bundler       2.0.2
  Platforms   ruby, universal-darwin-18
Ruby          2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

```

なぜかbundlerがruby2.3.7を参照しています。
ここに原因がありそうです。


##対処方法
teratailに質問をして回答をいただきましたので、転記([【macOS】Your Ruby version is 2.3.7, but your Gemfile specified 2.3.0](https://teratail.com/questions/203927))になりますが、記載します（asm様いつもありがとうございます）

>ruby 2.3だとbundlerはデフォルトでインストールされるgemではないので、自分でインストールが必要です。
gemコマンドが/Users/user/.rbenv/shims/rubyになってることを確認した後に
$ gem install bundler
を実行してください

**bundlerがshimsの中インストールされておらず、デフォルトのbundlerがそのままsystemのrubyを参照していることが原因でした。（この原因分析が間違っていたらご教示下さい。）**

```
$ which gem
/Users/user/.rbenv/shims/gem　　　　　　//OK

$ gem install bundler
Successfully installed bundler-2.0.2
Parsing documentation for bundler-2.0.2
Done installing documentation for bundler after 5 seconds
1 gem installed

$ which bundler
/Users/user/.rbenv/shims/bundler　//OK


```

参照しているbundleが.rbenv/shims/bundleになることに成功しました。


その後、`$ rbenv rehash`を実行します。

bundlerをインストールしたら毎回このコマンドを実行しなければいけません。
なぜなら、このコマンドにより、gem,rake,rails,rubyなどのコマンドをrbenvに渡してくれるshimsという軽量実行ファイルをインストールしているからです。（ごめんなさい[Github](https://github.com/rbenv/rbenv#understanding-shims)を直訳しているだけで完全に理解していません。）

これをしないままだと、また同じエラーが出てしまいました。

その後、`$bundle install --path vendor/bundle` をすることができました。
今回のエラーは以上です。