Skip to content

リリースノート

バージョン管理方式

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

アプリケーションまたはパッケージからLaravelフレームワークまたはそのコンポーネントを参照する場合、Laravelのメジャーリリースには破壊的変更が含まれるため、常に^11.0のようなバージョン制約を使用する必要があります。ただし、新しいメジャーリリースへのアップグレードを1日以内に完了できるように努めています。

名前付き引数

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

サポートポリシー

すべてのLaravelリリースについて、バグ修正は18ヶ月間、セキュリティ修正は2年間提供されます。Lumenを含むすべての追加ライブラリについては、最新のメジャーリリースのみがバグ修正を受け取ります。さらに、Laravelでサポートされているデータベースバージョンについては、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は、Laravel 10.xで行われた改善を継続し、合理化されたアプリケーション構造、秒単位のレートリミット、ヘルスルーティング、エレガントな暗号化キーのローテーション、キューテストの改善、Resendメールトランスポート、Promptバリデータの統合、新しいArtisanコマンドなどを導入しています。さらに、Laravel ReverbというファーストパーティのスケーラブルなWebSocketサーバが導入され、アプリケーションに堅牢なリアルタイム機能を提供します。

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

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

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

api.phpchannels.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のパブリッシュ/サブスクライブ機能を介して水平スケーリングをサポートし、WebSocketトラフィックを複数のバックエンドReverbサーバーに分散させ、単一の高需要アプリケーションをサポートできるようになります。

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環境変数を介して調整できます。

通常、CPU/GPUの処理能力が向上するにつれて、bcryptの作業係数を時間とともに増やすべきです。アプリケーションの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では、プロパティではなくメソッドを使用してモデルのキャストを定義できます。これにより、特に引数付きのキャストを使用する場合に、ストリームライン化された流暢なキャスト定義が可能になります:

/**
 * キャストする必要がある属性を取得します。
 *
 * @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 StaudenmeirJulius 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');

ユーザーノート