はじめに
本記事では、以下のエラーについて、解決方法と、なぜそう考えたかを書いていきます。
解決するにあたっては、多くの方の記事やブログを参考にさせていただきました。
リンクは、該当箇所に随時貼らせていただいてます。
Your Ruby version is 2.6.3, but your Gemfile specified 2.5.1
対象読者
・Rubyを学習しはじめて、数ヶ月〜1年程度の方。
・上記のエラーに初めてあたった方。
・「環境変数の設定をどうにかすれば、解決するらしいことはわかった。」
「しかし、vimやシェルという言葉を聞くと、解決する前に一呼吸おきたくなる」という方。
※本記事では、vimやシェルなどの用語について詳しい説明はいたしません。
目的
・vimを操作してrbenv下のファイルに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】")
目次
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のバージョンが切り替わらない時の対処法!]
(https://qiita.com/opiyo_taku/items/3312a75d5916f6cd32b1 "Rubyのバージョンが切り替わらない時の対処法!")
本記事では、エラーの原因や、なぜその方法で解決できるのかを考えていきます。
このため、以下の流れで説明します。
3−1 rubyコマンドを実行したときに起きていること
3−2 rubyコマンドの実行元ファイルを確認する方法
3−1 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コマンドが入っている。
という状況が考えられる、ということです。
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の役割]
(https://qiita.com/souichirou/items/d4196faa0df9e4bacf17 "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)]
(https://knmts.com/become-engineer-2/ "「パスを通す」でやっていること(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 最後に
記事の内容に間違い、誤字脱字などありましたら、コメントで教えていただけるとありがたいです。
参考、引用させていただいた記事、ブログの著者の方々、ありがとうございます。