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


はじめに

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

Your Ruby version is 2.6.3, but your Gemfile specified 2.5.1

対象読者

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

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

目的

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

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

Pathを通すとは、環境変数とは

「わかりそう」で「わからない」でも「わかった気」になれるIT用語「Path」

前提

・rbenv(rubyのバージョン管理用ツール)はインストール済み。

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

rbenvでrubyを使う【zsh】

 

目次

1 エラー内容

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

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

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

5 最後に

1 エラー内容

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

Your Ruby version is 2.6.3, but your Gemfile specified 2.5.1

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

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

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

(1)自分のPC環境におけるRubyのバージョンを確認する。

ruby -v

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

rbenv -v

(3)rbenvを使用し、バージョンの変更を試みる。

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

rbenv local 2.6.3

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

rbenv global 2.6.3

(4)Rubyのバージョンが切り替わっているか、確認する。

ruby -v

ruby 2.6.3p645 (〜)...         //出力結果

切り替りませんでした。

3 2で解決しなかった場合、参照先を確認する

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

Rubyのバージョンが切り替わらない時の対処法!

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

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

3−1 rubyコマンドを実行したときに起きていること

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

Pathを通すとは、環境変数とは

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

rubyコマンドも同じです。

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

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

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

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


which ruby

usr/bin/ruby   //出力結果

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

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

/Users/you/.rbenv/shims/ruby

なぜこのような構成になるかについては、こちらの記事を参考にさせていただきました。
rbenvの役割

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

~/.rbenv/ (ルートフォルダ )

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

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

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

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

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

「パスを通す」でやっていること(macOS / zsh)

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

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

vim ~/.zshrc

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

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

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

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

source ~/.zshrc

(7)rubyのバージョンを確認します。

ruby -v
ruby 2.5.1p645 (〜)...         //出力結果

うまくいきました!

5 最後に

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

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