はじめに
先日既存アプリのRubyのバージョンを初めて上げたので、備忘録としてまとめておきます。
もし間違っている点があればご指摘いただけますと助かります。
今回はRuby2.5.1から2.6.3へのバージョンアップを行いました。
環境
- macOS Mojave
- Rails 5.2.1
- Homebrew 2.1.4
- Ruby 2.5.1 (※バージョンアップ前)
バージョンアップしてみる
rubyのバージョンを上げる
[こちら] (https://qiita.com/_am_/items/c1dbeb11f40bbbac8fd9) の記事を参考にRubyのバージョンを上げました。
私はリストに 2.6.3
がいなかったので rbenv
と ruby-build
をアップデートしました。
rails s してみる
ここで、とりあえず rails s
してみます。
gem install bundler
を実行してくれと言われることを確認します。
Bundlerをインストールする
言われるがままに gem install bundler
を実行して、Bundlerをインストールします。
bundle install
します。
Gemfileとバージョンが違う!と怒られることが確認できると思います。
Gemfile直す
- Gemfileのバージョンを今回使いたいバージョンに書き換えます。
source 'https://rubygems.org'
- ruby '2.5.1'
+ ruby '2.6.3'
bundle installする
bundle install
します。
ここで私は mysql2
がインストールできない病にかかりました。
[mysql2がインストールできない問題] (https://qiita.com/nakki/items/e15c6b024d27edb2b96b)
Xcodeのアップデートが必要だったのですが、Xcodeのアップデートがずっと待機中から進まず苦労しました。
[【Xcode】アップデート中に待機中から進まなかったときの解決例] (https://chalife.tokyo/apple/xcode/xcode721-update/)
こちらを試しましたが、個人としては凄く力技だなと感じたので、他に何かいい方法があれば教えてください。
- [【Rails】MySQL2がbundle installできない時の対応方法] (https://qiita.com/fukudakumi/items/463a39406ce713396403)
- [bundle install 時、mysql2でエラー] (https://qiita.com/tktcorporation/items/0ef8c930fc18ce72c301)
神記事。どうやらmacOS Mojavaからopensslのパスを指定しないと上手くいかないみたいです。
参考: [macOS Mojave にアップグレードしたら mysql2 gem のインストール時にエラーが発生した] (https://satococoa.hatenablog.com/entry/2018/10/05/190847)
今度こそ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のバージョンが違うと怒られることを確認
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とずっとにらめっこしていました。)
記事を書いてるうちに「あれ?このコマンドって結局何してるの?」と思う機会も多々あり、あやふやだった知識を定着させるいい機会になりました!
この記事さえあればきっと余裕なので 次回以降のバージョンアップ対応はサクサク出来るはず。
その他参考
- [[初期設定]なぜ「.ruby-version」を作成するのか?] (https://qiita.com/shi-ma-da/items/74033b932800bb61b3f3)
-
rbenv local と rbenv global の違いについて
- 今回
.ruby-version
ファイルについて変更が必要だったのですが、正直この子だれ……状態だったので調べました。.ruby-version
の存在により、プロジェクト単位で使用するRubyのバージョンを揃えられるんですね……
勉強になりました。
- 今回
- [ライブラリ? gem? bundler? -- Rubyのgem管理に関するあれこれまとめ] (https://qiita.com/3no3_tw/items/8c1e3e95c75edae1036d)
- Xcodeのアップデートが必要になった時に
待ち時間が長かったので自身の書き方に誤り等ないか確認する意味も含め読ませていただきました。自分がぼんやりとした感覚で使っていたことを痛感しました。