見出し画像

約11年開発している「ONE CAREER」をインシデント0でRuby3.0系にバージョンアップしました

みなさんこんにちは!ワンキャリアでテックリードをしています、宇田川(X:@Ryoheiengineer)です!

昨年10月に当社で歴史の深いプロダクトである「ONE CAREER」をRuby3.0系にバージョンアップしたので、今回はそれについて記事にしたいと思います。このプロダクトは、約11年も前から続くリポジトリで、モノリシックなRailsで書かれています。
コード量は、130,000行以上にも及びます。


この記事ではRuby3.0系へのバージョンアップについて、やったこと、気をつけたポイント、実際の手順、成果と課題、まとめを共有いたします。
まだバージョンアップができていない方は、ぜひ参考にしていただけると嬉しいです。



やったこと

一番古いプロダクトをRuby 2.7.5からRuby 3.0.5にバージョンアップしました。というのも、2023年3月でRuby2.7系はEOLを迎えており、早急に対応する必要があったためです。
2023年8月から開発チームが時間を取れそうだったため、このタイミングでバージョンアップに着手し始めました。


対象のプロダクト

  • 約11年前からあるリポジトリ

  • モノリシックなRailsアプリケーションである

  • およそ130,000行以上のコードで構築されている


気をつけたポイント

Ruby 3.0.5への移行において、気をつけたのはRuby 3.0.5にバージョンアップするときの変更を最小限に抑えることです。

コード全体に及ぶ変更が予想される中、機能開発も進める必要があったため、機能開発と並行してバージョンアップを行う意思決定をしました。
それに伴い、Ruby 3.0.5への移行による影響を最小限に抑えるために、Ruby 3.0.5バージョンアップ時の変更差分をできるだけ少なくしたいと思いました。そこで、Ruby 2.7.5での対応が可能なものは事前に対処する方針を採りました。


実際の手順

1. Ruby 2.7 系から 3.0 系の変更点のリリース内容を確認し、変更点を把握する

まずは、リリースノートを見ながら、Ruby 2.7 系から 3.0 系の変更点にどんな変更があるのかを確認しました。
特に破壊的変更の部分は注意深くチェックしてリストアップし、チームメンバーとバージョンアップをどう進めるかについて作戦を練りました。

2. 本番環境でDeprecation Warningのログを出力する設定を行い、「どこが壊れるのか」を検知する仕組みを整える

ファイル、コード量ともに膨大であるため、「バージョンアップしたときにどこが壊れるのか」を人間による検証だけで把握するのは厳しいです。
そこで、「約8年開発されている Rails 製プロダクトを Ruby 3 にバージョンアップするために keyword parameters is deprecated を「網羅的に」検知する方法」を参考にDeprecation Warningをログに出力するようにしました。
これにより、バージョンアップ前のコードで「バージョンアップしたときにどこが壊れるのか」をログから検知することが可能になりました。

3. Ruby2.7系で先んじて対応できるものを対応して、リリース

Warningが出た箇所を中心にRuby2.7系の環境で修正可能なものは、先んじて対応してリリースしました。
数にすると6つほどPRを出しました。

4. Ruby 3.0.5へのバージョンアップ用のPRを作成し、検証環境で動作確認を行う

最後にRuby 3.0.5へのバージョンアップ用のPRを作成し、検証環境で動作確認をしました。
Ruby 3.0.5バージョン用PRの変更差分が50行程度と、最終的な変更差分を小さくすることができました。

5. 本番環境へのリリース

切り戻しをしやすくするため、Ruby 3.0.5へのバージョンアップPRのみをリリースしました。
無事にインシデントも発生せず、Ruby2.7系からRuby3.0系へのバージョンアップを完了することができました。


成果と課題

成果

重大なインシデントもなく、機能開発を並行しながらONE CAREERのRuby3.0系へのバージョンアップを完了することができました。

課題

ONE CAREERでは、Ruby用のGoogle Analytics APIを提供してくれるgem Sija/garbを使っていたのですが、garbではRuby 3.0.5への対応をしている一方でその対応を含んだバージョンがリリースされていない状況でした。
そのため、暫定対応としてcommitを指定して、garbをインストールするようにしています。grabのメンテナンスが停滞気味であるため、将来的にはメンテナンスが活発なgemに変更する予定です。
また、Ruby3.0系のEOLも迫っているため、Ruby3.1系へのバージョンアップも急ぐ必要があります。


まとめ

今回は当社で歴史の深いプロダクトであるONE CAREERのRubyを2.7系から3.0系にバージョンアップしたお話をしました。
安全に進める方法を確立し着実に進めることで、インシデント0でRuby3.0系へメジャーバージョンアップすることができました。

ワンキャリアでは Ruby on Rails が大好きなエンジニアを大募集しています。少しでも興味を持ってくださった皆様、ぜひカジュアルにお話しましょう!


▼ワンキャリアのエンジニア組織のことを知りたい方はまずこちら

▼カジュアル面談を希望の方はこちら

▼エンジニア求人票


この記事が参加している募集

オープン社内報

この記事が気に入ったらサポートをしてみませんか?