make:table-column — テーブル列を生成するコマンド

artisan

make:table-column

Laravel 12 で追加されたカスタム Artisan コマンド。既存テーブルに対して新カラムを追加する migration を自動生成する。

  • カテゴリ: artisan
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンド: php artisan make:table-column
  • 関連: make:migration, make:model, make:controller, migrate
  • 変更履歴: Laravel 12 追加(正式サポート)

要点(TL;DR)

  • 既存テーブルにカラムを追加する migration を作成する。
  • php artisan make:table-column users email:string
  • 既存 migration が上書きされないよう注意。

概要

make:table-column は既存のテーブルに対して新しいカラムを追加するための migration ファイルを簡単に生成します。
実務では、フィールドを追加したいテーブル名とカラム情報だけを指定すれば、手作業で書く必要がなくなるため、開発速度を向上させます。

構文 / シグネチャ

php artisan make:table-column {table} {column} {type}
引数 必須 既定値 説明
table string 既存テーブル名
column string 追加するカラム名
type string カラム型(例:string, integer, boolean, date, text, json など)

戻り値
コンソールに生成された migration ファイルのパスを表示します。

例外/副作用

  • RuntimeException – テーブルが存在しない場合。
  • 生成された migration は database/migrations/ に配置され、migrate コマンドで適用されます。

使用例

最小例

// 既存テーブル「users」に string 型の「nickname」カラムを追加
php artisan make:table-column users nickname:string

実務例

// 既存テーブル「orders」に decimal 型の「discount_rate」を追加
php artisan make:table-column orders discount_rate:decimal(5,2)

上記コマンドで生成された migration は次のようになります。

// database/migrations/2026_03_09_123456_add_discount_rate_to_orders_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddDiscountRateToOrdersTable extends Migration
{
    public function up()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->decimal('discount_rate', 5, 2)->nullable();
        });
    }

    public function down()
    {
        Schema::table('orders', function (Blueprint $table) {
            $table->dropColumn('discount_rate');
        });
    }
}

よくある落とし穴・注意

  • 上書きのリスク – 同じ名前の migration が既に存在すると上書きされます。--force オプションで確認をスキップできます。
  • 型の記述ミス – 例えば string:255 と記述すると string が型として解釈され、255 は無視されます。型に数値が必要な場合は decimal(5,2) のように書く必要があります。
  • 既存カラムの確認 – 既に同名カラムが存在するとエラーになるので、事前にテーブル構造を確認しましょう。

代替・関連APIとの比較

make:table-column 手動 migration 作成 make:migration + Schema::table
手軽さ ほぼ完結 手間が増える ほぼ同等だがコマンド単体ではなく作業分割
自動生成内容 追加カラムのみ すべて自分で書く 追加・削除・変更のテンプレートがある
リスク 上書きリスク 低い 低い
推奨シナリオ カラム追加頻度が高い 複雑なテーブル構造変更 一般的な migration

テスト例(Pest)

use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\File;

it('generates migration for new column', function () {
    Artisan::call('make:table-column', [
        'table' => 'test_users',
        'column' => 'age',
        'type' => 'integer',
    ]);

    $output = Artisan::output();
    $this->assertStringContainsString('Migration', $output);

    $files = File::files(database_path('migrations'));
    $file = collect($files)->first(fn($f) => Str::contains($f->getFilename(), 'add_age_to_test_users_table'));

    expect($file)->not->toBeNull();
});

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

症状/エラー 原因 対処
RuntimeException: Table [users] does not exist 指定テーブルがDBに存在しない テーブル名を確認し、存在しない場合はテーブルを作成してから再実行
Command "make:table-column" is not defined. コマンドが無効化されている app/Console/Kernel.php$commands 配列に \App\Console\Commands\MakeTableColumn::class が含まれているか確認
Undefined column type type が正しくない Laravel がサポートする型を確認し、必要に応じて型を修正

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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