Lang x Lang

Release Notes

Table of Contents

Versioning Scheme

Laravel とその他の第一パーティのパッケージは、Semantic Versioning に従います。メジャーなフレームワークの releases は毎年(〜Q1)行われ、一方でパッチやマイナーの releases は週に一回程度行われる場合もあります。マイナーやパッチの releases には、絶対に破壊的な変更を含まれてはなりません。

あなたの application またはパッケージから Laravel フレームワークやそのコンポーネントを参照するときは常に、^11.0のようなバージョン制約を使用するべきです。なぜなら、 Laravel のメジャーリリースには破壊的な変更が含まれているからです。しかしながら、我々はあなたが新しいメジャー release に一日以内で update できるように、常に保証することを目指しています。

名前付き引数

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

Support Policy

すべての Laravel リリースについては、バグ修正は 18 ヶ月間、セキュリティ修正は 2 年間提供されます。Lumen をはじめとするすべての追加 library については、最新のメジャーな release のみがバグ修正を受けます。また、 Laravel がサポートする database versionsをご覧ください。

バージョンPHP (*)Releaseバグ修正までセキュリティ修正まで
98.0 - 8.22022 年 2 月 8 日2023 年 8 月 8 日2024 年 2 月 6 日
108.1 - 8.32023 年 2 月 14 日2024 年 8 月 6 日2025 年 2 月 4 日
118.2 - 8.32024 年 3 月 12 日2025 年 9 月 3 日2026 年 3 月 12 日
128.2 - 8.3Q1 2025Q3, 2026Q1, 2027
End of life
Security fixes only

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

Laravel 11

Laravel 11 は、より洗練された application 構造、秒単位の rate limiting 、健全な routing 、円滑な encryption キーの回転、 queue testing の改善、再送信 mail トランスポート、 Prompt validator の統合、新しい Artisan コマンドなどを導入することで、 Laravel 10.x における改善を続けています。さらに、第一級のスケーラブルな WebSocket サーバである Laravel Reverb が導入され、アプリケーションに堅牢なリアルタイム機能を提供します。

PHP 8.2

Laravel 11.x は、最低でも PHP バージョン 8.2 が必要です。

ストリームライン化された Application の構造

Taylor Otwell Nuno Maduro によって開発された Laravel の洗練された application の構造

Laravel 11 は、既存のアプリケーションに何の変更も必要とせずに、新しい Laravel アプリケーションのためのすっきりとした application 構造を導入します。新しい application 構造は、より洗練され、現代的な体験を提供することを目指していますが、その一方で Laravel development 者がすでに熟知している多くの概念を維持しています。以下では、Laravel の新しい application 構造のハイライトについて説明します。

Application ブートストラップファイル

bootstrap/app.phpファイルは、コードファーストの application 設定ファイルとして再生されました。このファイルから、あなたのアプリケーションの routing 、 middleware 、 service providers 、例外処理などをカスタマイズすることができるようになりました。このファイルは、以前はアプリケーションのファイル構造全体に散在していた、様々な高レベル application の動作設定を統一しています。

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();

Service Providers

default の Laravel アプリケーション構造が 5 つの service providers を含むのとは異なり、Laravel11 はただ一つのAppServiceProviderだけを含みます。以前の service providers の機能は、bootstrap/app.phpに統合され、フレームワークによって自動的に処理されるか、あるいはアプリケーションのAppServiceProviderに配置することができます。

たとえば、 event の検出は現在、 default で有効になっており、 events とその listeners を手動で登録する必要性が大幅に減少しました。ただし、手動で register events を登録する必要がある場合は、単純にAppServiceProviderで行うことができます。同様に、以前AuthServiceProviderに登録した route model のバインディングや authorization のゲートも、AppServiceProviderで登録することができます。

オプトイン API と Broadcast Routing

api.phpおよびchannels.phpの route ファイルは、多くのアプリケーションがこれらのファイルを必要としていないため、もはや default で存在しません。代わりに、シンプルな Artisan コマンドを使用して作成できます:

php artisan install:api

php artisan install:broadcasting

Middleware

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

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

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(
        except: ['stripe/*']
    );

    $middleware->web(append: [
        EnsureUserIsSubscribed::class,
    ])
})

すべての middleware はアプリケーションのbootstrap/app.phpを介して簡単にカスタマイズできるため、別々の HTTP "kernel" class が不要になりました。

Scheduling

新しいSchedule facade を使用すると、schedule されたタスクは、あなたの application のroutes/console.phpファイル内で直接定義することができるようになりました。これにより、個別の console "kernel" class の必要性がなくなりました:

use Illuminate\Support\Facades\Schedule;

Schedule::command('emails:send')->daily();

例外処理

routing や middleware のように、例外処理は現在、別の例外 handler class ではなく、アプリケーションのbootstrap/app.phpファイルからカスタマイズできるようになりました。これにより、新しい Laravel application に含まれるファイルの総数が減少しました。

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontReport(MissedFlightException::class);

    $exceptions->report(function (InvalidOrderException $e) {
        // ...
    });
})

基本的な Controller Class

新しい controller applications に含まれる基本的なコントローラーが単純化されました。 Laravel の内部Controller class を拡張しなくなり、AuthorizesRequestsValidatesRequestsの特性が削除されました。これらは、必要に応じて applications の個々のコントローラに含めることができます。

<?php

namespace App\Http\Controllers;

abstract class Controller
{
    //
}

Application Defaults

default として、新しい Laravel application は database storage に SQLite を使用し、database driver を Laravel の session、cache、および queue のために使います。これにより、新しい Laravel application を作成した直後から application の構築を始めることができ、追加のソフトウェアをインストールしたり、追加の database migration を作成することが必要なくなります。

さらに、時間の経過とともに、databaseドライバは、これらの Laravel services に対して十分に堅牢になり、多くの application コンテキストでの production 使用に適しています。したがって、それらはローカルと production アプリケーションの両方に対する合理的で統一感のある選択肢を提供します。

Laravel リバーブ

Joe Dixon によって開発された Laravel Reverb。

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

php artisan reverb:start

また、Reverb は Redis の publish / subscribe 機能により水平スケーリングをサポートし、WebSocket のトラフィックを複数のバックエンド Reverb サーバーに分散させ、すべてが single 、高い需要の application をサポートできるようにします。

詳しい情報が必要な方は、 Laravel リバーブに関して、完全なリバーブドキュメンテーションをご覧ください。

1 秒あたりの Rate Limiting

秒単位の rate limiting はTim MacDonald によって貢献されました。

Laravel は現在、"秒単位"の"rate limiting をサポートしています。これには、HTTP requests や queue に入れられた jobs のためのものも含まれます。以前は、Laravel のレートリミッターは"分単位"の粒度に限定されていました。

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

詳細については、 Laravel での rate limiting については、rate limiting のドキュメンテーションをご覧ください。

Health Routing

Health routing は Taylor Otwell によって寄稿されました。

新しい Laravel 11 のアプリケーションには、healthの routing 指示が含まれており、これは Laravel に対して、第三者の application 健康監視 services や Kubernetes のようなオーケストレーションシステムから呼び出されるかもしれないシンプルなヘルスチェックエンドポイントを定義するように指示します。 default で、この route は/upで提供されます。

->withRouting(
    web: __DIR__.'/../routes/web.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/up',
)

この route に HTTP requests が行われたとき、 Laravel はDiagnosingHealthという event も dispatch します。これにより、あなたの application に関連する追加のヘルスチェックを行うことができます。

Graceful Encryption キーのローテーション

Graceful encryption キーのローテーションはTaylor Otwell によって寄贈されました。

Laravel はすべてのクッキーを暗号化するため、アプリケーションの session cookie も含めて、基本的に Laravel application へのすべての request が encryption に依存しています。ただし、この結果、アプリケーションの encryption キーをローテーションさせると、すべての users が application から log アウトすることになります。さらに、前回の encryption キーで暗号化された data を復号化することは不可能になります。

Laravel 11 では、アプリケーションの以前の encryption keys を、APP_PREVIOUS_KEYS environment 変数を通じてカンマ区切りのリストとして定義できます。

「values」を「暗号化」する際、「Laravel」は常に「現在」の「暗号化」keys を使用します。これは、APP_KEY 「環境」variables 内にあります。「values」を「復号化」する際、「Laravel」は最初に現在の keys を試します。現在の keys を使って復号化が失敗した場合、「Laravel」は復号化できる「keys」が見つかるまで全ての以前の「keys」を試します。

This approach to graceful decryption allows users to keep using your application uninterrupted even if your encryption key is rotated.

詳しくは、 Laravel での encryption について、encryption のドキュメントをご覧ください。

自動的な Password の再ハッシュ化

自動的な password のハッシュ化は、Stephen Rees-Carter によって寄稿されました。

Laravel の default password hashing algorithm は bcrypt です。bcrypt ハッシュの"work factor"は、config/hashing.php設定ファイルまたはBCRYPT_ROUNDS environment 変数を通じて調整することができます。

通常、CPU / GPU の processing 能力が向上するにつれて bcrypt の作業要因を増やす必要があります。あなたが application のために bcrypt の作業要因を増やすと、 Laravel は user passwords を users があなたの application で認証する際に、円滑かつ自動的に再ハッシュします。

Prompt Validation

Prompt validator の統合は、Andrea Marco Sartori によって寄贈されました。

Laravel プロンプトは、美しいユーザーフレンドリーなフォームをコマンドラインアプリケーションに追加するための PHP パッケージで、プレースホルダーテキストや validation などのブラウザライクな features が含まれています。

Laravel プロンプトはクロージャを通じて input validation をサポートします:

$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
    }
);

しかし、多くの入力や複雑な validation のシナリオを扱うときには、これが煩雑になることがあります。そのため、Laravel11 では、Laravel のvalidatorの全機能を validating prompt の入力の検証に活用することができます:

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

Queue インタラクション Testing

Taylor Otwell によって寄稿された Queue インタラクション testing 。

以前は、キューに job がリリースされた、削除された、または手動で失敗したことをテストしようとすると、ややこしく、 custom queue のフェイクやスタブの定義が required でした。しかし、 Laravel 11 では、これらの queue のインタラクションを簡単にテストするためのwithFakeQueueInteractions method が使えます:

use App\Jobs\ProcessPodcast;

$job = (new ProcessPodcast)->withFakeQueueInteractions();

$job->handle();

$job->assertReleased(delay: 30);

詳細については、キューイングされた jobs の testing については、queue ドキュメンテーションをご覧ください。

新しい Artisan コマンド

_ Class の作成や Artisan のコマンドはTaylor Otwell によって貢献されました。_

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

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

Model の改善点

Nuno Maduro によって投稿された Model の改善点.

Laravel 11 は、プロパティではなく、 method を使用して model のキャストを定義することをサポートしています。これにより、特に引数を伴うキャストを使用する場合、スリムで流暢なキャスト定義が可能になります。

/**
 * 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),
    ];
}

attribute キャスティングについての詳細は、 Eloquent documentationをご覧ください。

once関数

onceヘルパーはTaylor Otwell によって提供されましたそれに*Nuno Maduro も貢献しました*。

onceヘルパー関数は与えられたコールバックを実行し、その結果を request の期間、メモリにキャッシュします。同じコールバックでonce関数を再度呼び出すと、以前にキャッシュされた結果が返されます。

function random(): int
{
    return once(function () {
        return random_int(1, 1000);
    });
}

random(); // 123
random(); // 123 (cached result)
random(); // 123 (cached result)

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

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

Anders Jenbo によって提供された、改善されたインメモリ database testing のパフォーマンス

Laravel 11 は、:memory: SQLite database を使用して testing する場合に大幅なスピードアップを提供します。これを実現するために、 Laravel は現在、PHP の PDO object への参照を保持し、それを接続間で再利用することで、テストの実行時間をしばしば半分に短縮しています。

MariaDB のサポートが強化されました

Jonas Staudenmeir Julius Kiekbusch によって、 MariaDB のサポートが改善されました。

Laravel11 は、MariaDB へのサポートが向上しています。以前の Laravelrelease では、Laravel の MySQLdriver ーを介して MariaDB を使用することができました。しかし、現在の Laravel11 では、専用の MariaDBdriver ーが含まれており、この database システムのためのより良い default を提供しています。

詳しくは、Laravel の database ドライバについては、database ドキュメンテーションをご覧ください。

データベースの検査と改善された Schema 操作

Hafez Divandari によって、改善された schema 操作と database の検査が貢献されました。

Laravel 11 は、追加の database schema 操作や検査方法を提供し、これには、列のネイティブな変更、名前変更、および削除が含まれます。さらに、高度な空間 types、非 default の schema 名、およびテーブル、 views 、列、インデックス、および外部 keys を操作するためのネイティブ schema methods も提供されます。

use Illuminate\Support\Facades\Schema;

$tables = Schema::getTables();
$views = Schema::getViews();
$columns = Schema::getColumns('users');
$indexes = Schema::getIndexes('users');
$foreignKeys = Schema::getForeignKeys('users');

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use