マイグレーション: スキーマを安全に変える
あなたのスキーマは変わっていきます — カラムを追加し、テーブル名を変え、インデックスを追加します。マイグレーション とは、そうした1つの変更を記述した、バージョン管理された、繰り返し実行できるスクリプトです。マイグレーションが重要なのは、あなたのノートPC、チームメイトのノートPC、そして本番のスキーマが、同一に保たれなければならないからです。
マイグレーションを安全に保つルール:
- 本番でデータベースを手作業で編集しない。 マイグレーションを書きます。
- マイグレーションは前へ進む。 それぞれが新しいファイルです。すでに実行された古いものを書き換えてはいけません。
- 破壊的な変更は慎重に。 カラムやテーブルを削除すると、データは永久に消えます。先にバックアップを取りましょう。
- 追加的な変更が最も安全。 NULL許容のカラムを追加してもめったに何も壊れません。名前変更や削除は、稼働中のコードを壊しかねません。
Prisma、Drizzle、Rails migrationsのようなツールが、これらを生成・追跡してくれます。任せましょう。
マイグレーションは2つの半分でできています: 適用する変更 (up) と、それを取り消す方法 (down) です。信頼できるツールは両方を生成するので、まずいデプロイがきれいにロールバックできます:
-- up: 任意のbioを追加。稼働中に適用しても安全
ALTER TABLE users ADD COLUMN bio TEXT;
-- down: 取り消す
ALTER TABLE users DROP COLUMN bio;
本当に危険なマイグレーションは 名前変更 と 型変更 です。古いコードと新しいスキーマが一瞬食い違うからです。プロのパターンは、それらを追加的なステップに分割することです: 新しいカラムを追加し、バックフィルし、コードがそれを読むよう切り替え、何も参照しなくなった 後の デプロイでようやく古いカラムを削除します。遅く感じますが、それが滑らかなリリースと、デプロイの最中にすべてのユーザーに500エラーが噴き出すこととの違いです。