📌

【Symfony】Doctrineマイグレーションコマンド逆引きチートシート

に公開

【Symfony】Doctrineマイグレーションコマンド逆引きチートシート

はじめに

  • Symfony (Doctrine) でDBスキーマを管理するdoctrine:migrationsは非常に強力だが、コマンドの種類が多く、オプションも忘れがち。
  • この記事は「やりたいこと」をベースに、どのコマンドを実行すればよいかを素早く参照できる「逆引きチートシート」です。

基本の3大コマンド

  • まず、これだけは覚えておきたい基本的なコマンド3つを紹介します。
    1. doctrine:migrations:diff (差分ファイルの生成)
    1. doctrine:migrations:migrate (マイグレーションの実行)
    1. doctrine:migrations:status (実行状態の確認)

【逆引き】やりたいこと別チートシート

1. Entityの変更をDBに反映したい

  • 概要: Entityファイル(src/Entity/)を変更・追加した時の操作です。
  • Step 1: 差分ファイルを作成する
    • php bin/console doctrine:migrations:diff
    • (実行結果の例)
  • Step 2: マイグレーションを実行する
    • php bin/console doctrine:migrations:migrate
    • (実行結果の例)

2. マイグレーションの状況を確認したい

  • 概要: 現在どのバージョンまで適用されているか、未適用のマイグレーションは何かを確認します。
  • コマンド: php bin/console doctrine:migrations:status
  • TIPS: 特定のバージョンの詳細(SQLなど)を確認する
    • php bin/console doctrine:migrations:version YYYYMMDDHHMMSS --show-version

3. 安全にマイグレーションを実行したい (Dry Run)

  • 概要: 実際にDBに変更を加えず、実行されるSQLだけを確認したい(特に本番環境前)。
  • コマンド: php bin/console doctrine:migrations:migrate --dry-run
  • TIPS: SQLをファイルに出力する
    • php bin/console doctrine:migrations:migrate --write-sql=/path/to/output.sql

4. 特定のバージョンに戻したい (ロールバック)

  • 概要: 直前のマイグレーションを取り消したり、指定したバージョンまで戻したりします。
  • 直前のバージョンに戻す
    • php bin/console doctrine:migrations:migrate prev
  • 指定したバージョンに戻す(または進める)
    • php bin/console doctrine:migrations:migrate YYYYMMDDHHMMSS
    • (注意点: down() メソッドが正しく実装されている必要がある)

5. マイグレーションファイルを手動で作成したい

  • 概要: Entityの変更差分ではなく、手動でデータ移行SQLなどを書きたい場合。
  • コマンド: php bin/console doctrine:migrations:generate
  • (生成される空のファイルと、up(), down() の説明)

6. マイグレーションの実行履歴を操作したい

  • 概要: ファイルは存在するが「実行済み」扱いにしたい、またはその逆を行いたい場合。
  • 特定のバージョンを「実行済み」としてマークする
    • php bin/console doctrine:migrations:version YYYYMMDDHHMMSS --add
  • 特定のバージョンを「未実行」としてマークする
    • php bin/console doctrine:migrations:version YYYYMMDDHHMMSS --delete

おわりに

  • doctrine:migrations コマンドは多いが、「やりたいこと」とセットで覚えれば怖くない。
  • このチートシートが開発の助けになれば幸いです。

Discussion