Laravelでデータベースのカラムを追加・削除・変更するたびに、マイグレーションファイルの命名で迷うことはないだろうか。
今回は sail artisan make:migration を使ったマイグレーションの命名規則と、add・delete・changeなど操作別のコマンドをまとめて整理しておこうと思う。
コピペしてそのまま使える形にしているので、作業の都度このページを参照する形で使ってほしい。
Table of Contents
命名規則の基本
マイグレーションファイルは、ファイル名を見ただけで「どのテーブルに対して何をしたか」がわかるように命名するのが望ましい。
Laravelの慣習として、下記のパターンが一般的に使われている。
{操作}_{カラム名}_to_{テーブル名}_table
例)
add_age_column_to_users_table
delete_age_column_from_users_table
change_age_column_in_users_table
rename_age_to_birth_year_in_users_table※ファイルの処理順はタイムスタンプ(ファイル名の先頭部分)で決まるため、命名自体は機能に影響しない。
ただしチームで開発する場合や後から見返したときの可読性に大きく影響するため、意味のある命名を心がけることが大事だ。
カラム追加(add)
既存テーブルにカラムを追加したい場合のコマンドと命名例。
sail artisan make:migration add_age_column_to_users_table --table=users
↓ 生成ファイル名例
2025_06_01_000000_add_age_column_to_users_table.php生成されたファイルの up() に追加したいカラムを記述する。
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age')->after('email');
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('age');
});
}※ down() にはロールバック時の処理(追加したカラムの削除)を必ず記述しておくこと。
カラム削除(delete / drop)
不要になったカラムを削除する場合。
sail artisan make:migration delete_age_column_from_users_table --table=userspublic function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('age');
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age')->after('email');
});
}カラム変更(change)
データ型や修飾子(nullable・defaultなど)を変更したい場合。
sail artisan make:migration change_age_column_in_users_table --table=userspublic function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('age')->nullable()->change(); // integerからstringに変更、nullable付与
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age')->nullable(false)->change();
});
}※ ->change() を使う際は doctrine/dbal パッケージが必要なバージョンもある。
Laravel10以降はデフォルトで対応しているため、基本的に気にしなくてよい。
カラム名変更(rename)
sail artisan make:migration rename_age_to_birth_year_in_users_table --table=userspublic function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('age', 'birth_year');
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('birth_year', 'age');
});
}複数カラムをまとめて追加(add_multiple)
複数のカラムを同時に追加する場合、1ファイルにまとめて記述できる。
sail artisan make:migration add_title_and_body_to_posts_table --table=postspublic function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->string('title')->after('id');
$table->text('body')->after('title');
});
}
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn(['title', 'body']);
});
}マイグレーション実行・ロールバック
作成したファイルをDBに適用するコマンド。
// 全マイグレーションを実行
sail artisan migrate
// 特定ファイルのみ実行
sail artisan migrate --path=database/migrations/2025_06_01_000000_add_age_column_to_users_table.php
// 直前のマイグレーションをロールバック(バッチ単位)
sail artisan migrate:rollback
// 特定ファイルのみロールバック
sail artisan migrate:rollback --path=database/migrations/2025_06_01_000000_add_age_column_to_users_table.phpチーム開発や本番環境では、 特定ファイルのパス指定でのmigrate/rollbackを使う方がリスクが低くおすすめ。
よく使うカラム型・修飾子まとめ
マイグレーションファイル内で使う代表的な型と修飾子。
| 記述 | 内容 |
|---|---|
$table->string('name') | VARCHAR(デフォルト255文字) |
$table->text('body') | TEXT型 |
$table->integer('age') | INT型 |
$table->boolean('is_active') | BOOLEAN型 |
$table->timestamp('published_at') | TIMESTAMP型 |
$table->foreignId('user_id') | BIGINT型(外部キー用) |
->nullable() | NULL許容 |
->default(0) | デフォルト値を設定 |
->after('email') | 指定カラムの後に配置 |
->unsigned() | 符号なし(正の整数のみ) |