- Web Engineer
- アウトバウンド営業
- Webエンジニア(リーダー)
- Other occupations (17)
- Development
- Business
はじめに
今回は、私が担当しているプロジェクトで、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
記事をベースに以下の流れで行っていきました。
- 使用していない不要なコード
- 使用していないgemの削除
- rails以外のgem、rubyのバージョンアップ
- railsを7.0.8.4にバージョンアップ
- 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系の最新までバージョンアップしました。
事前にアップグレードガイドとリリースノートを確認して、アプリケーションと関係がありそうな箇所を把握しておきます。
アップデート内容の中でも特に以下の変更点は、特に重要です。
暗号化アルゴリズムやオートロードのモード変更やキャッシュのシリアライズフォーマットの変更はアプリケーションに重大な影響を及ぼすので慎重に対応が必要です。
- アプリケーションはzeitwerkモードでの実行が必須
- キージェネレータのメッセージダイジェストクラスでcookieローテーターが必須になった
- ActiveSupport::Digestで用いられるメッセージダイジェストクラスがSHA256に変更
- ActiveSupport::Cacheの新しいシリアライズフォーマット
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