コンテンツへスキップ

リリースノート

バージョン管理方式

Laravelとその他のファーストパーティパッケージは、セマンティックバージョニングに従います。メジャーフレームワークリリースは毎年(〜Q1)リリースされ、マイナーリリースとパッチリリースは毎週のようにリリースされる可能性があります。マイナーリリースとパッチリリースには、破壊的な変更は決して含まれてはなりません。

アプリケーションまたはパッケージからLaravelフレームワークまたはそのコンポーネントを参照する場合は、Laravelのメジャーリリースには破壊的な変更が含まれているため、常に^11.0などのバージョン制約を使用する必要があります。ただし、新しいメジャーリリースには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.4 2024年3月12日 2025年9月3日 2026年3月12日
12 8.2 - 8.4 2025年第1四半期 2026年第3四半期 2027年第1四半期
サポート終了
セキュリティ修正のみ

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

Laravel 11

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

PHP 8.2

Laravel 11.xには、PHP 8.2以上のバージョンが必要です。

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

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

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

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

bootstrap/app.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のみが含まれています。以前のサービスプロバイダーの機能は、bootstrap/app.phpに組み込まれているか、フレームワークによって自動的に処理されるか、アプリケーションのAppServiceProviderに配置できます。

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

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

多くのアプリケーションではこれらのファイルが不要なため、api.phpおよびchannels.phpルートファイルはデフォルトで存在しなくなりました。代わりに、簡単なArtisanコマンドを使用して作成できます。

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) {
// ...
});
})

基本Controllerクラス

新しいLaravelアプリケーションに含まれる基本コントローラーが簡略化されました。Laravelの内部Controllerクラスを継承しなくなり、AuthorizesRequestsValidatesRequestsのトレイトは、必要に応じてアプリケーションの個々のコントローラーに含めることができるため、削除されました。

<?php
 
namespace App\Http\Controllers;
 
abstract class Controller
{
//
}

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

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

さらに、時間の経過とともに、これらのLaravelサービスのdatabaseドライバーは、多くのアプリケーションコンテキストで本番環境での使用に十分なほど堅牢になりました。そのため、ローカルと本番環境の両方のアプリケーションにとって、理にかなった統一的な選択肢を提供します。

Laravel Reverb

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

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

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アプリケーションには、healthルーティングディレクティブが含まれており、Laravelに、Kubernetesのようなサードパーティのアプリケーションヘルスモニタリングサービスやオーケストレーションシステムによって呼び出すことができるシンプルなヘルスチェックエンドポイントを定義するように指示します。デフォルトでは、このルートは/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 OtwellNuno Maduroによって貢献されました。

onceヘルパー関数は、指定されたコールバックを実行し、リクエストの期間中に結果をメモリにキャッシュします。同じコールバックでonce関数を後続で呼び出すと、以前にキャッシュされた結果が返されます。

function random(): int
{
return once(function () {
return random_int(1, 1000);
});
}
 
random(); // 123
random(); // 123 (cached result)
random(); // 123 (cached result)

onceヘルパーの詳細については、ヘルパードキュメントをご覧ください。

インメモリデータベースでのテスト時のパフォーマンスの向上

インメモリデータベーステストパフォーマンスの向上は、Anders Jenbo氏によって貢献されました。

Laravel 11では、テスト中に:memory:SQLiteデータベースを使用すると、大幅な速度向上が得られます。これを実現するために、LaravelはPHPのPDOオブジェクトへの参照を保持し、接続間で再利用するようになり、テストの総実行時間を半分に短縮することがよくあります。

MariaDBのサポートの改善

MariaDBのサポートの改善は、Jonas Staudenmeir氏とJulius Kiekbusch氏によって貢献されました。

Laravel 11には、MariaDBのサポートが改善されています。以前のLaravelリリースでは、LaravelのMySQLドライバーを介してMariaDBを使用できました。ただし、Laravel 11には、このデータベースシステムにより適切なデフォルトを提供する専用のMariaDBドライバーが含まれるようになりました。

Laravelのデータベースドライバーの詳細については、データベースドキュメントをご覧ください。

データベースの検査とスキーマ操作の改善

スキーマ操作とデータベース検査の改善は、Hafez Divandari氏によって貢献されました。

Laravel 11は、列のネイティブな変更、名前変更、削除など、追加のデータベーススキーマ操作および検査メソッドを提供します。さらに、高度な空間型、デフォルト以外のスキーマ名、およびテーブル、ビュー、列、インデックス、外部キーを操作するためのネイティブスキーマメソッドが提供されています。

use Illuminate\Support\Facades\Schema;
 
$tables = Schema::getTables();
$views = Schema::getViews();
$columns = Schema::getColumns('users');
$indexes = Schema::getIndexes('users');
$foreignKeys = Schema::getForeignKeys('users');