この記事では、php artisan make:controllerコマンドについて、
基本的な使い方から実務での応用パターン、よくあるエラーまで徹底解説します。
💡 他のコマンドも知りたい方は artisanコマンド完全チートシート をご覧ください
1. make:controllerコマンドとは
Laravelでコントローラーを作成する際に使用するArtisanコマンドです。
手動でファイルを作成する必要がなく、一瞬でテンプレートが生成されます。
2. 基本的な使い方
最もシンプルな使い方
php artisan make:controller UserController生成されるファイル:app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
//
}サブディレクトリに作成
php artisan make:controller Admin/UserController生成先: app/Http/Controllers/Admin/UserController.php
3. よく使うオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
--resource | CRUD操作のメソッドを自動生成 | make:controller UserController --resource |
--api | API用のリソースコントローラー(create/edit除外) | make:controller ApiUserController --api |
--model=User | モデルと紐付け(タイプヒント自動追加) | make:controller UserController --model=User --resource |
--invokable | 単一アクションコントローラー | make:controller ShowProfile --invokable |
--parent=User | ネストしたリソース用 | make:controller CommentController --parent=Post --resource |
4. 実務でよく使うパターン
パターン1: リソースコントローラー(最も一般的)
php artisan make:controller UserController --resource --model=User生成されるメソッド:
public function index() // 一覧表示
public function create() // 作成フォーム
public function store() // 保存処理
public function show($id) // 詳細表示
public function edit($id) // 編集フォーム
public function update($id) // 更新処理
public function destroy($id) // 削除処理ルート定義:
Route::resource('users', UserController::class);これだけで7つのルートが自動生成されます。
パターン2: API専用コントローラー
php artisan make:controller Api/UserController --api --model=User特徴:
create()とedit()メソッドが無い(API不要)- JSON返却前提の構成
実務での使い方:
// routes/api.php
Route::apiResource('users', Api\UserController::class);パターン3: 単一アクションコントローラー(Invokable)
こんな時に使う:
- メール送信処理
- PDF生成処理
- 単発のバッチ処理
php artisan make:controller SendNewsletterController --invokable生成されるコード:
public function __invoke(Request $request)
{
// 単一の処理を記述
}ルート定義:
Route::post('/newsletter', SendNewsletterController::class);パターン4: ネストしたリソース
ユースケース: 記事のコメント管理(/posts/{post}/comments)
php artisan make:controller CommentController --parent=Post --resource --model=Comment生成されるメソッドの特徴:
public function index(Post $post) // 特定記事のコメント一覧
public function store(Request $request, Post $post) // 特定記事へコメント追加ルート定義:
Route::resource('posts.comments', CommentController::class);5. 実務での注意点とベストプラクティス
5-1. コントローラーは薄く保つ
❌ 悪い例:
public function store(Request $request)
{
// バリデーション
// DB操作
// メール送信
// ログ記録
// 100行以上のロジック...
}✅ 良い例:
public function store(StoreUserRequest $request)
{
$user = $this->userService->create($request->validated());
return redirect()->route('users.show', $user);
}ポイント:
- ビジネスロジックはServiceクラスへ
- バリデーションはFormRequestへ
- コントローラーは「交通整理」に専念
5-2. 名前空間の整理
プロジェクトが大きくなったら:
app/Http/Controllers/
├── Admin/
│ ├── UserController.php
│ └── PostController.php
├── Api/
│ └── V1/
│ └── UserController.php
└── Front/
└── HomeController.php6. よくあるエラーと対処法
エラー1: “Class not found”
原因:
// routes/web.php
Route::get('/users', 'UserController@index'); // Laravel 8以降は非推奨解決策:
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);エラー2: “Target class [UserController] does not exist”
原因: 名前空間の指定ミス
確認ポイント:
// コントローラーファイルの冒頭
namespace App\Http\Controllers; // ← これが正しいか確認
// ルートファイル
use App\Http\Controllers\UserController; // ← use文があるか確認エラー3: コントローラーが上書きされた
状況:
php artisan make:controller UserController
# 既に存在していた場合対処法:
# --forceオプションで強制上書き(注意!)
php artisan make:controller UserController --force⚠️ 既存のコードが消えるので、必ずGit管理下で実行
8. チートシート(コピペ用)
# 基本
php artisan make:controller UserController# リソース(CRUD)
php artisan make:controller UserController --resource --model=User# API専用
php artisan make:controller Api/UserController --api --model=User# 単一アクション
php artisan make:controller ProcessPaymentController --invokable# ネストしたリソース
php artisan make:controller CommentController --parent=Post --resource# サブディレクトリ
php artisan make:controller Admin/UserController# 強制上書き
php artisan make:controller UserController --force9. 関連するArtisanコマンド
コントローラーと一緒によく使うコマンド:
- php artisan make:model の使い方
- php artisan make:request の使い方
- php artisan route:list でルート確認
- php artisan make:resource でAPIリソース作成
まとめ
php artisan make:controllerは、Laravelでコントローラーを作成する最も基本的なコマンドです。
実務で覚えておくべきパターン:
- 通常のCRUD →
--resource --model=User - API開発 →
--api --model=User - 単発処理 →
--invokable
手作業でファイルを作るより、Artisanコマンドを使った方が:
- タイポが無くなる
- 命名規則が統一される
- 開発速度が3倍以上になる
まずは基本的な使い方をマスターして、徐々にオプションを使いこなしていきましょう。

