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 がサポートする型を確認し、必要に応じて型を修正 |

