Laravel 11 新機能

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

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

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

設定ファイル

環境変数の使用が拡張され、.env.example新しい Laravel アプリケーションに含まれるファイルにプレースホルダーが追加されました。このため、ほぼすべてのコア フレームワーク機能は.env、個別の構成ファイルではなくアプリケーションのファイルを介して構成できます。したがって、configデフォルトではディレクトリには構成ファイルが含まれなくなりました。

代わりに、新しい Artisan コマンドを使用して構成ファイルを公開できますconfig:publish。これにより、カスタマイズしたい構成ファイルのみを公開できます。

php artisan config:publish

もちろん、フレームワークのすべての構成ファイルを簡単に公開することもできます。

php artisan config:publish --all

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

およびRoute ファイルは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();

ララベルリバーブ

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

php artisan reverb:start

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

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

1 秒あたりのレート制限

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

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

Laravel でのレート制限の詳細については、レート制限のドキュメントを参照してください。

即時検証

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

Laravel プロンプトは、クロージャーを介した入力検証をサポートしています。

$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',
]);

キュー相互作用のテスト

以前は、キューに入れられたジョブが解放、削除されたか、手動で失敗したかをテストしようとするのは面倒で、カスタム キューのフェイクとスタブを定義する必要がありました。ただし、Laravel 11 では、次のメソッドを使用してこれらのキューの対話を簡単にテストできますwithFakeQueueInteractions。

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

新しいアーティザンコマンド\

新しいアーティザン コマンドが追加され、クラス、インターフェイス、特性を迅速に作成できるようになりました。

php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait

まとめ

スケルトンの変更はオプションであり、古い構文機能は引き続き動作し、削除または非推奨にはならないことに注意してください。そのため、Laravel 11 にアップグレードしても、古いフォルダー/コード構造を引き続き使用できます。