Laravel10を11にアップグレードしたお話

みなさん!こんにちは!

最近感動したことは、トラックボールマウスのトラックボールの部分を清掃したら滑りが良くなったことです。(この記事参考にしました)

無駄に、トラックボールをコロコロしちゃっています!@yamii_qqです。

本題

Laravelを業務で使用している皆さま!Laravelのアップグレード対応はお済みですか?

弊社はLaravel10を使用しており、セキュリティ修正期日の2025年2月4日までにLaravel11にアップグレードが必要な状況でした。

Laravelのサポートポリシー
(https://readouble.com/laravel/11.x/ja/releases.html から引用)

バージョンアップ戦略

11.x アップグレードガイド Laravelを読むと、アップグレード見積もり時間15分と書いており簡単そうに見えますが、そううまくはいきませんでした。

弊社のLaravelアプリケーションは作成されてから年月が経っており外部システムとの連携している部分が多数あるためです。

まずはアップグレードに向けて課題を洗い出しました。

主な課題

  • migrationファイルが大量にあり、カラムの変更による影響範囲が大きい
  • Laravel11にアップグレードする前に、アップグレード対応が必要なライブラリが多くある
  • 不具合があってはならないので、外部連携系の疎通確認を行う必要がある

Laravel11へのアップグレードは15分で済むかもしれませんが、その前段階でやることが多くありそうです。

課題への対応

思ったより大変だなと思いつつ、以下方法でのアップグレードを行いました。

1. マイグレーションの圧縮を行い、マイグレーションファイルをなくす

300個ほど、マイグレーションファイルが存在しており手動で修正すると丸一日ほどかかる状態だったので、マイグレーションの圧縮を行いました。

結果として、マイグレーションファイルが無い分カラムの変更を行う範囲が、数ヶ所直せば良いという状態になり大幅に工数を削減することができました!

2.phpunitのアップグレード(9系->10系)へのアップグレードを先に行う

先にテストライブラリをアップグレードすることで以下のメリットを享受できると判断したので、先に対応しました。

  • テストコードのみの修正であるので、実装コードの修正と比較してユーザーに影響を与える可能性が低い
  • Rectorを使用した一括修正が可能であり、効率よく修正ができる

詳しくはこちらに記事を書いたので、見てください! qiita.com

3.バージョンアップしたソースコードをリリースするために満たすべきチェックリストの作成

先に以下3つの観点からチェックリストを作成し、チームメンバーにレビューしてもらいました。

  • アップグレードしたライブラリが意図通りに動くか
  • プロダクトの既存機能が従来通り動くか
  • 外部連携している部分が意図通りに動くか

画像は実際にNotionで作成したドキュメントの一部です。

チェック項目(一部)

4.Laravel11本体と実装に関わる周辺ライブラリのアップグレード

15分で終わりました。

(記憶ではそのくらいです。人間年をとると1日が短く感じるらしいので、体感15分ですが、実際は1時間くらいかかっているかもしれないです)

普段からテストコードを厚く書いているので、大体の箇所はテストが通っていることを元にアップグレードによる不具合なしと判断できたのが大変助かりました。

5.チーム確認会を開催

動作確認をきちんとした上で、リリース承認をいただき、無事リリースすることができました!

まとめ

記事が公開されるのはセキュリティ修正期日後ですが、セキュリティ修正期日の2025年2月4日までにLaravel11にアップグレードを完了することができました。

バージョンアップは面倒臭い業務の一つですが、ライブラリを定期的にバージョンアップが将来の自分・チームを救うと思ってやっています。

最後に好きな記事を紹介して締めようと思います。ここまでお読みいただきありがとうございました。 qiita.com