スキーマドリフトの検出

チェックは全部緑。それでもスキーマはズレていた。

スキーマドリフトとは、「データベースがこうなっているはず」という認識と、実際の姿との差のことです。DiffyPick は 2つのデータベースを比較し、何がズレたかを正確に示して、その差を埋める SQL を生成します。

スキーマドリフトとは

一致しているはずの 2つのデータベース — ローカルと検証、検証と本番 — が、いつの間にか食い違っていく現象です。ここにカラムが 1つ、そこにインデックスが 1つ、誰かが手で変えた制約が 1つ。

マイグレーション履歴は「何が起きるはずだったか」を教えてくれますが、「いま実際にどうなっているか」は教えてくれません。それを知っているのはデータベースだけで、DiffyPick はそれを直接読み取ります。

ドリフトはこうして忍び込む

マイグレーション化されなかった障害対応

本番障害でコンソールに直接 ALTER。その場は直り、そのままバージョン管理に戻ってこなかった。

共有環境

5人で共有する検証データベース。ある日カラムが増えていて、誰が足したのか誰も覚えていない。

途中まで適用されたマイグレーション

マイグレーションが途中で失敗した、あるいはどこかで違う順序で走った。履歴は「完了」、スキーマはそう言っていない。

手作業や別ツールでの変更

GUI での変更、その場限りのスクリプト、同じ DB を触る別チーム — どれもマイグレーションファイルには現れません。

5秒で気づく

DiffyPick を 2つのデータベースに向けると、差分のあるテーブル・カラム・インデックス・制約をすべて、色分け・検索可能に 1行ずつ一覧します。

違いを確認し、適用するものを選んで同期。もう一度比較して「差分はありません」が出たら、そこで本当に揃っています。「揃ったつもり」ではありません。

Flyway・Liquibase との併用

DiffyPick はマイグレーションツールを置き換えるものではなく、履歴からは分からない問いに答えます — データベースは本当に、マイグレーションが意図した形になったのか。

いつも通りマイグレーションを流し、その後 DiffyPick で比較すれば、現実が意図と一致しているかを確認でき、マイグレーション経路の外で入り込んだドリフトも捕まえられます。

結果的に既存のマイグレーションファイルの健康度をより高く保てることになります。

マイグレーションなしで運用することも

モデルが真実で、監査可能な変更履歴が要らないなら、DiffyPick だけでスキーマ運用は完結します。モデルからスキーマを起こし、実データベースと差分を取り、同期する — マイグレーションファイルを書く必要はありません。

これは state-based(宣言的)なやり方です。目的地を記述すれば、そこへ至る手順は差分が導き出します。

トレードオフは正直にお伝えします。これが向くのは solo〜小チームの state-based なワークフローです。監査履歴、データの backfill や変換、CI 駆動の決定論的なデプロイが必要なら、マイグレーションツールを併用してください。DiffyPick は設計上、GUI で人が確認しながら進めるツールです。

本当にズレたものを、見に行く。

SQLite は無料・アカウント不要・期限なし。準備ができたら他のエンジンを追加できます。