こんにちは、かつコーチです。
2023年2月にLarave10がリリースされました。
その新機能と変更点について解説します。
Laravel 9からLaravel 10にアップグレードされた際には、
複数の新機能、改善点、さらにはメンテナンスのしやすさやパフォーマンスの向上が導入されました。
Laravel 10は、引き続き開発者の効率を高めるために設計され、最新のPHP機能に対応しています。
以下、Laravel 10で追加された主要な機能と、Laravel 9からの違いについて詳しく説明します。
PHP 8.1以上が必須
Laravel 10では、PHP 8.1以上が必須となりました。
PHP 8.1以降の新しい機能、特にEnums、readonly
プロパティ、ファイバー、
そして改良されたネームスペースのパフォーマンスなどをフルに活用できるように設計されています。
変更点:
- Laravel 10を使用するにはPHP 8.1以上が必要。
- PHP 8.1の
readonly
プロパティやEnums、そしてファイバーの機能を活用。
class User
{
public readonly string $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
ネイティブ型ヒントの強化
Laravel 10では、フレームワーク全体でPHPのネイティブ型ヒントが追加され、
コードの堅牢性と安全性が向上しました。これにより、開発者はコードの整合性を高め、将来的なエラーを未然に防ぐことができます。
変更点:
- メソッドや関数に対するネイティブ型ヒントが強化され、型の厳格な管理が可能。
function calculateTotal(int $quantity, float $price): float
{
return $quantity * $price;
}
Eloquent: Enumキャストの改良
PHP 8.1で導入されたenum
(列挙型)がLaravel 10ではEloquentのキャストとして
正式にサポートされるようになりました。
これにより、データベースのカラムにenum
をキャストし、より明確なデータの操作が可能です。
変更点:
- Eloquentモデルで
enum
のキャストがサポートされ、データ操作がより明確で安全に。
enum UserRole: string
{
case Admin = 'admin';
case User = 'user';
}
class User extends Model
{
protected $casts = [
'role' => UserRole::class,
];
}
プロンプトベースのアーティザンコマンド
Laravel 10では、アーティザンコマンドがインタラクティブなプロンプトをサポートするようになりました。
これにより、CLI(コマンドラインインターフェース)上でのユーザーインタラクションが強化され、
コマンド実行時に必要な入力をリアルタイムで求めることができます。
変更点:
- プロンプトベースの入力をアーティザンコマンドでサポートし、CLI操作の柔軟性が向上。
$confirmed = $this->confirm('Do you wish to continue?');
コントローラーの属性ルーティングサポート
Laravel 10では、PHP 8.1の新機能である「属性」を使用して、
コントローラーで直接ルーティングを定義できるようになりました。
これにより、コントローラー内でルーティング定義が可能になり、
ルーティングの設定がより直感的になります。
変更点:
- PHPの属性を使ったコントローラー内でのルーティング定義が可能に。
use App\Http\Controllers\UserController;
use Illuminate\Routing\Attributes\Route;
class UserController extends Controller
{
#[Route('users/{id}', methods: ['GET'])]
public function show(int $id)
{
return User::findOrFail($id);
}
}
ストリクトな対話型プロンプト
Laravel 10では、アーティザンコマンドのプロンプトでユーザー入力を要求する際に、
より厳格なバリデーションを行えるようになりました。
これにより、インタラクティブなコマンドラインツールでのユーザー入力の品質が向上します。
変更点:
- ユーザー入力に対してより厳密なバリデーションとプロンプト管理が可能に。
$input = $this->ask('What is your name?', 'Default Name');
Pestのデフォルトサポート
Laravel 10では、PHPテストフレームワーク「Pest」がデフォルトでサポートされるようになりました。
Pestは、シンプルかつ直感的なテスト構文を提供するフレームワークであり、
従来のPHPUnitに代わってテストの作成がより簡単になります。
変更点:
- Pestがテストのためのデフォルトフレームワークとしてサポートされ、テストの書き方がシンプルに。
test('example test', function () {
$this->assertTrue(true);
});
バッチジョブの改善
Laravel 9で導入されたバッチジョブ機能がさらに強化され、
ジョブの進行状況の追跡やジョブの失敗時のハンドリングがより柔軟になりました。
変更点:
- バッチジョブの処理における追跡とエラー処理が改善。
Bus::batch([
new FirstJob(),
new SecondJob(),
])->then(function () {
// 成功時の処理
})->catch(function (Batch $batch, Throwable $e) {
// 失敗時の処理
})->dispatch();
新しいテストヘルパー
Laravel 10では、HTTPリクエストや認証済みユーザーでのテストを簡単に行うための
新しいテストヘルパーメソッドが追加されました。
これにより、テスト作成がよりシンプルで効率的になります。
変更点:
- HTTPリクエストや認証済みユーザーのテストが簡単になった。
$this->actingAs(User::find(1))->get('/dashboard')->assertStatus(200);
デフォルトのセマンティックバージョニング
Laravel 10では、プロジェクトにおけるバージョン管理の手法として
セマンティックバージョニングが強化されました。
これは、バージョン番号がメジャー、マイナー、パッチに分かれ、
それぞれが重大な変更、機能追加、バグ修正を表すものです。
変更点:
- セマンティックバージョニングがデフォルトのバージョニング戦略として採用され、プロジェクトのバージョン管理が容易に。
ルートミドルウェアの優先度設定
Laravel 10では、ルートミドルウェアの実行順序を手動で制御できるようになりました。
これにより、複雑なミドルウェアチェーンを適切に管理しやすくなっています。
変更点:
- ミドルウェアの優先順位を設定することで、実行順序をカスタマイズ可能。
protected $middlewarePriority = [
\App\Http\Middleware\Authenticate::class,
\App\Http\Middleware\ThrottleRequests::class,
];
まとめ
Laravel 10へのアップデートでは、PHP 8.1以降の新機能の活用を中心に、
開発者の生産性向上を目指した機能や改善が数多く盛り込まれています。
特に、型ヒントの強化やEnumのサポート、属性ルーティング、そしてPestのサポートなど、
モダンなPHP開発のトレンドを反映したアップデートが行われました。