Ruby on Railsでbundle installでエラーが出た時のシンプルな解決方法

rails

Ruby on Railsで初めてwebアプリケーションを作成していると悩まされるのがbundle install時のエラー。

Rails初心者の人で参考書通りに進んでいるのに、エラーが発生した!という人も多いのでは?

今回ははRuby on Railsのbundle install時にエラーが出た際の対処方法について紹介します。

そもそもbundle installとは?

Ruby on Railsでなにかアプリを作る時に、作るサイトによって様々な機能を追加することがあります。
Ruby on RailsではGemと呼ばれるものを追加することで、様々な機能をwebアプリケーションに追加することができます。

この時の作業の流れとしては、

GemfileにGemの記載を追加→ターミナル(コマンドプロンプト)でbundle install

という流れになると思います。この一連の流れはbundlerと呼ばれるgemに用意されたコマンド(bundle install)を実行しています。

簡単に言うと、bundlerはGemを管理するためのGemとも言い換えることができます。

このbundle installで「ハマる」ことがある

話しが脱線しそうなので元に戻すと、Gemを追加した後にエラーが出てくることは多々あります。

Ruby on Railsの勉強を始めた方で、参考者や学習動画サイト通りにbundle installをしているはずなのに、エラーが出るという経験をした方も多いのでは?

Rubyやgem、Ruby on Railsは日々バージョンが新しくなっています。

購入した参考書やネット上にある記事が古いものだと、バージョンが違ったりしてエラーが出て来ることはあります。

これが、参考書のソースコードをそのままコピペしているのにエラーが出て来る!という原因にもなります。

一例を挙げると、今回筆者の環境でGemファイルのバージョン指定をしてbundle installをすると下記エラーが発生しました。

You have requested: sprockets = 2.11.1 The bundle currently has sprockets locked at 3.7.0.
Try running 'bundle update sprockets' 
If you are updating multiple gems in your Gemfile at once, try passing them all to 'bundle update'

これは一体どういったことが原因なのでしょうか?

このエラーを軸にRuby on Railsのbundle install時にエラーが出た際の解決方法について紹介します。

原因はバージョン指定によるもの

Ruby on Railsの初心者は参考書やネット上のサンプルコードなどを写経してRuby on Railsの勉強を始めると思います。

問題なければ、サクサクと進めるはずですがGemのバージョン指定がある場合には注意が必要です。

バージョン指定とは下記のようなコードを指します。

gem 'sprockets', '2.11.1'

ここではsprocketsというGemのバージョン2.11.1でインストールするという意味です。

エラーメッセージも何やらsprocketsに関するメッセージが出てきていますね。

You have requested: sprockets = 2.11.1
The bundle currently has sprockets locked at 3.7.0.
Try running 'bundle update sprockets' 
If you are updating multiple gems in your Gemfile at once, try passing them all to 'bundle update'

これはどういった意味でしょうか?下記で掘り下げて解説していきます。

bundle installでエラーが出た場合の対処方法

このエラーの場合、Gemfile.lockを削除することで解決します。

Ruby on Railsのファイルの中にあるGemfile.lockというファイルではGemのバージョン指定が管理されています。

なので、Gemfile.lockのファイルを削除してからもう一度bundle installをしてみましょう。(Gemfile.lockはRuby on Railsフォルダの中にあります。)

え?Gemfile.lockを削除しても大丈夫なの?と心配するかもしれませんが、大丈夫です。

Gemfile.lockはbundle installした後の結果を記したものです。削除し再度インストールを実行することで、また作成されます。

Gemのバージョンには注意を

問題が解決すれば、なんだそんなことかと思うかもしれませんがRuby on Railsの独学者にはよくあるミスです。しかも一度ハマるとなかなか抜け出せない。

例えば、あなたがRuby on Railsの参考書を元に何かサンプルアプリケーションを作成している場合、記載されているGemのバージョンが古いなど様々な問題が絡んでいます。

なので、書籍通りのソースコードで実行しても当時とはバージョンが異なっているためにbundle install時にエラーが発生することもあります。

これを解決する方法としては、RubyGem.orgというサイトで最新のバージョンを確認してから使うのもエラーを回避する手段です。

Gemの確認はRubyGem.orgがオススメ

最新のバージョンを確認するため、また公式の説明を確認するためにも[RubyGems.org](https://rubygems.org)の利用をオススメします。

サイトのアクセスし、検索窓から任意のGemを調べてみます。

今回は「sprockets」を入力してみました。

Gemの詳細ページに行くと、画面右側に「GEMFILE」と書かれた項目があります。

ここで、このGemに関するコードをコピーすることができます。

gem 'sprockets', '~> 3.7'

あとは、このコピーしたコードをgemfileにペーストするだけで現時点で公式がサポートしているGemのバージョンを使うことができます。

また画面下側の「Homepage」と書かれたリンクをクリックすれば、そのGemについて詳しく書かれたGithubの公式ページにも遷移することができます。

英語で書かれていますが、Gemについての説明や使い方などが説明されています。

おまけ

余談ですが、Ruby on RailsでGemをbundle installする場合にはターミナル

bundle install

と記述していると思います。
しかし、

bundle

とだけ入力してもbundle installと同じアクションとなります。

細かいようですが、Ruby on Railsでアプリケーションを作成するとbundle installする機会は多いと思います。ぜひ時短に活用してください。



カテゴリー