【Laravel】–create オプションの有無による違いは何?

Laravel

マイグレーションファイルを作成するとき、オプションをつけた時とつけなかった時の違いを調べてみました。

sail artisan make:migration create_message_table
sail artisan make:migration create_message_table --create=テーブル名

結論、--create=テーブル名オプションを付けた場合と付けない場合では、マイグレーションファイルの生成内容が異なります。

1. –create=テーブル名を付けた場合

以下のコードを実行したときどうなるかです。

オプションを使用すると、新しいテーブルを作成するためのコードが自動生成されます。

sail artisan make:migration create_message_table --create=テーブル名

生成されるマイグレーションファイル

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('messages', function (Blueprint $table) {
            $table->id(); // 主キー
            $table->timestamps(); // created_at, updated_at カラム
        });
    }

    public function down()
    {
        Schema::dropIfExists('messages'); // テーブル削除
    }
};

オプションをつけたときの特徴

  • Schema::create が自動的に記述され、指定したテーブル (例:messages(テーブル名は複数形)) を作成するコードが含まれます。
  • デフォルトで id カラム(主キー)と timestamps カラム(created_atupdated_at)が生成されます。
  • 作成用のテンプレートが含まれるため、テーブル作成が容易です。

2. –create=テーブル名を付けなかった場合

以下のコードを実行したときどうなるかです。

オプションを省略すると、マイグレーションファイルには 空のテンプレート が生成されます。

sail artisan make:migration create_message_table

生成されるマイグレーションファイル

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        //
    }

    public function down()
    {
        //
    }
};

オプションをつけなかったときの特徴

空のupメソッドと空のdownメソッドのみが生成されます。テーブルを作成する場合でも、自分で Schema::create を記述する必要があります。

phpコードをコピーするSchema::create('messages', function (Blueprint $table) {
    $table->id();
    $table->timestamps();
});

より自由度が高いマイグレーションを作成できます。
(例えば、既存のテーブルにカラムを追加したり、複雑な操作を定義したりする場合)

違いまとめ

項目–create=テーブル名 あり–create=テーブル名 なし
生成される内容テーブル作成用のコードが自動生成される空のテンプレート
用途新規テーブルを作成する場合に便利任意のスキーマ変更に柔軟に対応できる
手動作業の必要性最小限で済む自分でSchema::createなどを書く必要あり

どちらを使うべきか?

新しいテーブルを作成する場合: --create=テーブル名 を使用すると効率的。

既存のテーブルに変更を加える場合: オプションなしを選択し、手動でスキーマ変更を記述します。