ウェブ · COURSE
DB マイグレーションヘルパー
schema 変更を安全に。ロールバック計画・本番適用前チェックまで。
audience
ウェブ部・SRE
duration
75分
lessons
5 章
reviewed
2026.05
達成目安
全 5 レッスンを読み、コース完了マークを付ける
未完了
クイズ 3 問に挑戦し、正答率 80% 以上
未挑戦
コース構成
このコースで学ぶこと
- 01
DB マイグレーションの怖さ
マイグレーション失敗は本番事故の典型。Claude Code で『書く前にチェック』『書いたあと検証』を体系化。
DB スキーマ変更は、コード変更と違って『戻すのが難しい』。NOT NULL 追加、列削除、インデックス追加(ロック)など、本番で走らせた瞬間に取り返しがつかないことがあります。
Claude Code に既存スキーマ + 変更要件を渡して、(1) マイグレーション SQL の自動生成、(2) ロックリスクの評価、(3) ロールバック手順、(4) ステージング検証チェックリスト、まで一気通貫で生成すれば、事故の確率を大きく下げられます。
- 02
既存スキーマと変更要件を渡す
現状のスキーマ(DDL or 自動生成)+ 変更要件(自然言語)から始める。
text# 変更要件の例(要件.md) ## やりたいこと users テーブルに `last_login_at`(NULLABLE TIMESTAMP)を追加。 さらに `email` に部分インデックス(is_active = true のもののみ)を追加。 ## 制約 - 本番テーブル: 5000 万行 - 適用時間: 5 分以内 - ダウンタイム不可 - ロールバック手順必須 - 03
マイグレーション生成と検証プロンプト
要件を Claude に渡すと、マイグレーション SQL + リスク評価 + ロールバック手順を出す。
text> migrations/requirements/2026-05-add-last-login.md を基に、Drizzle マイグレーションを生成。 ## 必ず含める 1. **up.sql** — 適用 SQL - 大規模テーブルなら `CREATE INDEX CONCURRENTLY` - NOT NULL 追加なら default value or 2 段階で 2. **down.sql** — ロールバック 3. **ロック分析** - どの操作がテーブルロックを取るか - 想定実行時間(5000 万行で) 4. **ステージング検証チェックリスト** - ロック確認方法(pg_locks) - パフォーマンス影響測定 - ロールバック試験 5. **本番適用 SOP** - 適用時刻(深夜 / メンテ枠) - 監視すべきメトリクス - エスカレーション基準出力イメージ生成されたマイグレーション計画(抜粋)### up.sql ```sql ALTER TABLE users ADD COLUMN last_login_at TIMESTAMP; CREATE INDEX CONCURRENTLY idx_users_email_active ON users (email) WHERE is_active = true; ``` ### ロック分析 - ADD COLUMN(NULLABLE): メタデータのみ、ロックは一瞬 - CREATE INDEX CONCURRENTLY: テーブルロックなし。5000 万行で約 3〜4 分の想定 …(down.sql / 検証チェックリスト / 本番 SOP)
- 04
ロック・パフォーマンス影響の評価
Postgres / MySQL でやりがちなロック地雷を AI に指摘させる。
- 🔴 `ALTER TABLE ADD COLUMN ... NOT NULL DEFAULT 'x'` — Postgres 11 未満ではテーブルリライト
- 🔴 `CREATE INDEX` 通常版 — テーブル全体に AccessExclusiveLock
- 🟢 `CREATE INDEX CONCURRENTLY` — オンライン、ただし失敗時の手動 cleanup 必要
- 🟠 列削除 → CMS / アプリのキャッシュ無効化を忘れがち
- 🟠 外部キー追加 → 既存データの整合チェックで時間がかかる
- 05
本番適用前の必修チェックリスト
Claude が出したチェックリストに人間が必ず ✓ を入れる。
Lv.4 — 権限とサンドボックス手を動かす
0 / 6
理解度チェック
Q1.DB マイグレーションを AI 補助で運用するときに、AI 単独で完結させてはいけないのは?
Q2.DB マイグレーションヘルパーの目的として最も適切なのはどれか?
Q3.DB マイグレーションを Claude に手伝わせる際の安全設定として正しいのは?