Laravel Artisan make:controller
カテゴリ: Artisan
バージョン: Laravel 12・PHP 8.4
コマンド: php artisan make:controller
関連: make:model, make:request, make:migration, make:seeder, make:job
変更履歴: Laravel 12 では主要なオプションに変更はなく、以前のバージョンと同一の機能を提供
TL;DR
make:controller はコントローラクラスを自動生成します。
php artisan make:controller UserController # 基本形
php artisan make:controller Admin/UserController --resource --model=User
--resource で CRUD メソッドを、--api で API 用メソッドを、--model で型ヒント付きモデルバインディングを作成します。
概要
- コントローラクラスを生成し、名前空間とディレクトリを自動設定
- 必要に応じてリソースメソッド、モデルバインディング、フォームリクエストを追加
- 手動で書くよりもミスを減らし、開発スピードを向上
構文 / シグネチャ
php artisan make:controller [options] <name>
引数(表)
| 引数 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
<name> |
string | 必須 | なし | コントローラ名(例: UserController) |
--resource |
flag | 任意 | 無し | CRUD メソッドを生成 |
--api |
flag | 任意 | 無し | index, store, show, update, destroy のみ |
--model=Model |
string | 任意 | 無し | モデルクラスを指定し、型ヒント付き __invoke も生成 |
--parent=ParentController |
string | 任意 | 無し | 既存のコントローラを継承 |
--requests |
flag | 任意 | 無し | フォームリクエストクラスを生成 |
--force |
flag | 任意 | 無し | 既存ファイルを上書き |
--plain |
flag | 任意 | 無し | 空のメソッド構造(コメントなし) |
--invokable |
flag | 任意 | 無し | __invoke メソッドのみを持つコントローラ |
戻り値
void(ファイルを生成して終了)
例外 / 副作用
RuntimeException– 同名クラスが既に存在する場合- 既存ファイルを上書きする場合は
--forceが必須 - PSR‑4 自動ロードにより
app/Http/Controllersへファイルが書き込まれる
使用例
最小構成
php artisan make:controller UserController
実務例
# リソースコントローラ、モデルバインディング、親クラス指定
php artisan make:controller Admin/UserController \
--resource --model=User --parent=AdminController
よくある落とし穴
-
名前空間とディレクトリの不一致
コントローラ名に/を含めると、対応するディレクトリが自動生成されます。
例:make:controller Admin/User→app/Http/Controllers/Admin/User.php -
既存ルートとの衝突
--resourceを使うとRoute::resourceと同名のルートが想定されます。
同名ルートが既に存在するとエラーになる場合があります。 -
モデルバインディングの誤使用
--model=Userを付けたとき、指定したモデルクラスが存在しないとClassNotFoundExceptionが発生します。 -
--plainの使いすぎ
コメントがないため、後からメソッドの意図が分かりにくくなる可能性があります。
代替・関連APIとの比較
| 目的 | make:controller |
make:model |
make:request |
|---|---|---|---|
| コントローラだけ生成 | ✅ | ❌ | ❌ |
| モデル付きリソース生成 | ✅ (--model) |
✅ | ❌ |
| フォームリクエスト生成 | ✅ (--requests) |
❌ | ✅ |
選択基準:
- コントローラのみ →
make:controller - モデルとリクエストが必要 →
make:controller --model --requests - 単純なモデル生成 →
make:model
テスト例(Pest)
it('creates a controller file', function () {
$this->artisan('make:controller TestController')
->expectsOutput('Controller created successfully')
->assertExitCode(0);
expect(file_exists(app_path('Http/Controllers/TestController.php')))->toBeTrue();
});
トラブルシュート(エラー別)
| 症状 / エラー | 原因 | 対処 |
|---|---|---|
Cannot locate Controller path |
PSR‑4 設定が正しくない | composer dump-autoload で再読み込み |
RuntimeException: Class already exists |
同名クラスが既に存在 | --force を付けるかクラス名を変更 |
ClassNotFoundException |
--model に指定したクラスが無い |
モデル名とパスを確認、app/Models へ作成 |

