Tech Starlog

Laravel 定数・Enumの使い分け

投稿日:2026/01/31

Laravel開発をしていると、必ず出てくるのがこの悩みです。

  • この値、直書きでいいの?
  • 定数にするべき?Enumにするべき?
  • configに置くのは違う?

本記事では、Laravel実務でよくあるケースを元に
定数・Enumの正しい使い分けと設計指針 を解説します。


なぜ定数・Enum設計が重要なのか?

次のようなコード、見覚えはありませんか?

if ($user->status === 1) {
    // 有効
}
  • 1 の意味が分からない
  • 変更に弱い
  • 条件分岐が増えるほど地獄

👉 意味のある名前を与えること が、保守性を大きく上げます。


定数とEnumの違い(ざっくり)

種類 特徴 PHP
定数 単純・軽量 PHP 7+
Enum 型安全・表現力が高い PHP 8.1+

① 定数を使うべきケース

✔ 固定値で種類が増えないもの

例:

  • ページネーション件数
  • 最大リトライ回数
  • 並び順

実装例

class Pagination
{
    public const DEFAULT_LIMIT = 10;
}
$posts = Post::paginate(Pagination::DEFAULT_LIMIT);

✔ 単純なフラグ値

class UserStatus
{
    public const ACTIVE = 1;
    public const INACTIVE = 0;
}
if ($user->status === UserStatus::ACTIVE) {
    // ...
}

② Enumを使うべきケース

✔ 状態・種類を明確にしたいとき

  • ステータス
  • 種別
  • ロール
  • 支払い状態

PHP 8.1 Enum例

enum UserStatus: int
{
    case Active = 1;
    case Inactive = 0;
}
if ($user->status === UserStatus::Active) {
    // ...
}

メリット

  • 型安全(無効な値が入らない)
  • IDE補完が効く
  • バグが減る

③ 定数で十分なケース / Enumが過剰なケース

ケース おすすめ
数値1〜2種類 定数
増える可能性がある Enum
DBと密接 Enum
表示名が不要 定数

④ Enum × 表示名

Enumに ラベルを持たせる と一気に実務向けになります。

enum UserStatus: int
{
    case Active = 1;
    case Inactive = 0;

    public function label(): string
    {
        return match ($this) {
            self::Active => '有効',
            self::Inactive => '無効',
        };
    }
}
echo $user->status->label();

⑤ DBとの連携(Eloquent)

キャスト設定

protected $casts = [
    'status' => UserStatus::class,
];

これで、

$user->status === UserStatus::Active

が使えます。


⑥ config定数との違い

種類 役割
config 環境・設定
定数 アプリ仕様
Enum 状態・種別
  • ❌ configにビジネスロジックを入れない
  • ❌ .envに定数を逃がさない

⑦ よくあるNG設計

❌ 魔法の数字

if ($order->status === 3) {}

❌ .envで定義

ORDER_STATUS_SHIPPED=3

❌ Enumに詰め込みすぎ

enum Status {
    // 状態 + 表示 + 色 + 処理…
}

👉 責務を分ける


⑧ おすすめディレクトリ構成

app/
├─ Enums/
│   └─ UserStatus.php
├─ Constants/
│   └─ Pagination.php

判断フローチャート(迷ったらこれ)

    1. 状態・種類か?
    • → YES → Enum
    • → NO → 定数
    1. 環境差分があるか?
    • → YES → config / .env
    • → NO → 定数 / Enum

まとめ

Laravelでの定数・Enum設計は、

  • 意味をコードに与える
  • 変更に強くする
  • バグを減らす

ための重要なポイントです。

まずは、

  • 魔法の数値を消す
  • 状態はEnumで表現する

ここから始めるだけで、 コードの質は一段上がります。