【要約】prisma migrate resolveを使ってRails+Prismaのマイグレーションを共存させる [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
- ・RailsとPrismaが同一DBを操作する構成による競合。
- ・Railsが適用済みの変更をPrismaが検知できず、二重実行によりエラーが発生する。
- ・公式のベースライン手法では、Rails側の継続的なスキーマ変更に対応できない。
// Approach
以下のステップで、Rails由来の変更をPrismaにスキップさせる。
1.命名規則の統一
- ・Rails由来のマイグレーションに
*_rails_imported_schemaという接尾辞を付与。
2.適用状態の判定
- ・
_prisma_migrationsテーブルをSELECTし、finished_atが NULL のレコードを特定。
3.状態の強制更新
- ・特定したレコードに対し
npx prisma migrate resolve --appliedを実行。 - ・SQLは実行せず、管理テーブルのステータスのみを「適用済み」へ書き換える。
4.CIへの組み込み
- ・
prisma migrate deployの前段で、上記判定・更新スクリプトを実行する。
// Result
- ・Railsのスキーマ変更をPrisma側で安全にスキップ可能。
- ・CI運用において、何度実行してもエラーにならない冪等性を確保。
- ・Prismaへの完全移行までの過渡期における、運用負荷の最小化を実現。
Senior Engineer Insight
>
理想はORMの統一だが、移行期の現実的な解として極めて実戦的である。_prisma_migrations の内部状態を直接制御する手法は、既存システムへの影響を最小限に抑えられる。ただし、運用フローに db pull や migrate diff による手動操作が含まれる点が懸念。スキーマの不整合を招くリスクがあるため、CIでの整合性チェックを併用すべきだ。大規模環境では、この「過渡期の運用」をいかに短期間で終わらせるかが鍵となる。