1. コントローラーとは
Laravel における コントローラー (Controller) は、ルートとビジネスロジックの橋渡しを担うクラスです。
-
ルートで受け取った HTTP リクエストを解析し、必要に応じてモデルを呼び出し、レスポンスを返します。
-
MVC アーキテクチャにおける「C」に位置し、処理の集約・再利用を容易にします。
2. コントローラーの作成
| 手段 | コマンド例 | 生成されるファイル | 用途 |
|---|---|---|---|
| 通常コントローラー | php artisan make:controller ArticleController |
app/Http/Controllers/ArticleController.php |
任意のメソッドを自由に定義 |
| リソースコントローラー | php artisan make:controller ArticleController --resource |
同上 | RESTful7アクション(index, create, store, show, edit, update, destroy)を雛形生成 |
| APIリソース | php artisan make:controller Api/ArticleController --api |
app/Http/Controllers/Api/ArticleController.php |
上記から create/edit ビュー関連を除外 |
| シングルアクション | php artisan make:controller ShowArticle --invokable |
app/Http/Controllers/ShowArticle.php |
__invoke() のみを持つ単機能 |
補足
生成場所は
app/Http/Controllersが既定。サブディレクトリ指定でネームスペースも自動反映されます。
--model=Articleを併用すると、型指定されたモデルが各メソッドにインポートされます (Laravel 10 以降)。
3. コントローラーの基本構造
主なポイント
-
ネームスペース
namespace App\Http\Controllers;が PSR-4 に基づき解決され、ルート側のuseは不要です。 -
継承
Controller基底クラスを継承し、共通ミドルウェアや共通ヘルパを利用可能。 -
依存性注入
-
Requestオブジェクトやモデルをメソッド引数に型宣言するだけで自動注入されます。 -
コンストラクタでサービスクラス等を注入し、クリーンアーキテクチャを実現可能。
-
-
バリデーション
-
$request->validate()は失敗時に自動リダイレクト+エラーメッセージ。 -
フォームリクエストクラスに委譲すると、コントローラーがさらに薄く保てます。
-
-
レスポンス種別
-
view(),redirect(),response()->json()など、要求に応じたファサードを返却。
-
4. ルートとの紐付け
-
Route::resourceは RESTful パターンとコントローラーのメソッド名を自動対応させます。 -
ルートグループやミドルウェア (
middleware('auth')) もまとめて適用可能。
5. シングルアクションコントローラー
-
__invoke()のみでルートにバインド。小規模機能や API エンドポイントに便利です。
6. コントローラーを「薄く」保つ設計指針
| 課題 | 解決策 |
|---|---|
| ビジネスロジックが肥大化 | サービスクラスやアクションクラスへ委譲 |
| バリデーションが複雑化 | フォームリクエスト (php artisan make:request) へ分離 |
| 共通前処理が散在 | ミドルウェア または trait を活用 |
| メソッドが増大 | モジュール単位でコントローラー分割、RESTful 準拠を維持 |
「薄いコントローラー、太いモデル」よりも、近年はサービスレイヤやクエリビルダ/リポジトリで責務分離し、テスト容易性を高める設計が推奨されています。
7. テストと保守
-
Feature テスト:
php artisan make:test ArticleControllerTestで HTTP レスポンスを検証。 -
統合テスト: DB のダミーデータ投入 (Factory/Seeder) と組み合わせ、実運用に近い振る舞いを確認。
-
PHPStan, Psalm: 静的解析で型安全性を高め、リファクタリング時の破壊を防止。
まとめ
Laravel のコントローラーは、ルートの集中管理・コード再利用・テスト容易性を実現する要の層です。artisan make:controller 系コマンドを活用しつつ、
-
RESTful リソース生成
-
シングルアクションの活用
-
サービス層やフォームリクエストによる責務分離
を組み合わせることで、可読性と保守性に優れたアプリケーション構造を築けます。
ChatGPT4o 生成日:2025/06/23