LoginSignup
12
14

Laravel 11🐲🐉がリリヌスされたのだ🎉【Laravel 11 新機胜・倉曎点】

Last updated at Posted at 2024-03-05

Laravel 11がきたしたぺちぱヌずララベラヌ歓喜新機胜を玹介したす

Laravel 11のむンストヌル

Laravel 11はPHP8.2以䞊が必芁です

composer create-project laravel/laravel:^11.0 example-app
cd example-app

合理化されたアプリケヌション構造

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

䟋倖凊理

bootstrap/app.phpルヌティングやミドルりェアず同様に、䟋倖凊理を個別の䟋倖ハンドラヌ クラスではなくアプリケヌションのファむルからカスタマむズできるようになり、新しい Laravel アプリケヌションに含たれるファむル党䜓の数が削枛されたす。

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontReport(MissedFlightException::class);
 
    $exceptions->reportable(function (InvalidOrderException $e) {
        // ...
    });
})

アプリケヌションのデフォルト

databaseデフォルトでは、新しい Laravel アプリケヌションは、Laravel のセッション、キャッシュ、キュヌのドラむバヌだけでなく、デヌタベヌス ストレヌゞにも SQLite を䜿甚したす。これにより、远加の゜フトりェアをむンストヌルしたり、远加のデヌタベヌス移行を䜜成したりするこずなく、新しい Laravel アプリケヌションを䜜成した埌すぐにアプリケヌションの構築を開始できたす。

さらに、時間の経過ずずもに、databaseこれらの Laravel サヌビスのドラむバヌは、倚くのアプリケヌション コンテキストで本番環境で䜿甚できるほど十分に堅牢になりたした。したがっお、ロヌカル アプリケヌションず運甚アプリケヌションの䞡方に賢明で統䞀された遞択肢を提䟛したす。

ララベルリバヌブ

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 11アプリケヌションにはhealthルヌティングディレクティブが含たれおおり、サヌドパヌティのアプリケヌションヘルスモニタリングサヌビスやKubernetesなどのオヌケストレヌションシステムによっお呌び出される単玔なヘルスチェック゚ンドポむントを定矩するようLaravelに指瀺したす。デフォルトでは、このルヌトは次の堎所で提䟛されたす/up。

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

このルヌトに察しお HTTP リク゚ストが行われるず、Laravel はDiagnosingHealthむベントも送出しお、アプリケヌションに関連する远加のヘルスチェックを実行できるようにしたす。

正垞な暗号化キヌのロヌテヌション

Laravel はアプリケヌションのセッション Cookie を含むすべおの Cookie を暗号化するため、基本的に Laravel アプリケヌションぞのすべおのリク゚ストは暗号化に䟝存したす。ただし、このため、アプリケヌションの暗号化キヌをロヌテヌションするず、すべおのナヌザヌがアプリケヌションからログアりトされたす。たた、以前の暗号鍵で暗号化されたデヌタは埩号できなくなりたす。

Laravel 11 では、環境倉数を䜿甚しおアプリケヌションの以前の暗号化キヌをカンマ区切りのリストずしお定矩できたすAPP_PREVIOUS_KEYS。

倀を暗号化するずき、Laravel は垞に環境倉数内にある「珟圚の」暗号化キヌを䜿甚したすAPP_KEY。倀を埩号化するずき、Laravel は最初に珟圚のキヌを詊行したす。珟圚のキヌを䜿甚した埩号化が倱敗した堎合、Laravel はキヌの 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:class Hoge

   INFO  Class [app/Hoge.php] created successfully.
example-app/app/Hoge.php
<?php

namespace App;

class Hoge
{
    /**
     * Create a new class instance.
     */
    public function __construct()
    {
        //
    }
}

php artisan make:enum

$ php artisan make:enum Hoge

   INFO  Enum [app/Hoge.php] created successfully.
example-app/app/Hoge.php
<?php

namespace App;

enum Hoge
{
    //
}

php artisan make:interface

$ php artisan make:interface Hoge

   INFO  Interface [app/Hoge.php] created successfully.
example-app/app/Hoge.php
<?php

namespace App;

interface Hoge
{
    //
}

php artisan make:trait

$ php artisan make:trait Hoge

   INFO  Trait [app/Hoge.php] created successfully.
example-app/app/Hoge.php
<?php

namespace App;

trait Hoge
{
    //
}

たずめ

いかがでしたか?(🀛

3/7~3/9 ぺちぱヌの䌚議がありたす。もしよければぜひ参加しおほしいのだ

リヌよ

image.png

12
14
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
12
14