1. migrationファイルについて
マイグレーションファイルとは、一言で言えば「データベースの設計図」であり、「DBの変更履歴を管理する」ものです。
2. migrationファイルの作り方
ファイルはすべて、Artisanコマンドを使って自動生成します。
基本のコマンド
php artisan make:migration create_posts_table
これを実行すると、database/migrations/ フォルダの中に 2026_05_28_123456_create_posts_table.php のような「日時+指定した名前」のファイルが自動で作られます。
データを司る「Model(モデル)」と同時に作ることもできます。
php artisan make:model Post -m
末尾に -m をつけるだけで、モデルファイルとマイグレーションファイルを一撃で同時に作ってくれます。
3. migrationファイルの書き方
生成されたファイルを開くと、主に up() と down() という2つのメソッド(箱)が用意されています。
-
up():データベースに変更を加えるときの処理(テーブル作成、カラム追加など) -
down():その変更を元に戻す(ロールバックする)ときの処理(テーブル削除、カラム削除など)
基本的な白紙の状態(例:postsテーブル)
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
// DBに反映するとき(未来へ進む)
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id(); // 自動連番のID(主キー)
// 💡 ここに欲しいカラムを書いていく
$table->timestamps(); // 作成日時(created_at)と更新日時(updated_at)を自動で作る
});
}
// 元に戻すとき(過去に戻る)
public function down(): void
{
Schema::dropIfExists('posts'); // postsテーブルが存在したら消す
}
};
4. migrationファイルでよくつかう書き方(カラム型と制約)
up() の中に、どのようなデータを書き込みたいかに応じて「型」と「制約(ルール)」を組み合わせて書いていきます。
よく使う「データ型」
$table->string('title'); // 短い文字列(ユーザー名、タイトルなど)
$table->text('content'); // 長い文字列(ブログの本文など)
$table->integer('price'); // 整数(金額、カウントなど)
$table->boolean('is_active'); // true または false(フラグ管理)
$table->date('birthday'); // 日付(YYYY-MM-DD)
よく使う「制約・オプション(修飾子)」
型に続けて矢印 -> で繋いで、カラムにルールを設定できます。
// 空っぽ(NULL)でもOKにする
$table->string('profile_image')->nullable();
// 何も入力されなかったときのデフォルト値を決める
$table->string('status')->default('draft');
// 他のデータと絶対に重複させない(ログイン用メールアドレスなど)
$table->string('email')->unique();
// データベースにメモ(コメント)を残す(実務で超重要!)
$table->integer('role')->comment('1:一般ユーザー, 2:管理者, 3:店舗');
// カラムを追加する場所を「title」の後ろに指定する(既存テーブル変更時)
$table->string('subtitle')->after('title');
5. migrationファイルにおける注意点
① down() を絶対にサボらない
「元に戻せること」がマイグレーションの最大の価値です。up() でカラムを追加したら、down() には必ずそれを削除するコード($table->dropColumn('カラム名');)を書きましょう。サボると、ロールバックした時にエラーで詰まります。
② 過去のファイルを直接書き換えない(超重要)
すでにチームに共有したり、本番環境で実行してしまったマイグレーションファイルを後から直接書き換えてはいけません。
変更したいときは、「新しく変更用のマイグレーションファイルを作る」 のが鉄則です。
③ migrate:fresh の取り扱いは命がけ
php artisan migrate:fresh は「すべてのテーブルを一度完全に削除して、最初から作り直す」コマンドです。開発初期のローカル環境では便利ですが、本番環境で実行すると全ユーザーのデータが吹き飛びます。 本番では絶対に実行しないよう、細心の注意を払ってください。