【Railsアップグレード】社内版 Railsアップグレードガイドを作りました
こんにちは!技術戦略部の平尾です。
URIHOをRailsで開発をしているRubyistです。
最近、Ruby 3.3 + Rails7.2へのバージョンアップを行いました。
このバージョンアップ作業に伴い社内版Railsアップグレードガイドを作りました。
社内への共有とコミュニティへの貢献を目指し公開します。
バージョンアップの効果に関する記事は別途書かせていただく予定です。
社内版 Railsアップグレードガイド
できるだけ原文のまま公開します。
前提条件
- Dockerを使ってコンテナ化されたRailsアプリケーションを想定している。
- RubyはDebian系の公式イメージを使っている。
- テストコードはRSpecを使っている。
基本方針
- Rubyを可能な限り最新まで上げた後に、周辺のGemのバージョンを最新まで上げ、最後にRailsのバージョンを上げる。
- バージョンアップの際は、リリースノートを確認し、破壊的変更がないか確認する。
- マイナーバージョンとメジャーバージョンを1つずつ上げて動作確認を行う。
- 開発体験を向上させてくれるGemファイルがある場合は積極的に導入する。
- 高いテストカバレッジを維持しつつアップグレードを行う。
- 重要な機能については毎アップグレードごとにテストを実行する。
- DEPRECATION WARNING(非推奨の警告)がでる場合は、その警告の対応を行う。
前作業
- Gemfileを整理し、使っていないGemがあれば削除する。
bundle outdated --strict
で期限切れのGemを把握しておくことをオススメする。
- テストコードのカバレッジを90%以上にする。
- 特に基幹機能のテストはカバレッジ100%にする。
Rubyのアップグレード
手順
- 前バージョンから次のバージョンまでのリリースノートをマイナーバージョン区切りで読む
- パッチバージョンもざっと目を通して影響を確認する
- 専用ブランチを切る
- 例:feature/ruby-versionup-x.y.z
- Rubyコンテナ内で作業
- 現状バージョン確認
ruby -v
cat /etc/os-release
- RubyGemsのアップデート(x, y, zはバージョン番号)
gem update -system x.y.z
- 公式のDockerイメージを使う場合はRubyGemsもアップグレードされるので対応不要
bundle install
を実行- RSpec実行
- エラー修正
- コード修正
- エラー修正
- 現状バージョン確認
- Dockerイメージ更新
- 公式のバージョン指定のイメージを使う
- エラー修正
- コマンドや設定の修正
- RSpec実行
- エラー修正
- コード修正
- エラー修正
- ステージング環境でテスト
- プルリクエスト作成
- QA
- リリース
Railsのアップグレード
手順
- 前バージョンから次のバージョンまでのアップグレードガイドを読む
- 破壊的変更が無いか確認する
- 専用ブランチを切る
- 例:feature/rails-versionup-x.y.z
- railsコンテナ内で作業
- Gemを切り分けてアップデート(伊藤純一さんメソッドより)。アップデート毎にRSpecを繰り返す。
- developmentとtestグループのgemを先にアップデートする
- Rails以外のGemを最新にする
- 影響が大きいGem
bundle update xxxxx
- 影響が小さいGem(一気に片付ける)
bundle update
- 影響が大きいGem
- GemfileでRailsをバージョンアップし、
rails app:update
を実行- 次のバージョンのデフォルト設定を反映する
- 次を確認
- config/initializers/new_framework_defaults_X.Y.rb
- application.rbのload_defaults
- デフォルト設定を1つずつ反映しつつRSpecを毎回実行
- load_defaultsを新バージョンに指定
- railsdiff.orgを参考にして、新しく追加されたgem等を確認する
- 次を確認
- 次のバージョンのデフォルト設定を反映する
- 基本はRailsアップグレードガイドが参考になるが、便利なGemが記載されているかも
- Gemを切り分けてアップデート(伊藤純一さんメソッドより)。アップデート毎にRSpecを繰り返す。
- ステージング環境でテスト
- プルリクエスト作成
- QA
- リリース
参考情報
次の記事を勉強させていただきました。
何れも優れた記事で、今回定めたガイドは大きな影響を受けています。
より詳細な情報が欲しい方は、以下の記事を参照してください。
まとめ
実はアップグレードしている途中で8.0がリリースされていましたが、意図的に計画外でしたので今回は7.2にしました。
次回は8.0にアップグレードする予定です。
アップグレードは下記に示すような様々なメリットがあります。
- パフォーマンス改善によるレスポンス速度の向上
- セキュリティ脆弱性の解消
- 開発体験の向上
- 開発生産性の向上
- etc.
ぜひ、このガイドを参考にRailsのアップグレードを進めてみてください。
ここまで記事を読んでいただき誠にありがとうございます。
ラクーンでは共にサービスをアジャイルに成長させる開発に携わるエンジニア・デザイナー・HTMLコーダーを大募集中です!
興味を持っていただいた方は是非、お話ししましょう!