Skip to main content

マイグレーションとは

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

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

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

マイグレーションの構造

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

主なカラム定義メソッド

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

カラム修飾子

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

ベクターカラムとインデックス

vector メソッドは、埋め込みベクトルを保存する vector カラムを作成します。dimensions には、使用する埋め込みプロバイダーの出力次元数を指定してください。
ベクターカラムは pgvector 拡張を使用する PostgreSQL 接続と、MariaDB 11.7以降で利用できます。PostgreSQLでは、ベクターカラムを作成する前に pgvector を有効化してください。
ベクターの類似検索を高速化するには、vector カラムに index を追加します。このインデックスは cosine distance を使います。
既存のベクターインデックスを削除する場合は dropVectorIndex を使います。

マイグレーションの実行

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年9月18日