1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

laravel 【 __invoke 】について

Posted at

1. __invoke メソッドとは

invoke? と聞けばあの曲が脳内再生されるのは、私だけではないはず…。
(SEEDファンにはたまらないやつですね)
seed.jpg
…と余談はさておき。

「invoke」の意味

「invoke」は英語で「呼び出す」という意味。
PHPでは__invoke()という名前の 特殊メソッド(マジックメソッド) を定義することで、
クラスのインスタンスを「関数のように」呼び出す ことができるようになります。

Laravelでの主な用途

Laravelでは、__invoke は主に以下のような場面で使われます
✅ シングルアクションコントローラ
→ 1つの処理だけを担当する簡潔なコントローラを作りたいとき
✅ サービスクラスの関数的活用
→ 再利用可能な処理を、関数のようにスッキリ書きたいとき
✅ 処理をクラス単位に分けて、テストや責務の分離をしたいとき

2. 使用例:サービスクラスとしての活用

以下は、UpdateStatusService というサービスクラスを作成し、
yController および zController の中で共通の更新処理として再利用している例です。

🔧 サービスクラス:UpdateStatusService

<?php

namespace App\Services;

use App\Model\Xxxxx;

class UpdateStatusService
{
    /**
     * ステータスを更新する
     */
    public function __invoke(Xxxxx $xxxxx, string $status): void
    {
        $xxxxx->update([
            'status' => $status,
        ]);
    }
}

このように __invoke メソッドを定義することで、
このクラスは「関数」のように $updateStatusService($xxxxx, $status) と呼び出せるようになります。

🧩 yControllerでの使用例

public function updateStatus(Request $request, UpdateStatusService $updateStatusService): JsonResponse
{
    // ※権限チェックなどの処理は割愛

    // ステータス更新処理をサービスクラスに委譲
    $updateStatusService($lesson, $request->status);

    return response()->json([
        'result' => true,
    ]);
}

🧩 zControllerでの使用例

public function updateStatus(Request $request, UpdateStatusService $updateStatusService): JsonResponse
{
    // ※権限チェックなどの処理は割愛

    // 同様にサービスクラスを呼び出してステータス更新
    $updateStatusService($lesson, $request->status);

    return response()->json([
        'result' => true,
    ]);
}

3. __invoke を使うメリット

メリット 説明
✅ 関数のように呼び出せる $service($data) のようなスッキリした記述になる
✅ 責務の分離 コントローラの肥大化を防ぎ、1クラス1責任にできる
✅ テストしやすい ロジックが独立しているため、ユニットテストも簡単
✅ Laravelの依存注入と相性◎ 自動でコンストラクタやサービスを注入してくれる

4. まとめ

__invoke() は、関数のようにクラスを呼び出せる「ちょっと便利な魔法」です。

サービスクラスや単一処理のコントローラ、バリデーションなど、Laravelのコードを
より読みやすく、テストしやすく、再利用性の高い形にできる 強力な仕組みです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?