【リキベース】

Liquibase とは?

公開:
💡 データベースの「引っ越し業者」——環境が変わっても確実に移行
📌 このページのポイント
Liquibase — DB変更を抽象的に管理 Changelog(YAML) changeset: createTable changeset: addColumn changeset: addIndex Liquibase 抽象定義から DB固有のSQLを 自動生成 ロールバック対応 MySQL PostgreSQL Oracle Flyway vs Liquibase Flyway SQLファースト / シンプル Liquibase 抽象化 / マルチDB / ロールバック
Liquibase は抽象的な変更定義から各DB向けSQLを生成する
ひよこ ひよこ
Liquibaseって何をするツールなの?
ペンギン先生 ペンギン先生
データベーステーブルカラムの変更を「変更セット(changeset)」という単位で管理するツールだよ。Flywayと同じDBマイグレーションツールだけど、より抽象的な定義ができるのが特徴なんだ
ひよこ ひよこ
抽象的な定義ってどういうこと?
ペンギン先生 ペンギン先生
たとえば「usersテーブルにemailカラムを追加」という変更をYAMLで書くと、LiquibaseがMySQL用のSQLPostgreSQL用のSQLOracle用のSQLをそれぞれ自動生成してくれるんだ。直接SQLを書かなくてもDBの種類に合わせて対応できるよ
ひよこ ひよこ
Flywayと比べてどこがいいの?
ペンギン先生 ペンギン先生
ロールバック機能が標準で付いているのが大きな違いだね。変更を巻き戻したいとき、Flywayは有料版が必要だけど、Liquibaseなら無料版でもできるよ。あとdiffコマンドで既存の2つのDBを比較して差分スクリプトを自動生成できるのも便利なんだ
ひよこ ひよこ
changesetってどういう風に書くの?
ペンギン先生 ペンギン先生
XMLだと「addColumn」「createTable」「dropIndex」みたいな変更タイプを指定する形式だよ。YAMLJSONでも同じ内容を書ける。もちろん生のSQLを直接書くこともできるから、複雑なマイグレーションにも対応できるんだ
ひよこ ひよこ
大規模プロジェクトでの運用ってどうしてるの?
ペンギン先生 ペンギン先生
changelog(変更ログ)をincludeで分割管理するのが定番だよ。たとえば年ごと・機能ごとにファイルを分けて、マスターchangelogからインクルードする構成だね。実はLiquibaseにはcontextやlabelという機能があって、「本番環境だけ適用」「テスト環境だけ適用」みたいに環境ごとに適用するchangesetを切り替えられるんだ。これは大規模システムで非常に重宝されるよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Liquibase」って出てきたら「DB変更を抽象的に管理するマイグレーションツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Liquibase」 = Liquid(液体)+ Base(基盤)
💬 液体のように柔軟にデータベースの変更を扱えるという意味が込められているよ
← 用語集にもどる