1. 序章

データベース開発への継続的インテグレーションと自動リファクタリングのこの時代では、革新的なデータベース設計の技術が必要です。 LiquibaseFlywayなどのツールは、これらの手法に従い、反復型開発アプローチを提供します。 この記事では、LiquibaseとFlywayの相違点と類似点について説明します。

すべてのユースケースに最適なツールはないことに注意してください。 各ツールは、独自の場所で強力です。

2. LiquibaseとFlywayの類似点

LiquibaseとFlywayは、進化的データベースの設計原則を実装しているため、多くの同様の機能を提供します。 両方のツール:

  • ある程度オープンソースであり、データベーススキーマの変更の管理、追跡、および展開を支援します。
  • データベーススキーマの変更には、バージョン管理された移行アプローチを使用してください。
  • Javaに基づいており、 SpringBootVert.xなどのJavaフレームワークを広範囲にサポートします。
  • MavenやGradleなどのビルドツールとの統合をサポートします。
  • 提供されたスクリプトを介して、コマンドラインから独立して実行できます。
  • さまざまなデータベースをサポートします。

次に、これらのツールの提供内容の違いについて説明します。

3. LiquibaseとFlywayの違い

3.1. 変更の定義

FlywayはSQLを使用して変更を定義します。 一方、Liquibaseは、XML、YAML、JSONなどのSQLを含むさまざまな形式で変更を指定する柔軟性を提供します。 Liquibaseを使用すると、データベースに依存しない言語を使用して、スキーマの変更をさまざまなデータベースタイプに簡単に適用できます。

Flywayは、バージョン管理された変更ごとに増分する線形データベースバージョン管理システムを中心に構築されています。 これにより、並列開発との競合が発生する場合があります。 Flywayスクリプトのファイル名は、migrationのタイプを定義します。 たとえば、移行には、 V (バージョン管理の場合)、U(元に戻すの場合)、およびR(繰り返し可能の場合)のようなプレフィックスの規則が必要です。 その後にバージョン番号と区切り文字__(2つのアンダースコア)が続き、その後に説明とV01__Add_New_Column.sqlなどのサフィックス.sqlが続きます。

Liquibaseの移行では、ファイル名の規則に従う必要はありません。 Liquibaseでは、変更はマスター変更ログと呼ばれる1つの元帳によって管理されます。この元帳は、すべての移行を含むものとして定義されます。

3.2. 変更の保存

どちらのツールも、デプロイされた変更をテーブルに保存します。 Flywayの移行は、flyway_schema_historyという名前のデフォルトテーブルを使用してデータベーススキーマに保存されます。 同様に、Liquibaseはデプロイされた移行をdatabasechangelogという名前のテーブルに保存します。 どちらのツールも、テーブル名を変更するためのデフォルト構成のオーバーライドをサポートしています。

3.3. 変更の実行順序

Flywayでは、変更の順序を管理することは比較的困難です。 Flywayの場合、順序はファイル名のバージョン番号と移行タイプによって異なります。 逆に、Liquibaseは master_changelog という名前の別のファイルを使用します。このファイルでは、変更が定義された順序でデプロイされます。

3.4. 変更をロールバックする

それでは、データベース移行の主な側面の1つについて説明しましょう。 不適切な変更によってアプリケーションに壊滅的な問題が発生した場合は常にロールバックが必要です。Liquibaseは、すべてをロールバックしたり、特定の移行を元に戻したりする方法を提供します(有料バージョンでのみ利用可能)。

Flywayには、元に戻す移行もあります。これは、 U で始まり、その後に元に戻す必要のあるバージョンが続くファイル名で展開できます。 Its paid version also offers even more complex undo functionality.

どちらのツールもまともなロールバック機能を提供しますが、無料バージョンのみを考慮すると、Flywayは使いやすいソリューションを提供します。

3.5. 変更の選択的展開

1つの環境にのみ変更をデプロイする必要があるユースケースがあります。 変更を選択的にデプロイする必要がある場合、Liquibaseがここで勝ちます。 Flywayもそれを実行できますが、環境またはデータベースごとに異なる構成ファイルを設定する必要があります。 Liquibaseを使用すると、ラベルとコンテキストを簡単に追加して、特定の場所に確実に展開できます。

3.6. Javaベースの移行

Both tools are strongly Java Oriented and provide Java-based migration. Flyway and Liquibase allow defining a migration within a Java file. これは、一部のシナリオで有利な場合があります。

3.7. スナップショットとデータベースの比較

Liquibaseを使用すると、ユーザーはデータベースの現在の状態のスナップショットを撮ることができます。 この状態を使用して、別のデータベースと比較できます。 これは、フェイルオーバーやデータベースレプリケーションなどのシナリオで非常に役立ちます。 一方、Flywayはスナップショット機能をサポートしていません。

3.8. 条件付き展開

Liquibaseは、前提条件と呼ばれる追加機能を提供します。前提条件により、ユーザーはデータベースの現在の状態に基づいて変更を適用できます。 チェンジセットは、これらの前提条件に合格した場合にのみ実行されます。

一方、Flywayはこれをサポートしていません。しかし、プロシージャを介して、ほとんどのSQLベースのデータベースに条件を適用できます。

4. 結論

この記事では、最もよく使用される2つのデータベース移行ツールであるLiquibaseとFlywayを比較しました。 ツールを選択する際には、常にトレードオフがあります。 互いに比較した場合、どちらのツールにも大きな欠点や利点はありません。 アプリケーションのニーズに基づいてLiquibaseまたはFlywayのいずれかを選択し、ほとんどのチェックボックスをオンにすることができます。