0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Migrations Generator の使い方(2025年版)

Last updated at Posted at 2025-04-25

Laravel で既存のデータベースからマイグレーションファイルを生成したいとき、Laravel Migrations Generator が便利です。この記事では、自分で試して感じた使いやすさや注意点も交えつつ、使い方を紹介していきます。

1. このツールでできること

Laravel Migrations Generator は、既存のデータベース構造(テーブル定義や外部キーなど)をもとに Laravel のマイグレーションファイルを自動生成してくれるツールです。

たとえば、既存システムをLaravel化したいときや、DB設計先行で始まったプロジェクトでマイグレーションを後から追加したいとき、試行錯誤なマイグレーションが増え過ぎていったんまとめたくなったときなどに便利です。

生成されるのはマイグレーションファイル(migrations/*.php)のみで、モデル・Seeder・Factoryなどは対象外です。モデルを一括生成したい場合は、reliese/laravel という別パッケージを使うとよいかと思います。

2. 基本の使い方

インストール

まずは開発環境専用でインストールしておきます。

composer require --dev kitloong/laravel-migrations-generator

全テーブルのマイグレーション生成

インストールできたら、次のコマンドですべてのテーブルに対応するマイグレーションファイルを生成できます。

php artisan migrate:generate

ファイルは database/migrations/ フォルダに出力されます。

基本はこれだけ。

3. 応用オプション

特定テーブルの指定

書き出すテーブルを限定したい場合は、こんな感じで。

php artisan migrate:generate table1,table2

特定のテーブルを除外する(--ignore)

一部のテーブルだけ無視したいときはこちら。規模が大きいプロジェクトで便利。

php artisan migrate:generate --ignore=logs,temp_data

複数のマイグレーションを1ファイルにまとめる(--squash)

初回納品時など、試行錯誤の痕跡を残さず、初期マイグレーションとしてすっきりまとめたい場合に便利です。

php artisan migrate:generate --squash

外部キー・インデックスの省略

php artisan migrate:generate --skip-foreign-keys --skip-indexes

初期開発やテスト環境など、まだテーブル構造が流動的なフェーズでは、外部キーやインデックスを省略すると柔軟に動かせて便利なことがあります。

DB接続の指定

php artisan migrate:generate --connection=mysql_testing

接続名を指定して、普段使っている .env とは別のデータベースを対象にすることができます。たとえば稼働中の本番DBから直接生成したい場合、リスクを避けるために、読み取り専用のレプリカDBを参照するようにする、というケースです。

また、テストや移行前の検証用として、別の接続設定を用意しておくと安全にマイグレーションファイルを生成できます。

テーブル個別のコレーション設定を省略

php artisan migrate:generate --use-db-collation

このオプションを付けると、使用中のDB接続のデフォルト設定に揃えることができます。このオプションを指定しない場合、実際のテーブル定義にある collation がそのまま出力されるため、スキルレベルが違う開発メンバーが各自バラバラの手順でテーブルを作っていたりすると、生成されるマイグレーションもそのまま再現してしまいます。

意図が不明な照合順序が混在してしまうより、DB 側で統一しておいて、それを信頼するほうが安全かなと思います。このオプションを使うことでコレーションを統一できます。

4. Tips(便利な使い方)

出力先の変更

生成ファイルを別フォルダにまとめたい場合に使えます。

php artisan migrate:generate --path=database/migrations/generated

Laravel風のインデックス名や外部キー名にする

命名規則を統一したいときに便利です。よく覚えてないですが、私が試した時はFKの命名が違っていた気がします。動作には問題ないのでそのまま採用しましたが。

php artisan migrate:generate --default-index-names --default-fk-names

ファイル名のカスタマイズ

php artisan migrate:generate --table-filename="[datetime]_abcde_[name]_table.php"

このオプションでは、生成されるマイグレーションファイルの「ファイル名のパターン」を自分で定義できます。

たとえば上記のように指定すると、以下のようなファイルが生成されます:

2025_04_25_193231_abcde_users_table.php
2025_04_25_193231_abcde_comments_table.php

このように、[datetime][name] プレースホルダーを使って、出力されるマイグレーションファイルの命名規則を制御できます。

チームやプロジェクトで命名ルールを統一したい場合や、出力の識別性を高めたいときに便利です。「どのテーブルか」ではなく「このマイグレーション群は何か(初期構築用・移行用など)」という用途ラベル的な名前をつけたいときにも便利です。

既存のマイグレーションを削除してから実行

競合を避けるために、古いファイルを一掃してから生成すると安心です。

rm database/migrations/*.php
php artisan migrate:generate

5. オプション一覧(抜粋)

オプション 説明
--path=, -p 出力先ディレクトリを指定(相対パス)
--connection=, -c 使用するDB接続を指定
--tables=, -t 対象のテーブルをカンマ区切りで指定
--ignore=, -i 除外するテーブルをカンマ区切りで指定
--squash, -s 出力ファイルを1つにまとめる(初期マイグレーションに便利)
--skip-foreign-keys, -F 外部キー制約をスキップ
--skip-indexes, -I インデックスをスキップ
--use-db-collation, -u charset/collation を DB設定に従うようにする(推奨)
--default-index-names, -d Laravel標準のインデックス名を使用
--default-fk-names, -f Laravel標準の外部キー名を使用
--table-filename=, -n ファイル名パターンを指定。[datetime], [name] を含めると柔軟に命名制御できる

詳細なオプションは GitHub または公式ドキュメントも参考にしてください。

👉 https://github.com/kitloong/laravel-migrations-generator

6. 注意点⚠️

GENERATION_EXPRESSION に関するエラー

以下のエラーが出ることがあるらしいです。

Column not found: 1054 Unknown column 'GENERATION_EXPRESSION' in 'field list'

使っているデータベースのバージョンが古い場合に発生するらしいです・・

対処法

  • MySQLの場合: バージョン5.7以降にアップグレードする
  • MariaDBの場合: バージョン10.2.5以降にアップグレードする

参考: Qiita記事

7. まとめ

Laravel Migrations Generator は、Laravel 開発で「既存DBをコード管理したい」という場合に便利なツールです。手作業で書くより百倍ラクなので、試してみてください!

公式ドキュメント:kitloong.github.io

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?