Skip to main content
Laravelは毎年2〜3月頃にメジャーバージョンアップします。パッケージ開発者にとって、新バージョンへの対応を素早く完了させることはエコシステム全体への貢献であり、自パッケージの信頼性を高める重要な活動です。
このページはパッケージ開発の基礎の姉妹ページです。パッケージ開発の基本的な知識(サービスプロバイダー、composer.json の構成など)を前提としています。

Laravelのメジャーバージョンアップへの対応

対応の流れ

1

composer.json の require を更新する

新バージョンを依存範囲に追加します。古いバージョンのサポートを続ける場合は || で並記します。
新バージョンへの対応が完了し、古いバージョンのサポートを終了する場合は古い制約を削除します。
illuminate/framework 全体ではなく illuminate/support など必要なコンポーネントだけに依存することで、依存ツリーを小さく保てます。
2

テストを新バージョンで実行する

ローカルまたはCI環境で新しいLaravelバージョンを使ってテストを実行します。
テストが通れば基本的な互換性は確認できています。通らない場合は、変更されたAPIや削除されたメソッドを修正します。
3

GitHub Actionsのテストマトリクスに新バージョンを追加する

CIのテストマトリクスにLaravelの新バージョンを追加して、継続的に互換性を確認します。詳細はテストマトリクスの設定例を参照してください。
4

新バージョン対応をリリースする

composer.json の変更を含む新しいバージョンをタグ付けしてリリースします。ユーザーは composer update だけで新しいLaravelバージョンにインストールできるようになります。

公式パッケージを参考にする

対応方法に迷ったときは、Laravelの公式パッケージの composer.json を参照するのが最も確実です。 これらのパッケージはLaravelチームが管理しており、新バージョンへの対応が最も早く、illuminate/* の依存バージョンの書き方も参考になります。

PHPバージョン要件の更新

LaravelのバージョンアップはPHPの最低要件も引き上げることがあります。パッケージの composer.json でPHP要件もあわせて更新します。

新しいPHP機能を積極的に使う場合

PHP 8.3以降の機能(型付き定数、新しいランダム関数など)を使いたい場合は、最低要件を引き上げる判断が必要です。最低要件の引き上げはセマンティックバージョニング上は破壊的変更なので、メジャーバージョンアップ時に行うのが適切です。
PHPの最低要件を引き上げると、古いPHPを使っているユーザーがパッケージを更新できなくなります。READMEやCHANGELOGに明記して事前に周知することが重要です。

旧バージョンサポートの終了戦略

旧バージョンをいつまでも維持することは、長期的にはメンテナンスコストを増大させます。明確なサポートポリシーを定めて、定期的に古いバージョンのサポートを終了することが健全なパッケージ運営につながります。

サポート終了のタイミング

一般的なアプローチは、Laravelのサポート期間に合わせることです。Laravelは各バージョンに対してバグ修正18ヶ月、セキュリティ修正2年のサポートを提供しています。パッケージも同様のポリシーを採用するとユーザーに分かりやすくなります。

サポートポリシーをREADMEに明記する

ユーザーが期待値を正しく持てるよう、サポートポリシーを README.md に記載します。

旧バージョン維持のコスト

旧バージョンサポートを続けると次のコストが発生します。
  • バグ修正の二重対応 — 同じバグを複数ブランチで修正する必要がある
  • 分岐コードの増加 — バージョンごとに異なる実装を条件分岐で吸収する複雑さ
  • テストマトリクスの肥大化 — CI実行時間が長くなる
  • セキュリティパッチの複雑化 — 古いバージョンにも安全にバックポートする必要がある
エコシステム全体がバージョンアップしていく中で、旧バージョンのサポートを適切に終了することは、ユーザーに最新環境への移行を促す効果もあります。

早期対応のメリット

Laravelのリリースと同時に対応が完了していると、ユーザーはすぐに新バージョンへ移行できます。これはパッケージの信頼性を示す重要なシグナルです。

開発版で事前検証する

Laravelはbeta/RCを公開しない代わりに、dev-master または @dev を指定することで開発中の次期バージョンをインストールできます。メジャーリリース前に動作確認することで、ゼロデイ対応が可能になります。
または @dev 制約でインストールすることもできます。
minimum-stabilitydev に設定することで、開発版との依存関係を解決できます。
prefer-stable: true を指定すると、安定版が存在する場合は安定版が優先されます。開発版でテストしながらも、安定版への自動切り替えが保証されます。

最初のステップは composer.json の変更だけでよい

完全な互換性確認の前でも、composer.json の依存範囲を更新してリリースするだけで、ユーザーはパッケージをインストールできるようになります。
小さな不具合はリリース後でもパッチバージョンで修正できます。完璧な対応を待つより、インストール可能な状態にすることを優先しましょう。

リリース情報の追いかけ方

新バージョンのリリース情報をタイムリーに把握するための方法です。

テストマトリクスの設定例

GitHub Actionsで複数のLaravelバージョンとPHPバージョンの組み合わせを自動テストするワークフロー例です。

fail-fast: false の重要性

fail-fast: false を設定することで、一つの組み合わせが失敗しても他の組み合わせのテストを継続します。どのバージョンの組み合わせで問題が発生しているかを一度のCI実行で把握できます。

テストマトリクスの段階的な更新

新しいLaravelバージョンが出たら、マトリクスに追加します。古いバージョンのサポートを終了したら、マトリクスから削除します。

composer.json のサンプル

複数バージョン対応の composer.json の完全な例です。

バージョンアップ対応チェックリスト

  • 開発版(dev-master / @dev)で動作確認を実施する
  • 公式アップグレードガイドで破壊的変更を確認する
  • テスト環境で新バージョンへの対応を実装する
  • テストマトリクスに新バージョンを追加してCIで確認する
  • composer.jsonilluminate/* 要件に新バージョンを追加する
  • 必要に応じてPHP要件を更新する
  • require-devorchestra/testbench も対応バージョンに更新する
  • 新バージョンをタグ付けしてPackagistに反映する
  • READMEのバージョン互換性表を更新する
  • CHANGELOG/READMEにサポート終了を明記する
  • composer.json から旧バージョンの制約を削除する
  • テストマトリクスから旧バージョンを削除する
  • 旧バージョン用の条件分岐コードを整理する

関連ページ

パッケージ開発の基礎

サービスプロバイダーを核としたLaravelパッケージの開発方法を解説します。

Pestを使った高度なテスト

PestのExpectation APIやデータセットを使ったパッケージテストの書き方を解説します。
最終更新日 2026年4月14日