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

## はじめに
先日既存アプリのRubyのバージョンを初めて上げたので、備忘録としてまとめておきます。
もし間違っている点があればご指摘いただけますと助かります。:bow_tone1:
今回は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のバージョンを今回使いたいバージョンに書き換えます。

```diff: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を貰うことが出来れば完璧です:thumbsup_tone1:

## 手っ取り早くアップデートしたい人向けコマンド・作業リスト
```
# 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のバージョンが違うと怒られることを確認
```

```diff: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とずっとにらめっこしていました。）

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


## その他参考
- [[初期設定]なぜ「.ruby-version」を作成するのか？] (https://qiita.com/shi-ma-da/items/74033b932800bb61b3f3)
- [rbenv local と rbenv global の違いについて](https://coderstable.com/notes/27)
  - 今回 `.ruby-version` ファイルについて変更が必要だったのですが、正直この子だれ……状態だったので調べました。 `.ruby-version` の存在により、プロジェクト単位で使用するRubyのバージョンを揃えられるんですね……:thinking:
勉強になりました。
- [ライブラリ? gem? bundler? -- Rubyのgem管理に関するあれこれまとめ] (https://qiita.com/3no3_tw/items/8c1e3e95c75edae1036d)
 - Xcodeのアップデートが必要になった時に~~待ち時間が長かったので~~自身の書き方に誤り等ないか確認する意味も含め読ませていただきました。自分がぼんやりとした感覚で使っていたことを痛感しました。