~/VibeHandbook
無料 PDF

14 · 04

マイグレーション: スキーマを安全に変える

あなたのスキーマは変わっていきます — カラムを追加し、テーブル名を変え、インデックスを追加します。共有ドキュメントの変更履歴(変更追跡)のようなものだと考えてください: すべての変更が順番に記録され、誰のコピーも同じやり方で最新に揃えられます。マイグレーション とは、そうした1つの変更を記述した、バージョン管理された、繰り返し実行できるスクリプトです。マイグレーションが重要なのは、あなたのノートPC、チームメイトのノートPC、そして本番のスキーマが、同一に保たれなければならないからです。

マイグレーションを安全に保つルール:

  • 本番でデータベースを手作業で編集しない。 マイグレーションを書きます。
  • マイグレーションは前へ進む。 それぞれが新しいファイルです。すでに実行された古いものを書き換えてはいけません。
  • 破壊的な変更は慎重に。 カラムやテーブルを削除すると、データは永久に消えます。先にバックアップを取りましょう。
  • 追加的な変更が最も安全。 NULL許容のカラムを追加してもめったに何も壊れません。名前変更や削除は、稼働中のコードを壊しかねません。

マイグレーションは順序のある鎖を成します: それぞれが番号付きのステップで、データベースのすべてのコピーを、ある既知の状態から次の状態へ動かします。だからあなたのノートPC、チームメイトのもの、そして本番が、すべて同一に行き着きます:

   空のDB
      │
      ▼
  ┌────────────┐   ┌────────────┐   ┌────────────┐   ┌────────────┐
  │ 001_init   │ ▶ │ 002_add    │ ▶ │ 003_index  │ ▶ │ 004_bio    │
  │ users      │   │ posts      │   │ on author  │   │ カラム     │
  └────────────┘   └────────────┘   └────────────┘   └────────────┘
   順に適用 ──────────────────────────────────────────▶ 現在
   実行済みのステップは編集しない — 新しいものを追加

Prisma、Drizzle、Rails migrationsのようなツールが、これらを生成・追跡してくれます。任せましょう。

マイグレーションは2つの半分でできています: 適用する変更 (up) と、それを取り消す方法 (down) です。信頼できるツールは両方を生成するので、まずいデプロイがきれいにロールバックできます:

-- up: 任意のbioを追加。稼働中に適用しても安全
ALTER TABLE users ADD COLUMN bio TEXT;

-- down: 取り消す
ALTER TABLE users DROP COLUMN bio;

本当に危険なマイグレーションは 名前変更型変更 です。古いコードと新しいスキーマが一瞬食い違うからです。プロのパターンは、それらを追加的なステップに分割することです: 新しいカラムを追加し、バックフィルし、コードがそれを読むよう切り替え、何も参照しなくなった 後の デプロイでようやく古いカラムを削除します。遅く感じますが、それが滑らかなリリースと、デプロイの最中にすべてのユーザーに500エラーが噴き出すこととの違いです。

オフラインでも読みたい?

本編まるごとを PDF または EPUB で無料ダウンロード。