🆙

5 分でできちゃう!?Laravel 12 アップグレード

に公開

はじめに

Laravel 公式ドキュメントによると、Laravel 11 → 12 へのアップグレードはわずか 5 分で完了するらしいです。

Upgrading To 12.0 From 11.x

Estimated Upgrade Time: 5 Minutes

https://laravel.com/docs/12.x/upgrade#upgrade-12.0

真相を探るべく、弊社サービス「えんさがそっ♪」で実際にアップグレードしてみました。
今回はチームの方針もあり、メンバー 4 人総出で取り組みました!

作業手順

  1. アップグレード作業
  2. 仕様変更による影響調査
  3. 動作確認

アップグレード作業 (所要時間: 15 分)

まずは、アップグレードガイドに沿って、以下の依存ライブラリをアップグレードする必要があります。

  • laravel/framework to ^12.0
  • phpunit/phpunit to ^11.0
  • pestphp/pest to ^3.0

※ えんさがそっ♪ では、phpunit/phpunit はアップグレード済み、
 pestphp/pest は導入していないので、省略しています。

作業自体は、すぐに終わりました。
以下のコマンドを実行することで、依存関係も考慮して更新してくれるので便利です。
composer update ライブラリ1 ライブラリ2 --with-dependencies

仕様変更による影響調査 (所要時間: 1 人日)

以下の手順で取り組みました。

  1. アップグレードガイドに記載されている全ての仕様変更をリストアップ
  2. 手分けして各項目を調査し、サービスへの影響有無とその根拠を明確にする
  3. 最終的に、チームでレビューし、判断の正当性を確認する

結果として、全ての仕様変更について「影響なし」と判断できましたが、特にコンテナ(Container)周りの調査には時間を要し、このフェーズ全体で 1 人日かかりました。

その理由を次項で詳しく説明します。

コンテナ(Container)

DI コンテナがクラスインスタンスを解決する際、クラスプロパティのデフォルト値を尊重するようになりました。

以下の例を挙げると、$date が未設定の時にデフォルト値の null が設定されるようになります。これは、PHP の言語仕様を DI コンテナがより忠実に反映するようになったと捉えられます。

Laravel において DI コンテナはサービスの基盤となる重要な要素です。そのため、この変更が既存のコードベースに与える影響は小さくないと考え、念入りに調査する必要がありました。

class Example
{
    public function __construct(public ?Carbon $date = null) {}
}
 
$example = resolve(Example::class);
 
// <= 11.x
$example->date instanceof Carbon;
 
// >= 12.x
$example->date === null;

引用:公式アップグレードガイド

動作確認 & リリース (所要時間: 1 人日)

メジャーアップグレードでは、実際にユーザーの利用を想定したアプリケーション全体の簡単な動作確認を必ず行っています。今回もメンバー 2 人でこの動作確認を実施しました。一通りの確認に 1 〜 2 時間かかります。

いつも通り、ローカル環境と検証環境(AWS 環境)の両方で確認を行ったため、半日強の時間を費やしました。

最終的なリリース準備も含め、このフェーズ全体で 1 人日かかりました。

リリースまでの作業時間

それでは、改めて今回のアップグレードにかかった時間をまとめてみましょう!

  1. アップグレード作業:15 分
  2. 仕様変更による影響調査:1 人日
  3. 動作確認 & リリース:1 人日

計:約 2 人日

5 分ではできません!
知ってた!!

おわりに

今回の Laravel メジャーアップグレードは、これまでのバージョンと比べて癖のある仕様変更が少なく、比較的スムーズに進められたと感じています。もちろん、これは全てのアプリケーションに当てはまるわけではないので、ご自身の環境に合わせて十分な確認が必要です!

Laravel の公式アップグレードガイドには、いつも大変助けられています。

これほど詳細かつ丁寧にまとめられているからこそ、その情報を最大限に活用し、計画的にアップグレードを進めていくことが重要です。やはり、アップグレードは段階的に行うのが賢明だと改めて実感しました。

余談ですが、Laravel 10 → Laravel 11 のアップグレードについては、PHP カンファレンス 2024 で登壇させていただきました。

ご興味のある方は、ぜひ以下のスライドをご覧ください!

BABY JOB  テックブログ

Discussion