【Rubyバージョンエラー】Your Ruby version is ~,but your Gemfile specified ~の解決方法

#はじめに
本記事では、以下のエラーについて、解決方法と、なぜそう考えたかを書いていきます。
解決するにあたっては、多くの方の記事やブログを参考にさせていただきました。
リンクは、該当箇所に随時貼らせていただいてます。

```
Your Ruby version is 2.6.3, but your Gemfile specified 2.5.1
```

#対象読者
・Rubyを学習しはじめて、数ヶ月〜１年程度の方。
・上記のエラーに初めてあたった方。
・「環境変数の設定をどうにかすれば、解決するらしいことはわかった。」
「しかし、vimやシェルという言葉を聞くと、解決する前に一呼吸おきたくなる」という方。

※本記事では、vimやシェルなどの用語について詳しい説明はいたしません。


#目的
・vimを操作してrbenv下のファイルにPATH（以下、たんに「パス」といいます。）を通し、バージョンエラーを解決する。

・なぜ、パスを通すことで、問題が解決するのかを理解する。


[Pathを通すとは、環境変数とは](https://qiita.com/fuwamaki/items/3d8af42cf7abee760a81 "Pathを通すとは、環境変数とは")

[「わかりそう」で「わからない」でも「わかった気」になれるIT用語「Path」]
(https://wa3.i-3-i.info/word1166.html "「わかりそう」で「わからない」でも「わかった気」になれるIT用語「Path」")


#前提
・rbenv（rubyのバージョン管理用ツール）はインストール済み。

・変更したいrubyバージョン（今回でいうと、2.5.1）がインストールされていることは、確認済み。

[rbenvでrubyを使う【zsh】]
(https://qiita.com/itsmedachan/items/b86a124aec5a55b375e8 "rbenvでrubyを使う【zsh】")

　
#目次
１　エラー内容

２　Rubyのバージョン切り替えを試す

３　２で解決しなかった場合、rubyの参照先を確認する
　３−１ rubyコマンドを実行したときに起きていること
　３−２ rubyコマンドの実行元ファイルを確認する方法

4 rubyコマンドが、rbenv下にあるファイルから実行されるように設定する（パスを通す）

5　最後に

###１　エラー内容

エラー内容はこちらです。


```
Your Ruby version is 2.6.3, but your Gemfile specified 2.5.1
```
エラーの意味は、
「あなたのPC環境におけるRubyのバージョンは、2.6.3です。」
「しかし、あなたが現在開発しているアプリケーションのRubyのバージョンは、2.5.1です。」
というものです。

###２　Rubyのバージョン切り替えを試す。

以下の手順で、バージョンの切り替えを試してみます。
・Rubyのバージョンを確認する。
・rbenvを使用し、バージョンを切り替える。
・切り替わったか確認する。


（１）自分のPC環境におけるRubyのバージョンを確認する。

```
ruby -v
```

（２）開発中のアプリケーションに適用されているRubyのバージョンを確認する。

```
rbenv -v
```

（３）rbenvを使用し、バージョンの変更を試みる。

特定のディレクトリで使うRubyのバージョンを指定するとき。

```
rbenv local 2.6.3
```

システム全体で使うRubyのバージョンを指定するとき。

```
rbenv global 2.6.3
```

（４）Rubyのバージョンが切り替わっているか、確認する。

```
ruby -v

ruby 2.6.3p645 （〜）...         //出力結果
```

切り替りませんでした。

###３　２で解決しなかった場合、参照先を確認する

上記の方法で切り替わらない場合、rubyコマンドを実行する際の参照先が違う可能性があります。

[Rubyのバージョンが切り替わらない時の対処法！]
(https://qiita.com/opiyo_taku/items/3312a75d5916f6cd32b1 "Rubyのバージョンが切り替わらない時の対処法！")

本記事では、エラーの原因や、なぜその方法で解決できるのかを考えていきます。
このため、以下の流れで説明します。

３−１ rubyコマンドを実行したときに起きていること
３−２ rubyコマンドの実行元ファイルを確認する方法

####３−１ rubyコマンドを実行したときに起きていること

私たちが持っているPC内には、あらゆるコマンドが格納されたファイルがたくさん入っています。

[Pathを通すとは、環境変数とは]
(https://qiita.com/fuwamaki/items/3d8af42cf7abee760a81 "Pathを通すとは、環境変数とは")


例えば、私たちがターミナル上でコマンドを打っているとき。
PC内では、たくさんあるファイルの中から、ターミナルで打ったコマンドが格納されているファイルを見つけ出し、そこからコマンドを取り出して実行します。

rubyコマンドも同じです。

しかし、rubyコマンドが入っているファイルは、一つではない場合があります。
どういうことかというと、今回のようにrbenvをインストールした場合は、
・インストールした際に作られた、rbenv下にあるファイル
・もともとPC内にあるファイル
の両方に、rubyコマンドが入っている場合がある、ということです。

今回のケースでいうと、
・rbenv下にあるファイル　→　2.5.1バージョンのrubyコマンドが入っている。
・もともとPC内にあるファイル　→　2.6.3バージョンのrubyコマンドが入っている。
という状況が考えられる、ということです。

####３-２ rubyコマンドの実行元ファイルを確認する方法

では、実際に「rubyコマンドを打った場合、どこのファイルに入っているrubyコマンドを実行しているのか？」を確認してみましょう。
参照先を確認するには、whichコマンドを使用します。

```

which ruby

usr/bin/ruby   //出力結果
```

この出力結果は、
「rubyコマンドを実行することで、usr下のファイルにあるrubyコマンドを実行する」
という意味になります。

rbenvによってrubyのバージョン管理を行っている場合、rubyコマンドはrbenv下にあるファイルにも入っています。
そのrubyコマンドが実行されていれば、以下のような出力結果になります。

```
/Users/you/.rbenv/shims/ruby
```

なぜこのような構成になるかについては、こちらの記事を参考にさせていただきました。
[rbenvの役割]
(https://qiita.com/souichirou/items/d4196faa0df9e4bacf17 "rbenvの役割")

記事の一部を引用させていただくと、
rbenvをインストールする際に、

~/.rbenv/　（ルートフォルダ　）

~/.rbenv/shims/ （rubyやgemがインストールしてくれるコマンドのラッパーを保存するフォルダ）

などなどがPCに入ります。
このshimsフォルダの中に、実行したいrubyコマンドが格納されます。



###４　rubyコマンドが、rbenv下にあるファイルから実行されるように設定する（パスを通す）

PCに、「usr/bin/ruby」ではなく、「/Users/you/.rbenv/shims/ruby」の方から、rubyコマンドを持ってくるよう、設定してあげます。

参考にさせていただいたのは、以下の記事です。

[「パスを通す」でやっていること（macOS / zsh）]
(https://knmts.com/become-engineer-2/ "「パスを通す」でやっていること（macOS / zsh）")

ここでは、以下の手順を書いていくこととします。
・vimを開く
・コードを書いて、保存、終了する。
・変更内容を反映させる。


（１）下記コマンドで、vimを開きます。
（シェルでbashを使用されている方は、「.zshrc」を「.bash_profile」にかえてください。）

```
vim ~/.zshrc
```

（２） i を押して、編集可能な状態にします。画面上は何も変わりませんが、追記や編集が可能になっています。

（３）以下のコードを書きます。すでに記載がある場合は、その下の行に書きます。

```
export PATH="~/.rbenv/shims:/usr/local/bin:$PATH"
eval "$(rbenv init -)"
```

（４） esc を押して、保存、終了が可能な状態にします。カーソルが一番下あたりに移動すると思います。
（５） :wq と打ち、enter を押します。
（６）元の画面に戻りますので、以下のコマンドを打ちます。sourceコマンドは、変更を反映させるコマンドです。

```
source ~/.zshrc
```


（７）rubyのバージョンを確認します。

```
ruby -v
ruby 2.5.1p645 （〜）...         //出力結果
```

うまくいきました！


###５　最後に
記事の内容に間違い、誤字脱字などありましたら、コメントで教えていただけるとありがたいです。

参考、引用させていただいた記事、ブログの著者の方々、ありがとうございます。