Skip to main content

マイグレーションとは

マイグレーションはデータベースのバージョン管理のようなものです。 チームがアプリケーションのデータベーススキーマ定義を共有・管理できます。 ソースコードを pull した後に「ローカルのデータベースにカラムを手動で追加してください」とチームメンバーに伝えなければならない場面を経験したことがあるでしょう。 マイグレーションはその問題を解決します。 マイグレーションファイルは database/migrations ディレクトリに格納されます。 各ファイル名にはタイムスタンプが含まれており、Laravelがマイグレーションの実行順序を決定するために使われます。

マイグレーションファイルの作成

make:migration Artisanコマンドで新しいマイグレーションファイルを生成します。
マイグレーション名から Laravelはテーブル名を推測し、適切なスタブを生成します。 create_posts_table という名前であれば、posts テーブルを作成するコードがあらかじめ用意されます。

マイグレーションの構造

マイグレーションクラスは updown の2つのメソッドを持ちます。
  • up メソッド:テーブル・カラム・インデックスをデータベースに追加します。
  • down メソッド:up の操作を元に戻します。ロールバック時に呼ばれます。

主なカラム定義メソッド

Blueprint クラスには多くのカラム型が用意されています。

カラム修飾子

カラム定義にはメソッドチェーンで修飾子を追加できます。

マイグレーションの実行

migrate コマンドで未実行のマイグレーションをすべて実行します。
実行済みのマイグレーションと未実行のマイグレーションを確認するには migrate:status を使います。
本番環境でマイグレーションを実行すると確認プロンプトが表示されます。 確認なしで実行したい場合は --force フラグを使いますが、データが失われる操作もあるため慎重に行ってください。

ロールバック

直近のマイグレーションバッチを取り消すには migrate:rollback を使います。
特定のステップ数だけロールバックするには --step オプションを指定します。
すべてのマイグレーションをロールバックしてから再実行するには migrate:refresh を使います。
migrate:refresh はすべてのテーブルを作り直すため、既存のデータは失われます。 開発中のデータベースリセットに便利です。

実践例:postsテーブルの作成

ブログ投稿を管理する posts テーブルを例に、一連の流れを確認します。

1. マイグレーションファイルの生成

2. マイグレーションの編集

database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php を開いて編集します。

3. マイグレーションの実行

実行後、データベースに posts テーブルが作成されます。

4. カラムを後から追加する

テーブル作成後に新しいカラムを追加したい場合は、既存のマイグレーションを編集せず、新しいマイグレーションを作成します。
既存のマイグレーションファイルを直接編集するのは避けましょう。 他のメンバーや本番環境との整合性が崩れます。 変更は常に新しいマイグレーションとして追加します。

マイグレーションイベント

マイグレーション操作のたびにイベントが発行されます。すべてのイベントは Illuminate\Database\Events\MigrationEvent を継承しています。 たとえば MigrationsEnded イベントをリッスンして、マイグレーション完了後にキャッシュをクリアすることができます。

次のステップ

データベースシーディング

マイグレーションで作成したテーブルにサンプルデータを投入する方法を学びます。

Eloquent入門

マイグレーションで作成したテーブルをEloquent ORMで操作する方法を学びます。
最終更新日 2026年6月19日