Laravel11の新機能・変更点をまとめてみたよ
投稿主が主にPHP系の案件に携わることが多いことと、最近Laravel11に触れることがあり、この機会にLaravel11の新機能・変更点について調べてみました。
対応バージョン
Laravel11はPHPバージョン8.2以上が最低限必要になります。
また記事投稿時点だと、公式セキュリティサポートをしているのはLaravel10、11系のみになります。Laravelは大体1年おきにバージョンリリースをしています。
新機能・変更点
合理化されたアプリケーション構造
簡潔に言うと『無駄なファイルを省いてカスタマイズしやすく開発できるようにしましたよ〜』ということですね。まずapp/Exceptionsやapp/Http/Middleware無くなり、ルートファイルapi.phpとchannels.phpもデフォルトで存在しなくなりました。各々のファイルで共通メソッドを定義されていたものは、次のファイルでカスタマイズできるようになりました。
SQLiteがデフォルトDB
laravel11からデフォルトのデータベースがMySQLからSQLiteに変更されました。これによりプロジェクト作成時から自動的にSQLiteファイルが作成され、すぐにアプリケーション構築できる環境が整います。
Laravel Reverbの導入
新機能となるLaravel Reverbは、高速でスケーラブルなリアルタイムWebSocket通信を提供します。これによってLINEのようなリアルタイムチャット機能といった高速通信系の実装をLaravelで行えるようになりました。
- インストールコマンド
php artisan install:broadcasting
- サーバー起動コマンド
php artisan reverb:start
ブートストラップファイル
今回のメインコンテンツと言っていいでしょう。bootstrap/app.phpは、前述通り散り散りになっていたアプリケーションのルーティング、ミドルウェア、サービスプロバイダ、例外処理などをカスタマイズできます。1ファイルでよくなったのは管理上すごく良い。
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();
1ファイル集約によるメリット・デメリットは以下になるかな懸念点あるとしたら1ファイル集約になったので、コード数が膨れ上がります。
- メリット
- 共通ファイル修正の口数が減り、コーディング速度上がる
- 共通ファイル管理が容易
- チームメンバーが増員してもナレッジ共有しやすい
- デメリット
- bootstrap/app.phpの肥大化
バッチ処理
app/Kernel.phpがなくなり、新しいScheduleファザードを使用することでタスクのスケジュールアプリケーションのroutes/console.phpに定義できるようになりました。
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')->daily();
Schedule::command('reports:generate')->weekly();
Schedule::command('backup:run')->monthly();
個別に実行はapp/Kernel.phpに定義した時のように実行できます。
php artisan emails:send;
php artisan reports:generate;
php artisan backup:run;
キュー操作テスト
以前までキュー投入したジョブのリリース、削除、失敗のテストは手作業やカスタムキューFakeやスタブで実施する必要がありました。Laravel11からはwithFakeQueueInteractionsメソッドを使うことで簡単にテストができるようになりました。
use App\Jobs\ProcessPodcast;
$job = (new ProcessPodcast)->withFakeQueueInteractions();
$job->handle();
// リリース確認
$job->assertReleased(delay: 30);
// ジョブ削除確認
$job->assertDeleted();
// ジョブが削除されていないことを確認
$job->assertNotDeleted();
// ジョブ失敗確認
$job->assertFailed();
// ジョブが失敗していないことを確認
$job->assertNotFailed();
他バージョンからのアップグレード
最後にlaravelバージョンアップグレードについてですが、影響度の高い変更は主には依存パッケージ周りになります。前述通りPHPは8.2.0以上が必須で、composer.jsonファイルの依存パッケージを更新する必要があります。詳しくは公式ドキュメントを参照ください。
今後の展望
Laravelは処理速度が遅いことが課題とされていますが、バージョン11系でファイルの簡素化で起動時の読み込み速度向上が期待できます。また複雑で処理が重いコマンド処理はキューで担保していくことがポイントになりそうです。依然カスタム性の豊富さやフロントエンド(React,Vue等)の組み合わせの多さも活かしていきたいですね。
参考文献
- Laravel公式ドキュメント
https://readouble.com/laravel/11.x/ja/releases.html
Discussion