インストールしていたRailsバージョンが原因でbundle installでエラーが出たときの解決方法

ウェブ

おもしろいWebサービスのアイデアが洪水のようにあふれて仕方ないので、プログラミングを勉強しています。実際にSNSを作りながら学べる「Ruby on Rails チュートリアル」に沿って勉強しているのですが、Railsのバージョンのせいで早々に壁にぶち当たってしまい、あたふたしながらなんとか解決したので忘れないようにメモしておきます。ちなみに、僕は第4版でやっています。

すごく初歩的なミスのせいで複雑に

今回、あたふたした原因はふたつありました。

  1. Macに最新のRailsをインストールしていた
  2. gemfileの書き換え後、保存が必要しなくてもいいと思い込んでいた

開発環境として「Cloud9」というWebサービスを使っているのですが、設定は自動で保存できるからファイルも同じ仕様なんだろうと思い込みしていたのがダメでした。早い段階で失敗できたので、すこしの違いでこんなにも結果が変わってしまうということが分かってよかったです。

参考:クラウドIDEサービス「Cloud9」で開発環境を作りRuby on Railsチュートリアル用に設定

Ruby on Rails チュートリアルとおりにgemfile書き換え

Railsのバージョンがチュートリアルでは5.0.3だったのに、5.0.4がインストールされていた件。サーバーを立ち上げてデフォルトのページを開いたときに一瞬時が止まりましたね。チュートリアルとおり進めたのに、どこをどう間違ったのかと。

いろいろいじってみるとMacに最新のRailsがインストールされていたのが反映されたんだと判明。でもバージョン指定してインストールしたはずやしなといろいろググっていると、ファイルを保存していなかったことに気づきました。

ファイルの保存方法ですが、Workspaceの「Gemfile」タブをクリックして、「Command+S」です。

コンフリクトしていたら迷わずbundle updateを

これでうまくいくかと思いきや、なぜか「Bundler could not find compatible versions for gem “activesupport”…」とエラーが出て「bundle update」してとのこと。

Bundler could not find compatible versions for gem "activesupport":
  In snapshot (Gemfile.lock):
    activesupport (= 5.0.4)

  In Gemfile:
    rails (= 5.0.3) was resolved to 5.0.3, which depends on
      activesupport (= 5.0.3)

    sass-rails (= 5.0.6) was resolved to 5.0.6, which depends on
      railties (< 6, >= 4.0.0) was resolved to 5.0.4, which depends on
        activesupport (= 5.0.4)

    sass-rails (= 5.0.6) was resolved to 5.0.6, which depends on
      railties (< 6, >= 4.0.0) was resolved to 5.0.4, which depends on
        activesupport (= 5.0.4)

    sass-rails (= 5.0.6) was resolved to 5.0.6, which depends on
      railties (< 6, >= 4.0.0) was resolved to 5.0.4, which depends on
        activesupport (= 5.0.4)

    sass-rails (= 5.0.6) was resolved to 5.0.6, which depends on
      railties (< 6, >= 4.0.0) was resolved to 5.0.4, which depends on
        activesupport (= 5.0.4)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

ちなみに、「bundle update」とはこういうことらしいです。

bundle updateはGemfile.lockの記述を無視して、GemfileでのGemの指定やそのバージョン指定などに基づいて、gemを更新する。 更新時にGemfile.lockを更新する。

引用:bundlerでの運用方法 – Qiita

いまいち理解できていなかったので、コマンドを実行するのがなんか怖いなと思ったのでググってたら、同じような症状な人がいました。まずは、gem listでバージョンを確認してみた。

$ gem list

これが実行した結果です。

actioncable (5.0.4, 5.0.3)
actionmailer (5.0.4, 5.0.3)
actionpack (5.0.4, 5.0.3)
actionview (5.0.4, 5.0.3)
activejob (5.0.4, 5.0.3)
activemodel (5.0.4, 5.0.3)
activerecord (5.0.4, 5.0.3)
activesupport (5.0.4, 5.0.3)...

activesupportがコンフリクトという症状を起こしていると推測。

コンフリクトとは、競合、衝突、対立、葛藤、緊張などの意味を持つ英単語。ITの分野では、複数の同種の何かが同じ資源を同時に利用しようとして競合状態になってしまうことを意味する場合が多い。

引用:コンフリクトとは – IT用語辞典

ということで案内とおりbundle update実行ー!!

$ bundle update

エラーが出ていたactivesupportは、5.0.3となりました。

Using activesupport 5.0.3 (was 5.0.4)

サーバーでRailsページを表示すると、チュートリアルとおりに表示されました。

参考にした記事:Rails5 でbundle installをするときにバージョンコンフリクトでつまったメモ – Qiita
参考にした記事:Railsチュートリアル(1~3章)をやった時のエラー解消 – himajin315の記録

どうしてもつまずいてしまうならスクールに通う方法も

プログラミングの勉強をひとりで続けていくには、なかなかの根気が必要です。何回も挫折している僕が言うんだから間違いありません笑

そんなときはプログラミングスクールで勉強するのをおすすめします!

スクールもいろいろありますが、僕がおすすめするのは「DIVE INTO CODE」です。

3年ほど前に、代表の野呂さんが主催しているプログラミング勉強会に参加し、Webサービスを作ったことがあります。かなり分かりやすかったので、スラスラと課題を進めていけたのを今でも覚えています。

そんな「DIVE INTO CODE」では、まったくの未経験から稼げるエンジニアになるためのコースが用意されています。中には、Railsチュートリアル用のコースも!

また、「DIVE INTO CODE」がほかのスクールと異なるのは、以下の3つです。

  • 今までの実績を元にした学ぶべき順序で習得できるカリキュラム
  • モチベーションを保つための環境やアイデアを発表する場所も!
  • 就職・転職サポートや卒業後も学習の場として利用できる

なかでもすごいと思ったのは、在学中から実際の現場と同じくチーム開発やDEMODAYといったアイデアを発表する場があるというところ。本気で稼げるエンジニアになるためのサポートがぎっしり詰まっています。

かといっても、即戦力コースが6ヶ月で298,000円(税抜)と、なかなかパッと出せる金額ではないはず。

そこで、まずは無料で開催されている説明会に参加することをおすすめします!説明会は東京で開催されていますが、遠方の方にはSkypeでも開催しているとのことですよ。

さいごに

保存をし忘れたという初歩の初歩的なことが原因でした。もしチュートリアルとおりに表示されないときは落ち着いて問題解決していきましょう。と自分に一番言い聞かせておきます。

もしくは、「teratail」で質問するべきやったかも。

参考:回答率9割超え!初心者や独学でのプログラミングの勉強にも役立つ無料のエンジニア特化型Q&Aサイト「teratail」

[kanren]