YASD-TECH
YASD TECH
# Instructions

PrismaDBの正常化

投稿日:2026/5/9

更新日:2026/5/9

ttitleImage

name: fix-migration-checksum
description: 既存マイグレーションファイルを編集した後、ローカルDB(メイン・テスト両方)のチェックサムとスキーマを同期する。新規カラム追加など既存 migration.sql を直接書き換えた際に使う。
allowed-tools: [Bash, Read, Grep]

マイグレーションチェックサム修正

既存の migration.sql を編集した場合、Prisma が記録しているチェックサムと実際のDBスキーマが乖離する。このスキルはその差分を解消する。


実行フロー

Step 1: 変更されたマイグレーションファイルを特定

# developブランチからの変更を確認
git diff develop --name-only -- 'prisma/migrations/**/*.sql'

変更がなければ終了。変更があれば各ファイルについて Step 2 以降を実行。


Step 2: 追加されたSQL差分を確認

git diff develop -- <migration_sql_path>

+ で始まる行(+++ ヘッダーを除く)が追加されたSQL。
これが「DBに未適用の変更」となる。


Step 3: 新しいチェックサムを計算

# macOSの場合
shasum -a 256 <migration_sql_path> | awk '{print $1}'

Step 4: DBの接続URLを取得

# メインDB(マイグレーションユーザー)
cd backend && npx dotenv -e .env.local -e .env -- bash -c 'echo $MIGRATION_DATABASE_URL'

# テストDB(マイグレーションユーザー)
cd backend && npx dotenv -e .env.test -- bash -c 'echo $MIGRATION_DATABASE_URL'

.env.local が存在しない場合は .env のみ使用。


Step 5: 追加されたDDLをDBに適用

git diff から追加されたSQL行を抽出し、両DBに実行する。

# 追加されたSQL(+ 行のみ、ヘッダー除外)を確認
git diff develop -- <migration_sql_path> | grep '^+' | grep -v '^+++' | sed 's/^+//'

DDLを特定したら psql で適用:

# メインDB
psql "<MAIN_MIGRATION_DATABASE_URL>" -c "<追加されたDDL文>"

# テストDB
psql "<TEST_MIGRATION_DATABASE_URL>" -c "<追加されたDDL文>"

注意: ALTER TABLE など冪等でないDDLは IF NOT EXISTS / IF EXISTS を付けて実行する。
例: ALTER TABLE certification.tags ADD COLUMN IF NOT EXISTS "order" INTEGER NOT NULL DEFAULT 0;

テーブル名はスキーマ修飾(certification.<table>)で指定する。


Step 6: チェックサムを両DBで更新

migration_name はディレクトリ名(例: 20260503093857_add_tag_models)。

# メインDB
psql "<MAIN_MIGRATION_DATABASE_URL>" \
  -c "UPDATE certification.\"_prisma_migrations\" SET checksum = '<new_checksum>' WHERE migration_name = '<migration_name>';"

# テストDB
psql "<TEST_MIGRATION_DATABASE_URL>" \
  -c "UPDATE certification.\"_prisma_migrations\" SET checksum = '<new_checksum>' WHERE migration_name = '<migration_name>';"

Step 7: 検証

# Prismaがチェックサムエラーを出さないか確認(メインDB)
cd backend && npx prisma migrate deploy

# テストDB
cd backend && npx dotenv -e .env.test -- npx prisma migrate deploy

どちらも No pending migrations to apply. と表示されれば成功。


Step 8: テストを実行して動作確認

pnpm -F backend test:coverage

注意事項

  • MIGRATION_DATABASE_URL(adminユーザー)を使うこと。 DATABASE_URL(appユーザー)はDDL権限がなく ERROR: must be owner of table になる。
  • 追加したDDLが複数行ある場合は、1文ずつ順番に psql -c で実行する。
  • .env.local が存在する場合は .env より優先される(npx dotenv -e .env.local -e .env の順)。
  • メインDBがCloud SQL(本番・ステージング)には絶対に適用しないこと。対象はローカルDBのみ。

Index

  • name: fix-migration-checksumdescription: 既存マイグレーションファイルを編集した後、ローカルDB(メイン・テスト両方)のチェックサムとスキーマを同期する。新規カラム追加など既存 migration.sql を直接書き換えた際に使う。allowed-tools: [Bash, Read, Grep]
  • マイグレーションチェックサム修正
  • 実行フロー
  • Step 1: 変更されたマイグレーションファイルを特定
  • Step 2: 追加されたSQL差分を確認
  • Step 3: 新しいチェックサムを計算
  • Step 4: DBの接続URLを取得
  • Step 5: 追加されたDDLをDBに適用
  • Step 6: チェックサムを両DBで更新
  • Step 7: 検証
  • Step 8: テストを実行して動作確認
  • 注意事項