make:migration — マイグレーションファイルを作成するコマンド

artisan
  • カテゴリ:artisan
  • 掲載バージョン:Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンドphp artisan make:migration
  • 関連:make:model, make:controller, make:seeder, migrate, migrate:rollback
  • 変更履歴:1.0 初期導入 → 8.x で --create / --table オプション追加

要点(TL;DR)

  • データベーススキーマ変更をコード化したマイグレーションファイルを生成
  • 最小構成:php artisan make:migration create_users_table
  • よくある罠
  • 名前は snake_case で付けないとエラー
  • --create を忘れると $table が未定義になる
  • 既存ファイルと同名で作成しようとすると上書き防止エラー

概要

make:migrationdatabase/migrations ディレクトリにマイグレーションクラスを生成します。
名前は自動的にタイムスタンプ付きで登録され、php artisan migrate で実行可能です。
プロジェクトのスキーマ変更をコード化し、バージョン管理できます。

構文 / シグネチャ

php artisan make:migration [name] [options]

引数(表)

引数必須既定値説明
namestring✔︎なしマイグレーションファイル名(例: create_users_table

オプション(表)

オプション必須既定値説明
--createstringなしup()$table->create() を呼び出すテーブル名
--tablestringなし既存テーブルに対して up()/down() を定義
--pathstringなしカスタムディレクトリへのパス
--realpathboolfalse--path で実際のパスを指定
--forceboolfalse既存ファイルがある場合でも上書き

戻り値

  • 型: int(0 は成功、1 は失敗)
  • 意味: Artisan コマンドの終了コード。標準出力に作成ファイル名が表示される。

例外 / 副作用

  • InvalidArgumentExceptionname が空の場合
  • FileExistsException – 同名ファイルが既に存在し、--force が無い場合
  • ファイル生成時にディレクトリが無いと Illuminate\Contracts\Filesystem\FileNotFoundException

使用例

最小例

php artisan make:migration create_users_table

実務例(テーブル作成)

php artisan make:migration create_users_table --create=users

これにより、up()$table->create() が呼ばれ、down()$table->dropIfExists('users') が自動生成されます。

よくある落とし穴・注意

症状/エラー原因対処
Target migration already exists同名ファイルが存在--force を付けて上書き、または別名に変更
Could not find migration classクラス名とファイル名が不一致php artisan make:migration を再実行し、ファイル名を修正
$table が未定義--create--table を忘れた選択したオプションに応じて付与

代替・関連APIとの比較

ユーザーケース推奨手段理由
テーブルを新規作成make:migration --create=table$table->create() が自動生成
既存テーブルを変更make:migration(オプションなし)手動で $table を利用
直接ファイル編集手動で database/migrations/*.php 作成コマンド使用時の誤入力を防ぎたい

テスト例(Pest)

it('creates a migration file', function () {
    Artisan::call('make:migration', [
        'name' => 'create_test_table',
        '--create' => 'test',
    ]);

    $output = Artisan::output();
    // `output` は "database/migrations/xxxxxx_create_test_table.php" のパス
    $path = database_path('migrations/' . preg_match('/(.*)\.php$/', $output, $m) ? $m[1] : $output);
    expect(file_exists($path))->toBeTrue();
});

参考リンク

レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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