⛏️
LaravelにおけるEnumの活用方法
PHP 8.1で導入されたEnum(列挙型)は、Laravel開発においても非常に強力なツールです。型安全性の向上やビジネスロジックのカプセル化、IDEサポートの強化など、多くの利点があります。
PHPのEnumとは?
Enumは、関連する定数をグループ化し、型安全性を提供する機能です。従来の定数定義と比べて、
以下のような利点があります。
- 型安全性: 無効な値の使用を防止
 - 自己文書化: コードの意図が明確
 - カプセル化: 関連するロジックを一箇所にまとめられる
 
詳細はPHP公式マニュアルをご参照ください。
LaravelでのEnumの活用方法
1. Enumの定義
Laravelでは、php artisan make:enumコマンドを使用してEnumを作成できます。
php artisan make:enum OrderStatus
生成されたEnumファイルに、必要なケースを定義します。
<?php
namespace App\Enums;
enum OrderStatus: int
{
    case PENDING = 1;
    case PROCESSING = 2;
    case SHIPPED = 3;
    case DELIVERED = 4;
    case CANCELLED = 5;
}
2. モデルでのEnumの使用
Laravel 9以降では、モデルの$castsプロパティを使用して、データベースの値をEnumに
キャストできます。
<?php
namespace App\Models;
use App\Enums\OrderStatus;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
    protected $casts = [
        'status' => OrderStatus::class,
    ];
}
これにより、以下のようにEnumを直接使用できます。
$order = Order::find(1);
if ($order->status === OrderStatus::DELIVERED) {
    echo '配達完了しています';
}
3. Enumにメソッドを追加
Enumにはメソッドを定義でき、関連するロジックをカプセル化できます。
<?php
namespace App\Enums;
enum OrderStatus: int
{
    case PENDING = 1;
    case PROCESSING = 2;
    case SHIPPED = 3;
    case DELIVERED = 4;
    case CANCELLED = 5;
    public function label(): string
    {
        return match($this) {
            self::PENDING => '処理待ち',
            self::PROCESSING => '処理中',
            self::SHIPPED => '発送済み',
            self::DELIVERED => '配達完了',
            self::CANCELLED => 'キャンセル',
        };
    }
}
4. バリデーションでのEnumの使用
LaravelのバリデーションルールでEnumを使用できます。
use App\Enums\OrderStatus;
use Illuminate\Validation\Rules\Enum;
$request->validate([
    'status' => ['required', new Enum(OrderStatus::class)],
]);
これにより、statusフィールドがOrderStatusの有効な値であることを検証できます。
5. ビューでのEnumの使用
Bladeテンプレート内でEnumのメソッドを使用できます。
<span class="badge">{{ $order->status->label() }}</span>
Enumのメリットとデメリット
メリット
- 型安全性: 無効な値の使用を防止
 - 自己文書化: コードの意図が明確
 - カプセル化: 関連するロジックを一箇所にまとめられる
 - IDEサポート: コード補完や静的解析のサポートが充実
 - 拡張性: 新しいケースを追加しても既存のコードへの影響が最小限
 
デメリット
- PHP 8.1以上が必要: 古いPHPバージョンでは使用できない
 
まとめ
LaravelにおけるEnumの活用は、コードの可読性、保守性、型安全性を向上させる強力な手段です。
特に、モデルとの連携やバリデーション、ビューでの使用において、Enumは非常に有用です。
PHP 8.1以降を使用している場合は、積極的にEnumを取り入れて、より堅牢で保守性の高いコードを
目指しましょう。
さらに詳細な情報や実践的な例については、以下のリソースをご参照ください。
Discussion