【Laravel】シングルアクションコントローラとは:コマンドやルーティングについて

2024.01.28 /

【Laravel】シングルアクションコントローラとは:コマンドやルーティングについて

記事ではLaravelにおける、シングルアクションコントローラについて詳しく解説していきます。

Laravelでのコントローラーとはリクエストを受け付けてモデルとビューの仲介役を担当します。コントローラーは処理全体の制御を担当する非常に重要な部分です。

LaravelによるWebアプリケーション開発を進めていくとコントローラーのメソッドが増えていき、コントローラーが肥大化していきます。コントローラーが肥大化するとコードが読みづらくなり、メンテナンス性が落ちていきます。そこで便利なのがシングルアクションコントローラです。

シングルアクションコントローラとは単一のアクションのみを扱うコントローラーです。アクションを単一にすることでコードの肥大化を防ぎ、可読性や保守性が高い状態で維持できます。

本記事を通して、Laravelのシングルアクションコントローラの概要やコマンド、ルーティングについて理解を深めてください。

シングルアクションコントローラ

コントローラー(Controller)とは

Laravelにおけるコントローラーとはリクエストを受け付けてモデルとビューの仲介役を担当します。

Laravel:フロー

コントローラーはルーティング(ルーター)からユーザーのリクエストを受け取り、リクエストの内容によってモデルからデータを取得してビューにデータを渡す役割を担います。

またコントローラーはMVCモデルのC(Controller)に相当し、アプリケーションのビジネスロジックを処理する重要な部分です。

MVCモデルとは

LaravelはMVCモデルと呼ばれる設計手法を採用しています。MVCモデルはモデル(Model)、ビュー(View)、コントローラー(Controller)の3つにアプリケーション開発で必要になる処理を分類します。これにより開発効率や保守性を高めています。

MVC 説明
モデル(Model) データベースとの架け橋。データにアクセスしてデータの取得・保存・削除を担っています。またデータを扱いやすい形に変換する役割もあります
ビュー(View) フロントサイドを作成(ユーザー側に表示される画面を作る)
コントローラー(Controller) ビューとモデルの仲介役。モデルからデータを取得し、ビューに渡したり、ビューから受け取ったデータをモデルに渡して処理させる

Laravelのコントローラーについてより詳しく知りたい方は以下記事をご参照ください。

シングルアクションコントローラとは

シングルアクションコントローラ(Single Action Controller)とは単一のアクション(メソッド)しかルーティングされない制約をもったコントローラーです。

通常のコントローラーでは複数のアクション(indexやshow、create、storeなど)を用意しますが、シングルアクションコントローラは一つのコントローラーに単一のアクションしか用意しません。

POINT

シングルアクションコントローラは一つのコントローラーに一つのアクションのみしか定義できない制約を持たせます

シングルアクションコントローラを利用するメリットは次の通りです。

シングルアクションコントローラのメリット
  • コントローラーの肥大化を防ぐ
  • 各ルートがどのコントローラアクションにマッピングされているかが明確になる
  • 単一のアクションしか持たないためコードが簡潔で読みやすい
  • メンテナンス性が向上
  • 使用しなくなったら削除しやすい(単一のアクションしか持たないため)
私の場合

LaravelでWebアプリケーションを作成するときはシングルアクションコントローラを利用することが多いです

シングルアクションコントローラの作成方法

シングルアクションコントローラは以下構文に沿ってコマンドを実行することで自動生成されます。

構文

php artisan make:controller コントローラー名 --invokable

上記のようにPHPのマジックメソッド「__invokable」を利用して一つのアクションしかルーティングできない制約を生成しています。

Laravelの用語確認

マジックメソッドとはアンダースコア2つから始まるPHPで予約されているメソッドです

例えばPostフォルダ内にindexControllerという名前のシングルアクションコントローラを作成する場合は次のようにコマンドを実行します。

php artisan make:controller Post/indexController --invokable

上記コマンドを実行すると「app/Http/Controllers/Post/indexController.php」が作成されます。作成直後のシングルアクションコントローラの中身は次のようになっています。

<?php

namespace App\Http\Controllers\Post;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class indexController extends Controller
{
    /**
     * Handle the incoming request.
     */
    public function __invoke(Request $request)
    {
        //
    }
}

上記からわかるように__invokeメソッドが定義された状態で生成されます。これ以外にアクションメソッドは定義されません。

注意点

シングルアクションコントローラに他のメソッドを追加することはできますが、それらはアクションとして利用することができません

シングルアクションコントローラのルーティング

シングルアクションコントローラのルーティングは次のように記述します。

Route::get('/index', \App\Http\Controllers\Post\IndexController::class);

通常のコントローラーではルーティングに対応するメソッド名を記述しますが、シングルアクションコントローラでは上記のようにクラスのみを指定します。

あとは実際にシングルアクションコントローラに処理を記述して利用します。