【リキベース】

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(基盤)
💬 液体のように柔軟にデータベースの変更を扱えるという意味が込められているよ
← 用語集にもどる