1
/
5

Railsを「6.1.4.1 → 7.1.3.4」にアップデートするまでに行ったこと【株式会社ライトコード】

はじめに

今回は、私が担当しているプロジェクトで、Railsを「6.1.4.1 → 7.1.3.4」までバージョンアップを行なったため、どのような流れで行ったかご紹介させていただけたらと思います。

【バージョンアップ前の環境】

  • docker環境
    • image: ruby:3.0.6-alpine
  • rails 6.1.4.1
  • ruby 3.0.6

記事をベースに以下の流れで行っていきました。

  1. 使用していない不要なコード
  2. 使用していないgemの削除
  3. rails以外のgem、rubyのバージョンアップ
  4. railsを7.0.8.4にバージョンアップ
  5. railsを7.1.3.4にバージョンアップ

1. 使用していない不要なコード

まずは、不要なコードを削除を行いました。

上記の作業を行う理由としては、以下になります。

  • バージョンアップによる影響が不要なコードに及んでエラーになるのを避けたい
  • コードの見通しがよくなり、その後の対応がしやすくなる。
    • プロジェクト内を全文検索をする時に、使用していないコードがヒットすると該当のコードを探しにくになるなど

バージョンアップ前に、コードを全体的にすっきりさせておくとなにかと対応がしやすくなるのは、なんとなくイメージがつくかと思います。

2. 使用していないgemの削除

この後の作業でgemのアップデートを行う前に、まずは使用していないgemを削除します。
使用していないgemをアップデートするのは無駄な作業なので、こちらの作業を行いました。
gemのREADMEから使用方法を確認して、VScodeの全文検索で使用しているか確認していきます。
前作業で、使用していないコードを削除したおかげで、全文検索でヒットしたコードは使用しているコードなのでコードを綺麗にしておいてよかったなと思いました。

3. rails以外のgem、rubyのバージョンアップ

ここからバージョンアップ作業に入ります。
記事では、まとめてgemのバージョンアップをする工程がありますが、自分は複数のgemのバージョンをあげてエラーが重なり解決に時間がかかるのを避けるため、開発環境テスト環境で使用するgemだけまとめてアップデートし、それ以外は以下の流れで1つずつバージョンアップしていきました。

◾️gemのバージョンをあげ、問題なくgemの機能を利用できていることを確認(テストで担保できる場合はテスト実行)

この時、rubyのバージョンが上げなくてもgemをバージョンアップできる所まで、上げていきました。
途中rubyのバージョンを上げないとバージョンアップできなくなった時にrubyのバージョンを上げました。

4. rails 7.0.8.4にバージョンアップ

一気に最新まで上げるのは怖いので、一旦7.0系の最新までバージョンアップしました。
事前にアップグレードガイドとリリースノートを確認して、アプリケーションと関係がありそうな箇所を把握しておきます。

アップグレードガイド
リリースノート

アップデート内容の中でも特に以下の変更点は、特に重要です。
暗号化アルゴリズムやオートロードのモード変更やキャッシュのシリアライズフォーマットの変更はアプリケーションに重大な影響を及ぼすので慎重に対応が必要です。

railsのバージョンを上げた後は、「rails app:update」を実行して、新バージョンで必要な設定を反映していきます。
反映内容は、全て「上書き更新」しました。
理由としては、バージョンアップによる更新内容を全てコミットしてまとめておきたいためです。
上記コミットを作成した後で、反映して良い設定項目は反映し、戻したい内容は戻していきます。
これにより、レビューする時に「バージョンアップによる更新内容を確認した上で、最終的な変更内容」を確認でき、レビューがしやすくなります。

アップデート後は、STG環境で動作検証し問題なければ完了です。

7.0.8.4にバージョンアップ時に起こった問題を一部紹介

テスト実行時にエラー

NoMethodError: undefined method `enabled?'

rspecのテスト実行時に上記のエラーが発生しました。

原因はセッションをモック方法が変更になったためです。

こちらの記事を参考に以下のようにモック方法で解消しました。

# spec/rails_helper.rb

config.before(:each) do
# let(:rspec_session) で指定された値を セッションの初期値にする
session = defined?(rspec_session) ? ActionController::TestSession.new(rspec_session): ActionController::TestSession.new({})

# sessionメソッドを上書き
allow_any_instance_of(ActionDispatch::Request).to receive(
:session
).and_return(session)
end

異なるrailsバージョン間でセッションを共有できない

こちらはかなりレアケースですが、開発していたサービスが以下のような構成になってる時に起こった問題です。

rails3、rails7が同時稼働しており、セッションをmemcachedに保存し共有し合っている。

記事の続きは下のURLをクリック!

https://rightcode.co.jp/blogs/48003



エンジニア積極採用中です!

現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!

採用ページはこちら:https://rightcode.co.jp/recruit

社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life

社長と一杯飲みながらお話しませんか?(転職者向け)

特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk

もっとワクワクしたいあなたへ

現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!

ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。

有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。

  • もっと大きなことに挑戦したい!
  • エンジニアとしてもっと成長したい!
  • モダンな技術に触れたい!

現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?

ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。

  • ライトコードの魅力を知っていただきたい!
  • 社風や文化なども知っていただきたい!
  • 技術に対して熱意のある方に入社していただきたい!

一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。

【コーポレートサイト】https://rightcode.co.jp/

【採用募集】https://rightcode.co.jp/recruit(こちらからの応募がスムーズ)

【wantedlyぺージ】https://www.wantedly.com/companies/rightcode

Invitation from 株式会社ライトコード
If this story triggered your interest, have a chat with the team?
株式会社ライトコード's job postings

Weekly ranking

Show other rankings
Like Hiroyuki Choshi's Story
Let Hiroyuki Choshi's company know you're interested in their content