ファイルの数が減少した
• Laravel10ではapp/Http/Middleware配下に9つファイルがあったが。フォルダごとmiddlewareが消えている。
ミドルウェアを登録する際は、bootstrap/app.phpファイルに登録する。
詳しくは下記リンクで
https://biz.addisteria.com/laravel11_middleware/
• Laravel10ではServiceProviderは5個あったが、AppServiceProvider.phpの1個までに減少した。
routesフォルダの中からapi.php
とchannels.php
ファイルが削除された。
しかし、これらのファイルはコマンドを用いることで復活させることができる。
php artisan install:api
php artisan install:broadcasting
• Configフォルダの中身も15個から10個に減少した。
Consoleがなくなった
app/Consoleもデフォルトで削除された。バッチ処理などのスケジューリング処理を記述したい場合は、routes/console.phpに直接記述する。
詳しくは下記リンクで
https://biz.addisteria.com/laravel11_console/
リアルタイム機能をより簡単に実装する
Laravel Reverbと呼ばれる高速かつスケーラブルWebSocketサービスを提供する。
詳しくは下記リンクで
https://laravel.com/docs/11.x/reverb
より細かいレートリミットが可能に
レートリミットとはルーティングに対するトラフィックの量を制限する機能のことである。
以前はper-minute(1分ごと)まで可能であったが、今回からper-second(1秒ごと)の設定が可能になった。
// 1秒間に1回の制御
RateLimiter::for('invoices', function (Request $request) {
return Limit::perSecond(1);
});
高頻度でアクセスされるAPIや短時間に多くのリクエストを処理する必要があるアプリケーションに有効。
詳しくは下記リンクで
https://laravel.com/docs/11.x/routing#rate-limiting
ヘルスチェック機能
ドメイン/up を行うことでヘルスチェック画面が表示される。
非表示にしたい場合は、bootstrap/app.php
内のhealth: ‘/up’ 部分をコメントアウトする。
暗号化キー交換機能
アプリケーションの暗号化キーを更新してもユーザーはログアウトされることなく、以前のキーで暗号化されたデータも復元化することができる。
APP_PREVIOUS_KEYS環境変数を通じて、アプリケーションの以前の暗号化キーをカンマ区切りのリストとして定義することができる。
セキュリティを高めるために定期的にキーを更新する場合に使われる。
詳しくは下記リンクで
https://laravel.com/docs/11.x/encryption
キューのインタラクションテスト
インタラクションテストとは、テスト対象のコードが特定のメソッドを正しく呼び出すことができるかどうかを検証するものである。
Laravel11では、withFakeQueueInteractionsメソッドを用いることでキューのインスタラクションテストを行うことができる。
これによりキューを利用したアプリケーションの信頼性と品質を向上させることができる。
詳しくは下記リンクで
https://laravel.com/docs/11.x/queues#testing
新たなartisanコマンド
クラス、enum、トレイト、インターフェイスを新規で作成するためのコマンドが追加された。
php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
モデルのcastsがメソッドに変更
castsはこれまで静的プロパティだったが、メソッドに変更された。
protected $casts = [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
onceヘルパー
onceヘルパーは与えられたコールバックを実行し、その結果をリクエストの期間中メモリにキャッシュする。
同じコールバックを使用してonce関数を後続で呼び出した場合は、以前にキャッシュされた結果が返却される。
同一のリクエスト内で同じ結果を複数回取得する必要があるが、その処理を繰り返し行うことでパフォーマンスが低下することを避けたい場合に便利である。
<?php
class NumberService
{
public function random(): int
{
return once(fn () => random_int(1, 1000));
}
}
$service = new NumberService;
$service->random();
$service->random(); // (cached result: キャッシュの値を参照)
$secondService = new NumberService;
$secondService->random();
$secondService->random(); // (cached result: キャッシュの値を参照)
上記のように関数がオブジェクトインスタンス内から実行されると、キャッシュされた結果はそのオブジェクトインスタンス固有のものとなる。
詳しくは下記リンクで
https://laravel.com/docs/11.x/helpers#method-once
カラムの変更
カラムを変更する際に変更後もカラム定義を維持したい場合すベての修飾子を明示的に含める必要があり、足りない属性は削除される。
例としてunsigned
、default
、comment
属性を持つvotes
カラムを作成するマイグレーションがあるとする。
Schema::create('users', function (Blueprint $table) {
$table->integer('votes')->unsigned()->default(1)->comment('The vote count');
});
その後にカラムに対しnullable
に変更するマイグレーションを追加する。
Schema::table('users', function (Blueprint $table) {
$table->integer('votes')->nullable()->change();
});
Laravel10ではこのマイグレーションはカラムのunsigned
、default
、comment
属性を保持していた。
しかし、Laravel11からはマイグレーションには以前定義していた属性も全て含める必要があり、含めない場合は削除される。
Schema::table('users', function (Blueprint $table) {
$table->integer('votes')
->unsigned()
->default(1)
->comment('The vote count')
->nullable()
->change();
});
change
メソッドはカラムのインデックスを変更するものではないため、カラムを変更する際はインデックス修飾子を用いて明示的に追加や削除を行うこと
// インデックス追加
$table->bigIncrements('id')->primary()->change();
// インデックス削除
$table->char('postal_code', 10)->unique(false)->change();
浮動小数点タイプについて
カラムタイプの種類であるdouble
型と、カラム指定のfloat
は全てのデータベースで一貫性があるようになった。
カラムの型がdouble
であるものに関して、合計桁数と小数点以下の桁数を含めないDOUBLE
同等のカラムを作成するようになった。
$table->double('amount');
float
カラム型に関して、合計桁数と小数点以下の桁数を指定しないFLOAT
相当の列を作成するようになった。オプションのprecision
を指定することで精度を決定することができる。
$table->float('amount', precision: 53);
参考文献
Laravel 11.x アップグレードガイド
Laravel11の変更点と新機能をご紹介:ファイルが減ってスッキリしました!