タイトル: マイグレーションとテーブル定義
本稿はLaravelのマイグレーションとテーブル定義に関する記事です。
子ページから項目を選択してください。
マイグレーションとは?
マイグレーションとはテーブル定義の作成、変更を管理する機能です。
マイグレーションファイルを作成し、ファイル内にテーブル定義の作成、変更を記述することでマイグレイトした際に変更が反映されます。スキーマ変更をPHPコードとしてバージョン管理できるため、本番反映の安全性とチーム間の共有が大きく向上します。
本ページの子ページ一覧
| 項目 | 内容 |
|---|---|
| テーブルの作成と定義の変更 | Schema::create / Schema::table の基本 |
| カラムの追加、変更、削除方法 | addColumn / change / dropColumn |
| データ型とカラム修飾子 | string / integer / boolean / nullable / unique 等 |
| デフォルト値の設定 | default() 修飾子の使い方 |
基本コマンド早見
| コマンド | 用途 |
|---|---|
php artisan make:migration create_xxx_table | 新規テーブル用マイグレーションファイル作成 |
php artisan make:migration add_yyy_to_xxx_table --table=xxx | 既存テーブル変更用 |
php artisan migrate | 未適用のマイグレーションを実行 |
php artisan migrate:rollback | 直前のマイグレーションを取り消し |
php artisan migrate:rollback --step=2 | 2世代前まで取り消し |
php artisan migrate:reset | 全マイグレーションを取り消し |
php artisan migrate:refresh | reset + migrate |
php artisan migrate:fresh | 全テーブルDROP + migrate(開発で便利) |
php artisan migrate:status | 適用状況の確認 |
新規テーブル作成の最小例
|
// database/migrations/xxxx_create_users_table.php |
カラム追加の例
|
Schema::table('users', function (Blueprint $table) { |
本番運用での注意
- マイグレーションは追記式: 既存ファイルを編集するのではなく、新しいマイグレーションを追加する
- ROLLBACK可能なように書く:
down()も必ず実装 - 大規模テーブルへのALTER: ロック時間に注意。pt-online-schema-change 等を検討
- 本番マイグレーションは必ずバックアップ後: マイグレーションでデータ破損するケースを想定
migrate:freshは本番では絶対に使わない(全テーブルDROP)
マイグレーションが本番で失敗したとき
- エラー内容を確認(最後の出力1〜2行が肝心)
- 失敗したマイグレーションはDBに記録されない(rollback不要)
- 原因を修正(既存データとの矛盾、外部キー違反、Index長等)
- 本番DBの該当行を手動修正、または条件付きでマイグレーション本体を修正
- 再実行