LoginSignup
3
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-16

はじめに

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

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 最後に

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

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1