make:form-field — フォームフィールドを生成するコマンド

artisan

Laravel Artisan コマンド: make:form-field

  • 概要:Laravel アプリケーションにフォームフィールドクラス(例:TextFieldSelectField)を自動生成します。
  • カテゴリ:artisan
  • 掲載バージョン:Laravel 12 / PHP 8.4
  • FQCN / コマンドphp artisan make:form-field
  • 関連make:model, make:request, make:component, make:controller, make:middleware
  • 変更履歴:Laravel 12 で追加、非推奨・後継はなし

TL;DR

  • 何に使うか:フォームフィールドクラスを自動生成。
  • 最低限の使い方
  php artisan make:form-field TextField
  • よくある罠
  • --force で上書きすると既存ファイルが失われる
  • ディレクトリが無いと生成失敗
  • スタブ更新忘れで機能しない

概要

make:form-fieldapp/Forms/Fields ディレクトリにパラメータ化されたフォームフィールドクラスを作成します。
スタブは stubs/form-field.stub から読み込まれ、クラス名・命名空間・ベースクラスが自動で埋め込まれます。
生成されたクラスは FormField を継承し、render()rules() などをオーバーライドして使用します。


構文 / シグネチャ

php artisan make:form-field {name}
引数必須既定値説明
{name}string✔︎なし生成するフィールドクラス名(例: TextField
--typestringtextフィールドのタイプ(text, select, checkbox 等)
--pathstringapp/Forms/Fields生成先パス(相対または絶対)
--forceboolfalse同名ファイルが存在する場合上書きする

戻り値

成功時例外
ファイルパス(例: app/Forms/Fields/TextField.phpFileAlreadyExistsException
PermissionDeniedException

最小例

php artisan make:form-field TextField

生成されるファイル:

<?php

namespace App\Forms\Fields;

use App\Forms\Fields\FormField;

class TextField extends FormField
{
    // ...
}

実務例

php artisan make:form-field SelectField --type=select --path=app/Forms/Fields/Inputs

生成されるファイル:

<?php

namespace App\Forms\Fields\Inputs;

use App\Forms\Fields\FormField;

class SelectField extends FormField
{
    public function options(array $options): self
    {
        $this->attributes['options'] = $options;
        return $this;
    }
}

コントローラでの使用例

public function store(Request $request)
{
    $form = new \App\Forms\Fields\Inputs\SelectField('category_id')
                ->options(Category::pluck('name', 'id'))
                ->required();

    $validated = $request->validate($form->rules());

    // ...
}

よくある落とし穴

典型的な症状原因対処
FileAlreadyExistsException同名ファイルが存在--force を付与するか別名に変更
フォルダがない--path が指すディレクトリが存在しないmkdir -p で作成するか --path を削除
生成されたクラスが名前空間を解決できないcomposer dump-autoload を実行していないコマンド実行後に composer dump-autoload を実行
render() が呼ばれないクラスに実装が不足スタブを確認し必要メソッドを実装

代替・関連APIとの比較

代替手段特徴選定基準
手動作成コントローラで直接クラスを書く小規模プロジェクト・単一フィールド
make:field (外部パッケージ)カスタムフィールド生成既存パッケージ統合が必要
make:form-field (本コマンド)標準化されたファイル構成コードベースの一貫性を重視

Pest テスト例

it('generates a form field class', function () {
    $name = 'TestField';

    Artisan::call('make:form-field', ['name' => $name]);

    $path = app_path("Forms/Fields/{$name}.php");
    expect(file_exists($path))->toBeTrue();

    $content = file_get_contents($path);
    expect($content)->toContain("class {$name} extends FormField");
});

トラブルシュート(エラー別)

エラー原因対処
Unable to create fileファイル権限不足ディレクトリ/ファイルの書き込み権限を確認
Class App\Forms\Fields\TextField does not existComposer autoload が更新されていないcomposer dump-autoload を実行
Argument 1 passed to make:form-field must be a string名前を渡していないname 引数を必ず付与

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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