STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

Rails 6.0へアップグレードしました

バックエンドエンジニアで STORES EC を担当しているただ @tdakak です。
hey には2021年の1月に入社しました。
現在は業務改善グループという、アプリケーションのセキュリティ対応や運用や開発をなめらかにするための仕組み作りを行うなんでも屋さんなチームに所属しています。
入社後に渡されたタスクの中のひとつが、STORES で採用している Web アプリケーションフレームワークRuby on Rails のアップグレード。バージョンを 5.2 から 6.0 へ上げるタスクです。
先日無事リリースできたので、今回のアップグレードで行ったことを書き残しておきます。

リリースまでのおもな流れ

アップグレードは以下の流れで進めました。

  1. Rails 6.0 の変更点を確認
  2. Rails 6.0 に上げて動かなくなったところを修正
    1. bundle update 実行
    2. Rails Diff を見ながら差分を調整
    3. テストを実行し、落ちている箇所を修正
  3. 社内勉強会で変更点や今後の開発での注意点を共有
  4. PR が大きくなってきたので分割
    • 第一弾: アップグレード前にマージしても影響ないもの
    • 第二弾: Rails 6.0 アップグレード(こちらがメイン)
  5. 第一弾をリリース
  6. 第二弾をリリース

アップグレードのポイント

Railsガイドを読む

まずは Rails ガイドの Ruby on Rails 6.0 リリースノート を一読することをおすすめします。
ここで大きな変更点をざっくり掴むことができます。

Rails Diffでconfigなどを合わせる

Rails Diff というサイトで、rails new したときに生成されるデフォルトのファイルの差分を確認できます。現在のバージョンとアップグレードするバージョンの差分を Rails Diff で表示し、見比べながら、設定等を追加削除できるので大変便利です。
こうして下地をしっかり整えておくことで次回以降のアップグレードも進めやすくなります。アップグレードのたびに差分が増えていくと大変ですからね。
この方法は五十嵐邦明さん @igaiga555 から教えていただきました(ありがとうございます!)

安全なリリースに向けての取り組み

ドキュメントや社内勉強会での共有

STORES ではバックエンドエンジニア向けの勉強会を定期開催しています。
その場を借りて、Rails 6.0 のおもな変更点、追加された機能を共有しました。双方向のコミュニケーションが可能な場で話したことにより、共有以外にも今後の開発で気になる点などについて質疑応答やディスカッションできたのはとても効果的だったと思っています。開発チーム内の目線を合わせるとてもよい機会になりました。
また、 STORES の開発で影響しそうな箇所はドキュメントに残しました。

f:id:tdakak:20210317145633p:plain

豊富なドキュメント

STORES の Rails アプリケーションは歴史も長く、規模もそれなりに大きくなっています。そんな Rails アプリケーションのアップグレードなので最初はかなり身構えていたのですが、入社直後でもほとんど困らないくらいにドキュメントが整備されていました。
前回の Rails アップグレードのドキュメントがしっかり残されていたことも大きなポイントでした。

段階的なリリース

同じチームの矢部 @tyabe の提案で、一度にすべてリリースするのではなく、段階的にリリースする方針としました。アップグレード前にリリースしても問題ない変更を切り出して、一足先にリリースしたのです。
一度にリリースするボリュームを小さくすることで、リスクを軽減できました。

SREチームと連携してのリリース

本番環境へのリリースは SRE チームに協力してもらいながら実施。
手動と目視で問題が出ないことをひととおり確認し、併せて Datadog や Sentry による監視も行い、注意深く見守りつつ進めました。

  • 何か問題が発生したときにはすぐ戻せるよう Blue / Green の準備
  • リクエストを少しずつ流して Datadog や Sentry で監視
  • 問題が出ないことを確認したらリクエストを増やす

開発チームと SRE チームが一丸となって取り組んだことで、アップグレードによる問題も発生せず、無事リリースを終えることができた!と思っています!

STORESは継続してアップグレードをしていきます

今回の Rails 6.0 へのアップグレードは通過点でしかありません。
安心安全な EC プラットフォームを運営していくため、hey ではこうしたアップグレードを継続して行っていきます。

hey では STORES に関わるみなさんへ「楽しい!」をお届けするソフトウェアエンジニアを募集しております。
Hello hey というオンライン会社説明会も定期的に行っています。また、個別にカジュアルトークする機会をリクエストしていただくのも大歓迎です!
ぜひお気軽に遊びにいらしてくださいね。

hello.hey.jp