0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel バージョン11の特徴

Last updated at Posted at 2024-10-30

ファイルの数が減少した

• Laravel10ではapp/Http/Middleware配下に9つファイルがあったが。フォルダごとmiddlewareが消えている。
ミドルウェアを登録する際は、bootstrap/app.phpファイルに登録する。

詳しくは下記リンクで
https://biz.addisteria.com/laravel11_middleware/

 • Laravel10ではServiceProviderは5個あったが、AppServiceProvider.phpの1個までに減少した。
 routesフォルダの中からapi.phpchannels.phpファイルが削除された。
しかし、これらのファイルはコマンドを用いることで復活させることができる。

api.php復活コマンド
php artisan install:api
channels.php復活コマンド
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関数を後続で呼び出した場合は、以前にキャッシュされた結果が返却される。

 同一のリクエスト内で同じ結果を複数回取得する必要があるが、その処理を繰り返し行うことでパフォーマンスが低下することを避けたい場合に便利である。

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

カラムの変更

 カラムを変更する際に変更後もカラム定義を維持したい場合すベての修飾子を明示的に含める必要があり、足りない属性は削除される。

例としてunsigneddefaultcomment属性を持つvotesカラムを作成するマイグレーションがあるとする。

初めに作成したマイグレーション
Schema::create('users', function (Blueprint $table) {
    $table->integer('votes')->unsigned()->default(1)->comment('The vote count');
});

その後にカラムに対しnullableに変更するマイグレーションを追加する。

nullableに変更するマイグレーション
Schema::table('users', function (Blueprint $table) {
    $table->integer('votes')->nullable()->change();
});

Laravel10ではこのマイグレーションはカラムのunsigneddefaultcomment属性を保持していた。
しかし、Laravel11からはマイグレーションには以前定義していた属性も全て含める必要があり、含めない場合は削除される。

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同等のカラムを作成するようになった。

double型の書き方
$table->double('amount');

floatカラム型に関して、合計桁数と小数点以下の桁数を指定しないFLOAT相当の列を作成するようになった。オプションのprecisionを指定することで精度を決定することができる。

float型の書き方
$table->float('amount', precision: 53);

参考文献

Laravel 11.x アップグレードガイド
Laravel11の変更点と新機能をご紹介:ファイルが減ってスッキリしました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?