5 分でできちゃう!?Laravel 12 アップグレード
はじめに
Laravel 公式ドキュメントによると、Laravel 11 → 12 へのアップグレードはわずか 5 分で完了するらしいです。
Upgrading To 12.0 From 11.x
Estimated Upgrade Time: 5 Minutes
真相を探るべく、弊社サービス「えんさがそっ♪」で実際にアップグレードしてみました。
今回はチームの方針もあり、メンバー 4 人総出で取り組みました!
作業手順
- アップグレード作業
- 仕様変更による影響調査
- 動作確認
アップグレード作業 (所要時間: 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 人日)
以下の手順で取り組みました。
- アップグレードガイドに記載されている全ての仕様変更をリストアップ
- 手分けして各項目を調査し、サービスへの影響有無とその根拠を明確にする
- 最終的に、チームでレビューし、判断の正当性を確認する
結果として、全ての仕様変更について「影響なし」と判断できましたが、特にコンテナ(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 人日かかりました。
リリースまでの作業時間
それでは、改めて今回のアップグレードにかかった時間をまとめてみましょう!
- アップグレード作業:15 分
- 仕様変更による影響調査:1 人日
- 動作確認 & リリース:1 人日
計:約 2 人日
5 分ではできません!
知ってた!!
おわりに
今回の Laravel メジャーアップグレードは、これまでのバージョンと比べて癖のある仕様変更が少なく、比較的スムーズに進められたと感じています。もちろん、これは全てのアプリケーションに当てはまるわけではないので、ご自身の環境に合わせて十分な確認が必要です!
Laravel の公式アップグレードガイドには、いつも大変助けられています。
これほど詳細かつ丁寧にまとめられているからこそ、その情報を最大限に活用し、計画的にアップグレードを進めていくことが重要です。やはり、アップグレードは段階的に行うのが賢明だと改めて実感しました。
余談ですが、Laravel 10 → Laravel 11 のアップグレードについては、PHP カンファレンス 2024 で登壇させていただきました。
ご興味のある方は、ぜひ以下のスライドをご覧ください!

私たち BABY JOB は、子育てを取り巻く社会のあり方を変え、「すべての人が子育てを楽しいと思える社会」の実現を目指すスタートアップ企業です。圧倒的なぬくもりと当事者意識をもって、子どもと向き合う時間、そして心のゆとりが生まれるサービスを創出します。baby-job.co.jp/
Discussion