データベースマイグレーションエラー
CI/CDおよび本番デプロイでのPrismaマイグレーション失敗の解決方法。
データベースマイグレーションエラーとは
データベースマイグレーションエラーは、Prismaマイグレーションファイルに競合や問題があり、正常に実行できない場合に発生します。これらのエラーは通常、GitHub Actionsで以下の場面で表示されます:
- Create Neon Branch — PRをプレビュー環境にデプロイする時
- Apply Migrations to Neon Main — mainブランチにマージする時
主な原因:
- 複数のPRからの重複したCREATE TABLE文
- スキーマ定義の欠落や不整合
- 新しいマイグレーションをブロックする失敗したマイグレーション
症状
以下のようなエラーが表示されます:
Error: P3009
migrate found failed migrations in the target database, new migrations will not be applied.
A]migrate resolve --rolled-back 20260401071036_pr576_23836534312
to remove it from the database migrations table.
Read more about how to resolve migration issues in a production database:
https://pris.ly/d/migrate-resolveまた、マイグレーション出力で関係のないテーブルが変更されている場合は、ブランチが最新のmainから作成されていないことを示しています。
ステップ1: ブランチを最新状態にする
トラブルシューティングの前に、ブランチにmainからの最新の変更があることを確認してください:
git checkout main
git pull origin main
git checkout your-feature-branch
git merge mainブランチが古いmainから作成されている場合、関係のないテーブルのマイグレーション変更が表示されることがあります。これはブランチをリベースするか再作成する必要があることを示しています。
多くの場合、最もシンプルな解決策は現在のPRをクローズし、mainからブランチを更新して、新しいPRを作成することです:
ステップ2: 問題を診断する
失敗したGitHub Actionからエラーをコピーし、Claudeに分析を依頼します:
Claudeの分析結果を受け取ったら、次に進む前にVibe Codingプランナー(チームのITスタッフまたはプロジェクトリーダー)に問題とClaudeの推奨事項を報告してください。診断の妥当性を確認し、最も安全な修正方法についてアドバイスを受けられます。
ステップ3: マイグレーションファイルを修正する
Claudeの推奨に基づいて、以下の作業が必要な場合があります:
- 重複したCREATE TABLE文を削除 — 複数のPRが同じテーブルを作成した場合
- schema.prismaを更新 — 期待されるデータベース状態と一致させる
- 競合するマイグレーションを削除 — すでに適用された変更と競合する場合
重要: 他のアプリケーションに属するテーブルやカラムを削除しないように注意してください。
危険ゾーン: ステップ4以降はデータベースを直接変更する操作です。これらの操作は、実行前にITスタッフの確認と承認が必要です。誤ったロールバックはデータ損失や他のアプリケーションの障害を引き起こす可能性があります。
ステップ4: 失敗したマイグレーションをロールバックする
修正をプッシュした後も、失敗したマイグレーションがデータベースに記録されているため、GitHub Actionが失敗する可能性があります。ロールバックが必要です。
新しいエラーをコピーし、Claudeにロールバックコマンドを依頼します:
ステップ5: ロールバックコマンドを実行する
- Railwayサービスの「Variables」からDATABASE_URLを取得
- ローカルでロールバックコマンドを実行:
DATABASE_URL="postgresql://your-connection-string" \
pnpm --filter database exec prisma migrate resolve --rolled-back 20260401071036_migration_name- ロールバック完了後、GitHub Actionを再実行
mainにマージ後にエラーが発生した場合
PRをmainにマージした後にマイグレーションが失敗した場合:
mainから新しいブランチを作成- 失敗した
merge-main-neon-cleanupアクションからエラーをコピー - 上記のステップ2-5に従って問題を診断し修正
- 修正を新しいPRとしてプッシュ
セーフティネット: ポイントインタイムリカバリ
mainへのマージ後に何か問題が発生した場合、Neonはポイントインタイムリカバリを提供しています。チームリーダーまたはデータベース管理者に連絡して:
- 問題のあるマージ前の時点にデータベースを復元
- 正しいマイグレーションを再適用
注意: ポイントインタイムリカバリは、他の修正が失敗した後の最後の手段としてのみ使用してください。
マージ前のチェックリスト
データベース変更を含むPRをマージする前に:
- 最新の
mainからブランチを作成 -
schema.prismaが最新 - マイグレーションファイルが既存のテーブルと競合しない
- 重複したCREATE TABLE文がない
- プレビューデプロイが成功
- すべてのCIチェックが通過
クイズ
'P3009 migrate found failed migrations'というエラーが表示されました。最初に何をすべきですか?