バージョニングスキーム
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四半期 |
サポート終了
セキュリティ修正のみ
Laravel 11
Laravel 11は、アプリケーション構造の合理化、秒単位のレート制限、ヘルスルーティング、優雅な暗号化キーのローテーション、キューのテスト改善、Resendメールトランスポート、プロンプトバリデータ統合、新しいArtisanコマンドなど、Laravel 10.xで行われた改善を引き継いでいます。さらに、Laravel ReverbというファーストパーティのスケーラブルなWebSocketサーバーが導入され、アプリケーションに強力なリアルタイム機能を提供します。
PHP 8.2
Laravel 11.xは、最低PHPバージョン8.2を必要とします。
合理化されたアプリケーション構造
Laravelの合理化されたアプリケーション構造は、Taylor OtwellとNuno Maduroによって開発されました。
Laravel 11は、既存のアプリケーションに変更を加えることなく、新しいLaravelアプリケーションのための合理化されたアプリケーション構造を導入します。この新しいアプリケーション構造は、Laravel開発者がすでに慣れ親しんでいる多くの概念を保持しつつ、よりスリムで現代的な体験を提供することを目的としています。以下では、Laravelの新しいアプリケーション構造のハイライトについて説明します。
アプリケーションブートストラップファイル
``````php
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
//
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
`
サービスプロバイダー
デフォルトのLaravelアプリケーション構造には5つのサービスプロバイダーが含まれていましたが、Laravel 11にはAppServiceProvider
が1つだけ含まれています。以前のサービスプロバイダーの機能はbootstrap/app.php
に統合され、フレームワークによって自動的に処理されるか、アプリケーションのAppServiceProvider
に配置される可能性があります。
たとえば、イベントの発見はデフォルトで有効になっており、イベントとそのリスナーの手動登録の必要性が大幅に排除されます。ただし、手動でイベントを登録する必要がある場合は、AppServiceProvider
で簡単に行うことができます。同様に、AuthServiceProvider
で以前に登録したルートモデルバインディングや認可ゲートもAppServiceProvider
で登録できます。
オプトインAPIおよびブロードキャストルーティング
``````shell
php artisan install:api
php artisan install:broadcasting
`
ミドルウェア
以前、新しいLaravelアプリケーションには9つのミドルウェアが含まれていました。これらのミドルウェアは、リクエストの認証、入力文字列のトリミング、CSRFトークンの検証など、さまざまなタスクを実行していました。
Laravel 11では、これらのミドルウェアはフレームワーク自体に移動され、アプリケーションの構造に負担をかけないようになりました。これらのミドルウェアの動作をカスタマイズするための新しいメソッドがフレームワークに追加され、アプリケーションのbootstrap/app.php
ファイルから呼び出すことができます:
->withMiddleware(function (Middleware $middleware) {
$middleware->validateCsrfTokens(
except: ['stripe/*']
);
$middleware->web(append: [
EnsureUserIsSubscribed::class,
])
})
すべてのミドルウェアはアプリケーションのbootstrap/app.php
を介して簡単にカスタマイズできるため、別のHTTP「カーネル」クラスの必要性は排除されました。
スケジューリング
新しいSchedule
ファサードを使用して、スケジュールされたタスクをアプリケーションのroutes/console.php
ファイルに直接定義できるようになり、別のコンソール「カーネル」クラスの必要がなくなりました:
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')->daily();
例外処理
ルーティングやミドルウェアと同様に、例外処理も別の例外ハンドラークラスではなく、アプリケーションのbootstrap/app.php
ファイルからカスタマイズできるようになり、新しいLaravelアプリケーションに含まれるファイルの総数が減少しました:
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontReport(MissedFlightException::class);
$exceptions->report(function (InvalidOrderException $e) {
// ...
});
})
ベースコントローラークラス
新しいLaravelアプリケーションに含まれるベースコントローラーは簡素化されました。もはやLaravelの内部Controller
クラスを拡張せず、AuthorizesRequests
およびValidatesRequests
トレイトは削除されました。必要に応じて、アプリケーションの個々のコントローラーに含めることができます:
<?php
namespace App\Http\Controllers;
abstract class Controller
{
//
}
アプリケーションのデフォルト
デフォルトでは、新しいLaravelアプリケーションはデータベースストレージにSQLiteを使用し、Laravelのセッション、キャッシュ、キューのためにdatabase
ドライバーを使用します。これにより、新しいLaravelアプリケーションを作成した後、追加のソフトウェアをインストールしたり、追加のデータベースマイグレーションを作成したりすることなく、すぐにアプリケーションの構築を開始できます。
さらに、時間が経つにつれて、これらのLaravelサービスのdatabase
ドライバーは多くのアプリケーションコンテキストでの本番使用に十分な堅牢性を持つようになりました。したがって、ローカルおよび本番アプリケーションの両方に対して合理的で統一された選択肢を提供します。
Laravel Reverb
Laravel ReverbはJoe Dixonによって開発されました。
Laravel Reverbは、Laravelアプリケーションに直接超高速でスケーラブルなリアルタイムWebSocket通信を提供し、Laravel Echoなどの既存のイベントブロードキャスティングツールとのシームレスな統合を提供します。
php artisan reverb:start
さらに、ReverbはRedisのパブリッシュ/サブスクライブ機能を介して水平スケーリングをサポートし、単一の高需要アプリケーションをサポートする複数のバックエンドReverbサーバーにWebSocketトラフィックを分散させることができます。
Laravel Reverbの詳細については、完全なReverbドキュメントを参照してください。
秒単位のレート制限
秒単位のレート制限はTim MacDonaldによって寄稿されました。
Laravelは、HTTPリクエストやキューに入れられたジョブを含むすべてのレートリミッターに対して「秒単位」のレート制限をサポートしています。以前は、Laravelのレートリミッターは「分単位」の粒度に制限されていました:
RateLimiter::for('invoices', function (Request $request) {
return Limit::perSecond(1);
});
Laravelにおけるレート制限の詳細については、レート制限ドキュメントを確認してください。
ヘルスルーティング
ヘルスルーティングはTaylor Otwellによって寄稿されました。
新しいLaravel 11アプリケーションには、Laravelに対して、サードパーティのアプリケーションヘルスモニタリングサービスやKubernetesのようなオーケストレーションシステムによって呼び出されるシンプルなヘルスチェックエンドポイントを定義するよう指示するhealth
ルーティングディレクティブが含まれています。デフォルトでは、このルートは/up
で提供されます:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
このルートに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は、クロージャを介して入力バリデーションをサポートします:
$name = text(
label: 'What is your name?',
validate: fn (string $value) => match (true) {
strlen($value) < 3 => 'The name must be at least 3 characters.',
strlen($value) > 255 => 'The name must not exceed 255 characters.',
default => null
}
);
ただし、多くの入力や複雑なバリデーションシナリオを扱う場合、これが煩雑になることがあります。したがって、Laravel 11では、プロンプト入力をバリデーションする際にLaravelのバリデータの全機能を利用できるようになりました:
$name = text('What is your name?', validate: [
'name' => 'required|min:3|max:255',
]);
キューインタラクションテスト
キューインタラクションテストはTaylor Otwellによって寄稿されました。
以前は、キューに入れられたジョブがリリース、削除、または手動で失敗したことをテストしようとすると、カスタムキューフェイクやスタブの定義が必要で、煩雑でした。しかし、Laravel 11では、withFakeQueueInteractions
メソッドを使用してこれらのキューインタラクションを簡単にテストできます:
use App\Jobs\ProcessPodcast;
$job = (new ProcessPodcast)->withFakeQueueInteractions();
$job->handle();
$job->assertReleased(delay: 30);
キューに入れられたジョブのテストに関する詳細は、キュードキュメントを確認してください。
新しいArtisanコマンド
クラス作成ArtisanコマンドはTaylor Otwellによって寄稿されました。
新しいArtisanコマンドが追加され、クラス、列挙型、インターフェース、トレイトを迅速に作成できるようになりました:
php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
モデルキャストの改善
モデルキャストの改善はNuno Maduroによって寄稿されました。
Laravel 11では、モデルのキャストをプロパティではなくメソッドを使用して定義することがサポートされています。これにより、特に引数を持つキャストを使用する際に、合理化された流暢なキャスト定義が可能になります:
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'options' => AsCollection::using(OptionCollection::class),
// AsEncryptedCollection::using(OptionCollection::class),
// AsEnumArrayObject::using(OptionEnum::class),
// AsEnumCollection::using(OptionEnum::class),
];
}
属性キャスティングに関する詳細は、Eloquentドキュメントを確認してください。
once関数
once
ヘルパーはTaylor OtwellとNuno Maduroによって寄稿されました*。
``````php
function random(): int
{
return once(function () {
return random_int(1, 1000);
});
}
random(); // 123
random(); // 123 (cached result)
random(); // 123 (cached result)
`
<a name="database-performance"></a>
### インメモリデータベースでのテスト時のパフォーマンス向上
*インメモリデータベーステストのパフォーマンス向上は[Anders Jenbo](https://github.com/AJenbo)によって寄稿されました*
Laravel 11は、テスト中に`````:memory:````` SQLiteデータベースを使用する際に大幅な速度向上を提供します。これを実現するために、LaravelはPHPのPDOオブジェクトへの参照を維持し、接続間で再利用することで、総テスト実行時間を半分に短縮します。
<a name="mariadb"></a>
### MariaDBのサポート向上
*MariaDBのサポート向上は[Jonas Staudenmeir](https://github.com/staudenmeir)と[Julius Kiekbusch](https://github.com/Jubeki)によって寄稿されました*
Laravel 11は、MariaDBのサポートが向上しました。以前のLaravelリリースでは、LaravelのMySQLドライバーを介してMariaDBを使用できました。しかし、Laravel 11では、より良いデフォルトを提供する専用のMariaDBドライバーが含まれています。
Laravelのデータベースドライバーに関する詳細は、[データベースドキュメント](/read/laravel-11-x/7cb13a8a60a09f69.md)を確認してください。
<a name="inspecting-database"></a>
### データベースの検査とスキーマ操作の改善
*スキーマ操作とデータベース検査の改善は[Hafez Divandari](https://github.com/hafezdivandari)によって寄稿されました*
Laravel 11は、列の変更、名前の変更、削除を含む追加のデータベーススキーマ操作および検査メソッドを提供します。さらに、高度な空間型、非デフォルトのスキーマ名、テーブル、ビュー、列、インデックス、外部キーを操作するためのネイティブスキーマメソッドが提供されます:
``````php
use Illuminate\Support\Facades\Schema;
$tables = Schema::getTables();
$views = Schema::getViews();
$columns = Schema::getColumns('users');
$indexes = Schema::getIndexes('users');
$foreignKeys = Schema::getForeignKeys('users');
`