データベースマイグレーション でーたべーすまいぐれーしょん
マイグレーションスキーマ変更バージョン管理ロールバックFlywayLiquibase
DBマイグレーションって何のためにあるの?
データベースマイグレーションとは
データベースマイグレーション(Database Migration) とは、データベーススキーマ(構造)への変更をバージョン管理しながら安全に適用・ロールバックできる仕組みです。
アプリケーションのコードはGitで管理できますが、データベースのスキーマ変更は「ALTER TABLE」などのSQL文で行われ、追跡・管理が難しい問題がありました。マイグレーションツールはこの問題を解決し、DB変更をコードと同じように管理します。
マイグレーションの仕組み
マイグレーションファイル(例)
V001__create_users_table.sql → テーブル作成
V002__add_email_to_users.sql → カラム追加
V003__create_orders_table.sql → 新テーブル追加
ツールは「どこまで適用済みか」をDBの管理テーブルで追跡し、未適用のマイグレーションだけを順次実行します。
主なマイグレーションツール
| ツール | 言語 | 特徴 |
|---|---|---|
| Flyway | Java/汎用 | シンプルなSQLベース |
| Liquibase | Java/汎用 | XML/YAML/SQLで柔軟に記述 |
| Django Migrations | Python | Django ORMと統合 |
| ActiveRecord Migrations | Ruby | Rails標準 |
| Prisma Migrate | TypeScript | 型安全なスキーマ管理 |
| golang-migrate | Go | シンプルなCLIツール |
歴史と背景
- 2001年前後:Rails(ActiveRecord)がマイグレーションの概念を開発者に広める
- 2010年代:Java・Go等の他言語でもマイグレーションツールが普及
- 現在:CI/CDパイプラインに組み込み、自動でマイグレーションを適用する運用が標準化
マイグレーションの注意点
- 本番DBへの適用は慎重に:大量データのある本番でALTER TABLEはロック・パフォーマンス問題が発生
- 後方互換性を意識する:カラム削除はアプリ側の対応が先
- ロールバックの設計:DownマイグレーションはUpと同じくらい重要
関連用語
- ORM — マイグレーションと組み合わせて使うDB操作フレームワーク
- スキーマ — マイグレーションで変更する対象
- バックアップ・リカバリ — マイグレーション失敗に備えたバックアップ
- CI/CDパイプライン — マイグレーションを自動実行する仕組み
- バージョン管理 — コードとDBスキーマを一緒に管理する