Laravelは毎年2〜3月頃にメジャーバージョンアップします。パッケージ開発者にとって、新バージョンへの対応を素早く完了させることはエコシステム全体への貢献であり、自パッケージの信頼性を高める重要な活動です。Documentation Index
Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
このページはパッケージ開発の基礎の姉妹ページです。パッケージ開発の基本的な知識(サービスプロバイダー、
composer.json の構成など)を前提としています。Laravelのメジャーバージョンアップへの対応
対応の流れ
composer.json の require を更新する
新バージョンを依存範囲に追加します。古いバージョンのサポートを続ける場合は 新バージョンへの対応が完了し、古いバージョンのサポートを終了する場合は古い制約を削除します。
|| で並記します。テストを新バージョンで実行する
ローカルまたはCI環境で新しいLaravelバージョンを使ってテストを実行します。テストが通れば基本的な互換性は確認できています。通らない場合は、変更されたAPIや削除されたメソッドを修正します。
GitHub Actionsのテストマトリクスに新バージョンを追加する
CIのテストマトリクスにLaravelの新バージョンを追加して、継続的に互換性を確認します。詳細はテストマトリクスの設定例を参照してください。
公式パッケージを参考にする
対応方法に迷ったときは、Laravelの公式パッケージのcomposer.json を参照するのが最も確実です。
これらのパッケージはLaravelチームが管理しており、新バージョンへの対応が最も早く、illuminate/* の依存バージョンの書き方も参考になります。
PHPバージョン要件の更新
LaravelのバージョンアップはPHPの最低要件も引き上げることがあります。パッケージのcomposer.json でPHP要件もあわせて更新します。
| Laravel | 最低PHP要件 |
|---|---|
| Laravel 11 | PHP 8.2 |
| Laravel 12 | PHP 8.2 |
| Laravel 13 | PHP 8.3 |
| Laravel 14 | PHP 8.4 |
新しいPHP機能を積極的に使う場合
PHP 8.3以降の機能(型付き定数、新しいランダム関数など)を使いたい場合は、最低要件を引き上げる判断が必要です。最低要件の引き上げはセマンティックバージョニング上は破壊的変更なので、メジャーバージョンアップ時に行うのが適切です。旧バージョンサポートの終了戦略
旧バージョンをいつまでも維持することは、長期的にはメンテナンスコストを増大させます。明確なサポートポリシーを定めて、定期的に古いバージョンのサポートを終了することが健全なパッケージ運営につながります。サポート終了のタイミング
一般的なアプローチは、Laravelのサポート期間に合わせることです。Laravelは各バージョンに対してバグ修正18ヶ月、セキュリティ修正2年のサポートを提供しています。パッケージも同様のポリシーを採用するとユーザーに分かりやすくなります。| 判断基準 | 説明 |
|---|---|
| Laravelの公式サポート終了 | そのLaravelバージョンのサポートが終了したタイミングで対応をやめる |
| 利用状況 | Packagistのダウンロード統計で旧バージョン利用者が少なくなったタイミング |
| 機能追加の障壁 | 旧バージョン対応のために新機能の実装が複雑になってきたタイミング |
サポートポリシーをREADMEに明記する
ユーザーが期待値を正しく持てるよう、サポートポリシーをREADME.md に記載します。
旧バージョン維持のコスト
旧バージョンサポートを続けると次のコストが発生します。- バグ修正の二重対応 — 同じバグを複数ブランチで修正する必要がある
- 分岐コードの増加 — バージョンごとに異なる実装を条件分岐で吸収する複雑さ
- テストマトリクスの肥大化 — CI実行時間が長くなる
- セキュリティパッチの複雑化 — 古いバージョンにも安全にバックポートする必要がある
早期対応のメリット
Laravelのリリースと同時に対応が完了していると、ユーザーはすぐに新バージョンへ移行できます。これはパッケージの信頼性を示す重要なシグナルです。開発版で事前検証する
Laravelはbeta/RCを公開しない代わりに、dev-master または @dev を指定することで開発中の次期バージョンをインストールできます。メジャーリリース前に動作確認することで、ゼロデイ対応が可能になります。
@dev 制約でインストールすることもできます。
minimum-stability を dev に設定することで、開発版との依存関係を解決できます。
最初のステップは composer.json の変更だけでよい
完全な互換性確認の前でも、composer.json の依存範囲を更新してリリースするだけで、ユーザーはパッケージをインストールできるようになります。
リリース情報の追いかけ方
新バージョンのリリース情報をタイムリーに把握するための方法です。| 情報源 | 内容 |
|---|---|
| GitHub Watch機能 | リポジトリの「Watch → Custom → Releases」でメール通知を受け取る。framework以外の主要パッケージも登録しておくと良い |
| Laravel公式ブログ | メジャーリリースの発表と新機能解説 |
| Laravel公式ドキュメント アップグレードガイド | 破壊的変更の一覧 |
| laravel/framework コミットログ | 次期バージョンの変更を先取りする場合はコミットログを直接追う |
テストマトリクスの設定例
GitHub Actionsで複数のLaravelバージョンとPHPバージョンの組み合わせを自動テストするワークフロー例です。fail-fast: false の重要性
fail-fast: false を設定することで、一つの組み合わせが失敗しても他の組み合わせのテストを継続します。どのバージョンの組み合わせで問題が発生しているかを一度のCI実行で把握できます。
テストマトリクスの段階的な更新
新しいLaravelバージョンが出たら、マトリクスに追加します。古いバージョンのサポートを終了したら、マトリクスから削除します。composer.json のサンプル
複数バージョン対応のcomposer.json の完全な例です。
バージョンアップ対応チェックリスト
Laravelの新バージョンリリース前
Laravelの新バージョンリリース前
- 開発版(
dev-master/@dev)で動作確認を実施する - 公式アップグレードガイドで破壊的変更を確認する
- テスト環境で新バージョンへの対応を実装する
- テストマトリクスに新バージョンを追加してCIで確認する
リリース直後の初期対応
リリース直後の初期対応
-
composer.jsonのilluminate/*要件に新バージョンを追加する - 必要に応じてPHP要件を更新する
-
require-devのorchestra/testbenchも対応バージョンに更新する - 新バージョンをタグ付けしてPackagistに反映する
- READMEのバージョン互換性表を更新する
旧バージョンサポート終了時
旧バージョンサポート終了時
- CHANGELOG/READMEにサポート終了を明記する
-
composer.jsonから旧バージョンの制約を削除する - テストマトリクスから旧バージョンを削除する
- 旧バージョン用の条件分岐コードを整理する
関連ページ
パッケージ開発の基礎
サービスプロバイダーを核としたLaravelパッケージの開発方法を解説します。
Pestを使った高度なテスト
PestのExpectation APIやデータセットを使ったパッケージテストの書き方を解説します。