前回に引き続き今回はLaravel11系の新機能や変更点について振り返ります。
前回の記事は以下です。
主要な新機能・変更点
PHP要件の引き上げ
Laravel11では、最低PHPバージョンがさらに引き上げられ、PHP8.2以上が必須となりました。
Enumsやreadonlyプロパティ、改善された型システムなど、PHP8.2以降の言語特性がフルに利用できることで、コードの表現力や開発効率がさらに向上します。
非推奨機能の削除と内部構造のクリーンアップ
Laravel11ではLaravel10で非推奨とされていたいくつかのメソッドやヘルパーが完全に削除されています。
コードスタイル・品質向上ツールの強化
Laravel10で注目を集めたコード整形ツール「Laravel Pint」は、Laravel11でも引き続き推奨されますが、設定ファイルやルールセットがさらに洗練され、よりスムーズな利用が可能になっています。
Pint実行例
# プロジェクトルートで実行
./vendor/bin/pint
# コードがLaravel推奨のスタイルで整形されます。
このようなツールを標準的に使うことで、コード品質を自然に底上げできます。
Processファサードや周辺機能の拡張
Laravel10で導入されたProcessファサードは、Laravel11でさらなる安定性と拡張性が加えられました。
外部コマンド実行やスクリプト連携がよりスムーズになります。
これにより、デプロイ用スクリプトやサーバー内でのバッチ処理もLaravel流の書き方で簡潔に表現可能です。
特に、本番運用時のタスク管理やCI/CD環境での簡易な処理記述に役立ちます。
Processファサード使用例(Laravel11)
use Illuminate\Support\Facades\Process;
use Illuminate\Support\Facades\Route;
Route::get('/system-info', function () {
$result = Process::run('uname -a');
return $result->successful() ? $result->output() : '取得に失敗しました。';
});
このような形で、システム情報をブラウザから手軽に確認できる仕組みを整えられます。
Eloquent周りの改善
Laravel11ではEloquentモデルのアクセサ・ミューテタやキャスト機能がさらに明確になり、型システムとの親和性が向上しました。
これにより、モデル属性の扱いがより直感的になり、IDE補完も含め開発体験が向上します。
たとえば、型付きアクセサを用いることで、取得時・保存時の属性変換がより明確に定義できます。
Eloquentアクセサ例(Laravel11)
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
class Post extends Model
{
protected function title(): Attribute
{
return Attribute::make(
get: fn($value) => ucfirst($value),
set: fn($value) => mb_strtolower($value)
);
}
}
// 利用例
$post = Post::create(['title' => 'hello world']);
echo $post->title; // "Hello world" と表示
Laravel10でも似た記法は利用できましたが、Laravel11では型情報や内部実装がより整理され、拡張や保守がしやすくなっています。
フロントエンド統合の改善
Laravel11では、公式周辺ツール(Laravel Breeze、Jetstream、Pint、Viteなど)との統合がよりスムーズになります。
これにより、SPA(Single Page Application)やSSR(Server Side Rendering)の構築を、より少ない設定で始めやすくなります。
また、将来のアップデートに備えた拡張性を確保できるため、新機能の導入がしやすくなるでしょう。
上記以外での主な新機能・変更点
ディレクトリ構造の簡素化
- デフォルトのディレクトリ構造が整理され、不要なファイルやミドルウェアが削除されました。
デフォルトのデータベースドライバをSQLiteに変更
- 新規プロジェクト作成時のデフォルトデータベースドライバがSQLiteに設定されました。
ルートファイルの統合
routes
ディレクトリ内のファイルが統合され、api.php
やconsole.php
がデフォルトで含まれなくなりました。必要に応じて生成可能です。
サービスプロバイダの統合
- デフォルトのサービスプロバイダが統合され、
AppServiceProvider
のみが残りました。
マイグレーションファイルの簡素化
- デフォルトのマイグレーションファイルが削減され、よりシンプルな構造になりました。
コントローラのベースクラス削除
- コントローラが特定のベースクラスを継承しないようになり、必要に応じて
Controller
クラスを作成する形に変更されました。
新しいリアルタイム機能のサポート
- リアルタイム通信を容易にするための新しい機能が導入されました。
秒単位のレート制限
- より細かいレート制限が可能になり、秒単位での設定がサポートされました。
ヘルスチェックルーティング
- アプリケーションのヘルスチェック機能が追加され、システムの状態確認が容易になりました。
暗号化キーのローテーション機能
- 暗号化キーのローテーションがスムーズに行えるよう改善されました。
プロンプトバリデーション
- Artisanコマンドでの入力プロンプトにバリデーション機能が追加され、ユーザー入力の精度が向上しました。
キューのインタラクションテスト
- キューの動作をより詳細にテストできる機能が追加されました。
新しいArtisanコマンド
- 開発効率を高めるための新しいArtisanコマンドが追加されました。
モデルのキャスト方法の変更
- モデルのキャスト設定が静的プロパティからメソッドベースに変更されました。
once
ヘルパーの追加
- リクエスト中に一度だけ実行される処理の結果をキャッシュする
once
ヘルパーが追加されました。
メモリ内データベースを使用したテストのパフォーマンス向上
- テスト時にメモリ内データベースを使用することで、パフォーマンスが向上しました。
MariaDBのサポート向上
- MariaDBに対するサポートが強化され、より安定した動作が可能になりました。
.env
に言語設定追加
.env
ファイルにアプリケーションの言語設定が追加され、ローカライズが容易になりました。
Laravel10とLaravel11の違い
Laravel11は、Laravel10と比較して、PHP要件の引き上げや非推奨機能の削除によるコードベースの洗練化、ツール類(Pintなど)の利用強化、ProcessファサードやEloquent機能のさらなる改善などが特徴です。
これらの変更は、よりモダンで保守性の高いアプリケーション開発をサポートし、チーム開発における品質維持や効率化に直接つながります。
まとめ
Laravel11でもPHP要件をPHP8.2以上に変更、非推奨機能の削除と内部構造のクリーンアップ、フロントエンド統合の改善など保守性が向上しそうな改善が行われました。
Laravel12はLTSバージョンになりますが、ここではどのような改善が行われるのか楽しみです。