make:controller — コントローラを作成するコマンド

artisan

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/Userapp/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 へ作成

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする