既存のRailsアプリのRubyバージョンアップしてみた


はじめに

先日既存アプリのRubyのバージョンを初めて上げたので、備忘録としてまとめておきます。
もし間違っている点があればご指摘いただけますと助かります。
今回はRuby2.5.1から2.6.3へのバージョンアップを行いました。

環境

  • macOS Mojave
  • Rails 5.2.1
  • Homebrew 2.1.4
  • Ruby 2.5.1 (※バージョンアップ前)

バージョンアップしてみる

rubyのバージョンを上げる

こちら の記事を参考にRubyのバージョンを上げました。
私はリストに 2.6.3 がいなかったので rbenvruby-build をアップデートしました。

rails s してみる

ここで、とりあえず rails s してみます。
gem install bundler を実行してくれと言われることを確認します。

Bundlerをインストールする

言われるがままに gem install bundler を実行して、Bundlerをインストールします。
bundle install します。
Gemfileとバージョンが違う!と怒られることが確認できると思います。

Gemfile直す

  • Gemfileのバージョンを今回使いたいバージョンに書き換えます。
Gemfile
  source 'https://rubygems.org'
- ruby '2.5.1'
+ ruby '2.6.3'

bundle installする

bundle install します。
ここで私は mysql2 がインストールできない病にかかりました。

mysql2がインストールできない問題

Xcodeのアップデートが必要だったのですが、Xcodeのアップデートがずっと待機中から進まず苦労しました。

【Xcode】アップデート中に待機中から進まなかったときの解決例
こちらを試しましたが、個人としては凄く力技だなと感じたので、他に何かいい方法があれば教えてください。

神記事。どうやらmacOS Mojavaからopensslのパスを指定しないと上手くいかないみたいです。

参考: macOS Mojave にアップグレードしたら mysql2 gem のインストール時にエラーが発生した

今度こそrails sする

rails s します。
問題なく動けば第一関門クリア。

Rubocop動かす

ここも問題なく動けばクリア。
私はRubocopに

Error: Unknown Ruby version 2.6 found in `.ruby-version`.
Supported versions: 2.2, 2.3, 2.4, 2.5

と言われたのでアウトでした。Rubocopのバージョンを上げることに。
Rubocopは 0.60.0 からRubyの 2.6 系に対応したみたいです。
今回は最新の 0.71.0 に上げました。
0.71.0 はバグがある( https://github.com/rubocop-hq/rubocop/issues/6861 )ので、その修正分がリリースされるまでは少し待った方がいいかも。

以上でバージョンアップは一通り終わりです。後はRubocopに指摘されるところを直すなり、設定を変更するなりして、RubocopにOKを貰うことが出来れば完璧です

手っ取り早くアップデートしたい人向けコマンド・作業リスト

# Rubyのバージョンアップ

$ ruby --version                  # rubyのバージョンを確認する
$ rbenv versions                  # rbenvでインストールしてあるRubyのバージョンを確認する
$ rbenv install -l                # rbenvでインストールできるバージョンの確認
$ brew update                     # rbenvに欲しいバージョンがない場合のみ(brewの更新)
$ brew upgrade rbenv ruby-build   # rbenvに欲しいバージョンがない場合のみ(ruby-buildの更新)
$ rbenv install 2.6.3             # 2.6.3をインストール
$ rbenv local 2.6.3               # .ruby-versionを書き換える

# bundle installする

$ bundle exec rails s             # 失敗することの確認
$ gem install bundler             # bundlerのインストール
$ bundle install                  # GemfileのRubyのバージョンが違うと怒られることを確認
Gemfileの修正
  source 'https://rubygems.org'
- ruby '2.5.1'
+ ruby '2.6.3'
$ bundle install                      # 完了することを確認

# 動作確認

$ bundle exec rails s                 # 問題なく rails s できることの確認
$ bundle exec rubocop                 # 問題なく Rubocop が動くことの確認

最後に

初めてRubyのバージョンアップ対応を行いましたが、思っていたよりは簡単でした。むしろRubocopのバージョンアップに伴う修正や調べ事の方が大変だった印象です。(RubocopのCHANGELOGとずっとにらめっこしていました。)

記事を書いてるうちに「あれ?このコマンドって結局何してるの?」と思う機会も多々あり、あやふやだった知識を定着させるいい機会になりました!
この記事さえあればきっと余裕なので 次回以降のバージョンアップ対応はサクサク出来るはず。

その他参考