バージョニングスキーム

Laravelおよびその他のファーストパーティパッケージは、セマンティックバージョニングに従っています。主要なフレームワークのリリースは毎年(約Q1)行われますが、マイナーおよびパッチリリースは毎週行われることもあります。マイナーおよびパッチリリースには決して破壊的変更を含めるべきではありません。

アプリケーションやパッケージからLaravelフレームワークやそのコンポーネントを参照する際は、常に^11.0のようなバージョン制約を使用するべきです。なぜなら、Laravelの主要リリースには破壊的変更が含まれるからです。しかし、私たちは常に、1日以内に新しい主要リリースにアップデートできるように努めています。

名前付き引数

名前付き引数はLaravelの後方互換性ガイドラインには含まれていません。Laravelのコードベースを改善するために、必要に応じて関数引数の名前を変更することがあります。したがって、Laravelメソッドを呼び出す際に名前付き引数を使用する場合は、将来的にパラメータ名が変更される可能性があることを理解した上で慎重に行うべきです。

サポートポリシー

すべてのLaravelリリースに対して、バグ修正は18ヶ月間提供され、セキュリティ修正は2年間提供されます。Lumenを含むすべての追加ライブラリについては、最新の主要リリースのみがバグ修正を受け取ります。さらに、Laravelがサポートするデータベースバージョンについては、こちらを確認してください。

バージョン PHP (*) リリース バグ修正まで セキュリティ修正まで
9 8.0 - 8.2 2022年2月8日 2023年8月8日 2024年2月6日
10 8.1 - 8.3 2023年2月14日 2024年8月6日 2025年2月4日
11 8.2 - 8.3 2024年3月12日 2025年9月3日 2026年3月12日
12 8.2 - 8.3 2025年第1四半期 2026年第3四半期 2027年第1四半期

サポート終了

セキュリティ修正のみ

(*) サポートされているPHPバージョン

Laravel 11

Laravel 11は、アプリケーション構造の合理化、秒単位のレート制限、ヘルスルーティング、優雅な暗号化キーのローテーション、キューのテスト改善、Resendメールトランスポート、プロンプトバリデータ統合、新しいArtisanコマンドなど、Laravel 10.xで行われた改善を引き継いでいます。さらに、Laravel ReverbというファーストパーティのスケーラブルなWebSocketサーバーが導入され、アプリケーションに強力なリアルタイム機能を提供します。

PHP 8.2

Laravel 11.xは、最低PHPバージョン8.2を必要とします。

合理化されたアプリケーション構造

Laravelの合理化されたアプリケーション構造は、Taylor OtwellNuno Maduroによって開発されました

Laravel 11は、既存のアプリケーションに変更を加えることなく、新しいLaravelアプリケーションのための合理化されたアプリケーション構造を導入します。この新しいアプリケーション構造は、Laravel開発者がすでに慣れ親しんでいる多くの概念を保持しつつ、よりスリムで現代的な体験を提供することを目的としています。以下では、Laravelの新しいアプリケーション構造のハイライトについて説明します。

アプリケーションブートストラップファイル

  1. ``````php
  2. return Application::configure(basePath: dirname(__DIR__))
  3. ->withRouting(
  4. web: __DIR__.'/../routes/web.php',
  5. commands: __DIR__.'/../routes/console.php',
  6. health: '/up',
  7. )
  8. ->withMiddleware(function (Middleware $middleware) {
  9. //
  10. })
  11. ->withExceptions(function (Exceptions $exceptions) {
  12. //
  13. })->create();
  14. `

サービスプロバイダー

デフォルトのLaravelアプリケーション構造には5つのサービスプロバイダーが含まれていましたが、Laravel 11にはAppServiceProviderが1つだけ含まれています。以前のサービスプロバイダーの機能はbootstrap/app.phpに統合され、フレームワークによって自動的に処理されるか、アプリケーションのAppServiceProviderに配置される可能性があります。

たとえば、イベントの発見はデフォルトで有効になっており、イベントとそのリスナーの手動登録の必要性が大幅に排除されます。ただし、手動でイベントを登録する必要がある場合は、AppServiceProviderで簡単に行うことができます。同様に、AuthServiceProviderで以前に登録したルートモデルバインディングや認可ゲートもAppServiceProviderで登録できます。

オプトインAPIおよびブロードキャストルーティング

  1. ``````shell
  2. php artisan install:api
  3. php artisan install:broadcasting
  4. `

ミドルウェア

以前、新しいLaravelアプリケーションには9つのミドルウェアが含まれていました。これらのミドルウェアは、リクエストの認証、入力文字列のトリミング、CSRFトークンの検証など、さまざまなタスクを実行していました。

Laravel 11では、これらのミドルウェアはフレームワーク自体に移動され、アプリケーションの構造に負担をかけないようになりました。これらのミドルウェアの動作をカスタマイズするための新しいメソッドがフレームワークに追加され、アプリケーションのbootstrap/app.phpファイルから呼び出すことができます:

  1. ->withMiddleware(function (Middleware $middleware) {
  2. $middleware->validateCsrfTokens(
  3. except: ['stripe/*']
  4. );
  5. $middleware->web(append: [
  6. EnsureUserIsSubscribed::class,
  7. ])
  8. })

すべてのミドルウェアはアプリケーションのbootstrap/app.phpを介して簡単にカスタマイズできるため、別のHTTP「カーネル」クラスの必要性は排除されました。

スケジューリング

新しいScheduleファサードを使用して、スケジュールされたタスクをアプリケーションのroutes/console.phpファイルに直接定義できるようになり、別のコンソール「カーネル」クラスの必要がなくなりました:

  1. use Illuminate\Support\Facades\Schedule;
  2. Schedule::command('emails:send')->daily();

例外処理

ルーティングやミドルウェアと同様に、例外処理も別の例外ハンドラークラスではなく、アプリケーションのbootstrap/app.phpファイルからカスタマイズできるようになり、新しいLaravelアプリケーションに含まれるファイルの総数が減少しました:

  1. ->withExceptions(function (Exceptions $exceptions) {
  2. $exceptions->dontReport(MissedFlightException::class);
  3. $exceptions->report(function (InvalidOrderException $e) {
  4. // ...
  5. });
  6. })

ベースコントローラークラス

新しいLaravelアプリケーションに含まれるベースコントローラーは簡素化されました。もはやLaravelの内部Controllerクラスを拡張せず、AuthorizesRequestsおよびValidatesRequestsトレイトは削除されました。必要に応じて、アプリケーションの個々のコントローラーに含めることができます:

  1. <?php
  2. namespace App\Http\Controllers;
  3. abstract class Controller
  4. {
  5. //
  6. }

アプリケーションのデフォルト

デフォルトでは、新しいLaravelアプリケーションはデータベースストレージにSQLiteを使用し、Laravelのセッション、キャッシュ、キューのためにdatabaseドライバーを使用します。これにより、新しいLaravelアプリケーションを作成した後、追加のソフトウェアをインストールしたり、追加のデータベースマイグレーションを作成したりすることなく、すぐにアプリケーションの構築を開始できます。

さらに、時間が経つにつれて、これらのLaravelサービスのdatabaseドライバーは多くのアプリケーションコンテキストでの本番使用に十分な堅牢性を持つようになりました。したがって、ローカルおよび本番アプリケーションの両方に対して合理的で統一された選択肢を提供します。

Laravel Reverb

Laravel ReverbはJoe Dixonによって開発されました

Laravel Reverbは、Laravelアプリケーションに直接超高速でスケーラブルなリアルタイムWebSocket通信を提供し、Laravel Echoなどの既存のイベントブロードキャスティングツールとのシームレスな統合を提供します。

  1. php artisan reverb:start

さらに、ReverbはRedisのパブリッシュ/サブスクライブ機能を介して水平スケーリングをサポートし、単一の高需要アプリケーションをサポートする複数のバックエンドReverbサーバーにWebSocketトラフィックを分散させることができます。

Laravel Reverbの詳細については、完全なReverbドキュメントを参照してください。

秒単位のレート制限

秒単位のレート制限はTim MacDonaldによって寄稿されました

Laravelは、HTTPリクエストやキューに入れられたジョブを含むすべてのレートリミッターに対して「秒単位」のレート制限をサポートしています。以前は、Laravelのレートリミッターは「分単位」の粒度に制限されていました:

  1. RateLimiter::for('invoices', function (Request $request) {
  2. return Limit::perSecond(1);
  3. });

Laravelにおけるレート制限の詳細については、レート制限ドキュメントを確認してください。

ヘルスルーティング

ヘルスルーティングはTaylor Otwellによって寄稿されました

新しいLaravel 11アプリケーションには、Laravelに対して、サードパーティのアプリケーションヘルスモニタリングサービスやKubernetesのようなオーケストレーションシステムによって呼び出されるシンプルなヘルスチェックエンドポイントを定義するよう指示するhealthルーティングディレクティブが含まれています。デフォルトでは、このルートは/upで提供されます:

  1. ->withRouting(
  2. web: __DIR__.'/../routes/web.php',
  3. commands: __DIR__.'/../routes/console.php',
  4. health: '/up',
  5. )

このルートにHTTPリクエストが行われると、LaravelはDiagnosingHealthイベントも発行し、アプリケーションに関連する追加のヘルスチェックを実行できるようにします。

優雅な暗号化キーのローテーション

優雅な暗号化キーのローテーションはTaylor Otwellによって寄稿されました

Laravelは、アプリケーションのセッションクッキーを含むすべてのクッキーを暗号化するため、基本的にLaravelアプリケーションへのすべてのリクエストは暗号化に依存しています。しかし、これにより、アプリケーションの暗号化キーをローテーションすると、すべてのユーザーがアプリケーションからログアウトされてしまいます。さらに、以前の暗号化キーで暗号化されたデータを復号化することは不可能になります。

Laravel 11では、アプリケーションの以前の暗号化キーをAPP_PREVIOUS_KEYS環境変数を介してカンマ区切りのリストとして定義できるようになりました。

値を暗号化する際、Laravelは常にAPP_KEY環境変数内の「現在の」暗号化キーを使用します。値を復号化する際、Laravelはまず現在のキーを試みます。現在のキーを使用して復号化が失敗した場合、Laravelはすべての以前のキーを試み、いずれかのキーが値を復号化できるまで続けます。

この優雅な復号化のアプローチにより、暗号化キーがローテーションされても、ユーザーはアプリケーションを中断することなく使用し続けることができます。

Laravelにおける暗号化の詳細については、暗号化ドキュメントを確認してください。

自動パスワード再ハッシュ

自動パスワード再ハッシュはStephen Rees-Carterによって寄稿されました

Laravelのデフォルトのパスワードハッシュアルゴリズムはbcryptです。bcryptハッシュの「作業係数」は、config/hashing.php設定ファイルまたはBCRYPT_ROUNDS環境変数を介して調整できます。

通常、bcryptの作業係数は、CPU/GPUの処理能力が向上するにつれて増加させるべきです。アプリケーションのbcrypt作業係数を増加させると、Laravelはユーザーがアプリケーションに認証する際に、ユーザーパスワードを優雅に自動的に再ハッシュします。

プロンプトバリデーション

プロンプトバリデータ統合はAndrea Marco Sartoriによって寄稿されました

Laravel Promptsは、コマンドラインアプリケーションに美しくユーザーフレンドリーなフォームを追加するためのPHPパッケージで、プレースホルダーテキストやバリデーションなどのブラウザのような機能を提供します。

Laravel Promptsは、クロージャを介して入力バリデーションをサポートします:

  1. $name = text(
  2. label: 'What is your name?',
  3. validate: fn (string $value) => match (true) {
  4. strlen($value) < 3 => 'The name must be at least 3 characters.',
  5. strlen($value) > 255 => 'The name must not exceed 255 characters.',
  6. default => null
  7. }
  8. );

ただし、多くの入力や複雑なバリデーションシナリオを扱う場合、これが煩雑になることがあります。したがって、Laravel 11では、プロンプト入力をバリデーションする際にLaravelのバリデータの全機能を利用できるようになりました:

  1. $name = text('What is your name?', validate: [
  2. 'name' => 'required|min:3|max:255',
  3. ]);

キューインタラクションテスト

キューインタラクションテストはTaylor Otwellによって寄稿されました

以前は、キューに入れられたジョブがリリース、削除、または手動で失敗したことをテストしようとすると、カスタムキューフェイクやスタブの定義が必要で、煩雑でした。しかし、Laravel 11では、withFakeQueueInteractionsメソッドを使用してこれらのキューインタラクションを簡単にテストできます:

  1. use App\Jobs\ProcessPodcast;
  2. $job = (new ProcessPodcast)->withFakeQueueInteractions();
  3. $job->handle();
  4. $job->assertReleased(delay: 30);

キューに入れられたジョブのテストに関する詳細は、キュードキュメントを確認してください。

新しいArtisanコマンド

クラス作成ArtisanコマンドはTaylor Otwellによって寄稿されました

新しいArtisanコマンドが追加され、クラス、列挙型、インターフェース、トレイトを迅速に作成できるようになりました:

  1. php artisan make:class
  2. php artisan make:enum
  3. php artisan make:interface
  4. php artisan make:trait

モデルキャストの改善

モデルキャストの改善はNuno Maduroによって寄稿されました

Laravel 11では、モデルのキャストをプロパティではなくメソッドを使用して定義することがサポートされています。これにより、特に引数を持つキャストを使用する際に、合理化された流暢なキャスト定義が可能になります:

  1. /**
  2. * Get the attributes that should be cast.
  3. *
  4. * @return array<string, string>
  5. */
  6. protected function casts(): array
  7. {
  8. return [
  9. 'options' => AsCollection::using(OptionCollection::class),
  10. // AsEncryptedCollection::using(OptionCollection::class),
  11. // AsEnumArrayObject::using(OptionEnum::class),
  12. // AsEnumCollection::using(OptionEnum::class),
  13. ];
  14. }

属性キャスティングに関する詳細は、Eloquentドキュメントを確認してください。

once関数

onceヘルパーはTaylor OtwellNuno Maduroによって寄稿されました*。

  1. ``````php
  2. function random(): int
  3. {
  4. return once(function () {
  5. return random_int(1, 1000);
  6. });
  7. }
  8. random(); // 123
  9. random(); // 123 (cached result)
  10. random(); // 123 (cached result)
  11. `
  1. <a name="database-performance"></a>
  2. ### インメモリデータベースでのテスト時のパフォーマンス向上
  3. *インメモリデータベーステストのパフォーマンス向上は[Anders Jenbo](https://github.com/AJenbo)によって寄稿されました*
  4. Laravel 11は、テスト中に`````:memory:````` SQLiteデータベースを使用する際に大幅な速度向上を提供します。これを実現するために、LaravelはPHPのPDOオブジェクトへの参照を維持し、接続間で再利用することで、総テスト実行時間を半分に短縮します。
  5. <a name="mariadb"></a>
  6. ### MariaDBのサポート向上
  7. *MariaDBのサポート向上は[Jonas Staudenmeir](https://github.com/staudenmeir)と[Julius Kiekbusch](https://github.com/Jubeki)によって寄稿されました*
  8. Laravel 11は、MariaDBのサポートが向上しました。以前のLaravelリリースでは、LaravelのMySQLドライバーを介してMariaDBを使用できました。しかし、Laravel 11では、より良いデフォルトを提供する専用のMariaDBドライバーが含まれています。
  9. Laravelのデータベースドライバーに関する詳細は、[データベースドキュメント](/read/laravel-11-x/7cb13a8a60a09f69.md)を確認してください。
  10. <a name="inspecting-database"></a>
  11. ### データベースの検査とスキーマ操作の改善
  12. *スキーマ操作とデータベース検査の改善は[Hafez Divandari](https://github.com/hafezdivandari)によって寄稿されました*
  13. Laravel 11は、列の変更、名前の変更、削除を含む追加のデータベーススキーマ操作および検査メソッドを提供します。さらに、高度な空間型、非デフォルトのスキーマ名、テーブル、ビュー、列、インデックス、外部キーを操作するためのネイティブスキーマメソッドが提供されます:
  14. ``````php
  15. use Illuminate\Support\Facades\Schema;
  16. $tables = Schema::getTables();
  17. $views = Schema::getViews();
  18. $columns = Schema::getColumns('users');
  19. $indexes = Schema::getIndexes('users');
  20. $foreignKeys = Schema::getForeignKeys('users');
  21. `