スキーマドリフトの検出
チェックは全部緑。それでもスキーマはズレていた。
スキーマドリフトとは、「データベースがこうなっているはず」という認識と、実際の姿との差のことです。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 は無料・アカウント不要・期限なし。準備ができたら他のエンジンを追加できます。