サービスのホスティングをしているherokuからRubyのバージョンが古いとアップデートを促すメールが来た。

調べてみると、どうやら、このままだと数か月後にデプロイできなくなるという。

それは困るのでアップデートをすることにした。

現行
heroku-16 Stackheroku-20 Stack
Ruby 2.3Ruby 2.5.8
Ruby on Rails 4.2.6Ruby on Rails 4.2.11.3

heroku-20 Stackの要件をコンパクトに目指す。

大まかな作業手順は確立していて、どんなGemを使っているのか、どんなコードを書いているのかで細かくわかれる。

アップデートの流れ

  1. Railsのアップデート
  2. 1回目のGemのアップデート
    • この時点では大した変化なし
  3. Rubyのアップデート
    • 2.3 -> 2.5だと破壊的な変更はないので特に悪影響出ず
  4. 2回目のGemのアップデート
    • jQuery UIのファイル構成が変わって、画面が表示されなくなった。新しいパスを定義して無事起動するように
  5. 動作確認と不具合対応
    • 各画面を開いて、表示が崩れていたり、動かない処理がないかの確認など
    • 幸い、大きな問題はなかった
  6. デプロイテスト
    • デプロイできるのかのテスト
    • ここでメモリ消費量削減とパフォーマンス向上で導入していたビルドパックの対応状況があやしいことが発覚。あやしく見えただけで実は問題がなかった
  7. リリース
    • いろいろやってきたことで、リリース自体は無事完了。準備は大事

アップデートの結果

  • Rubyの高速化の恩恵が非常に大きく、レスポンスが平均して1秒近く速くなっている。
  • あわせてタイムアウトが減った。
  • メモリ消費量の最大値が削減されて、システムリソースに余裕ができた。
  • 一部ファイルアップロード機能の不具合が改善された。
    • どうやらGem由来の不具合だったらしい。

一週間強の作業でこの成果は大成功だろう。

課題

  • 人力テスト
    • テスト自動化が必要
  • Ruby on Rails 5とRuby on Rails 6
    • Gemの更新はもちろん、Rubyの変更もあり、コードに手を加える必要がある
    • そこそこの規模感なのでそれなりの時間がかかるだろう

はてさて、どうやっていこうか。