91
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

DBマイグレーションツール: Liquibase と Flyway の比較議論

StackOvevflow - DB Migration tool Liquibase or Flyway? をざっと翻訳 (as of 2013.6.18)

訳注サマリ:複数データベース考慮が不要で実SQLをシンプルに扱うならFlyway、複数データベースを考慮して抽象化もさせてより高度にマイグレーションするならLiquibase

Question

J2EE ウェブアプリケーションのためにDBマイグレーションツールを使いたいと思っています。このアプリは、Jenkins サーバで継続的統合がされます。また、Ant と Maven も使っているので、(可能なら)その両方に対応したものがいいです。

シンプルで簡単な設定がいいですが、将来的に異なる複数のデータベースをサポートすることも必要です。

現在、LiquibaseFlyway と見ています。上記を満たすためにどちらが、なぜよいかを知りたいです。

Answer

Answer (37 votes) by Axel Fontaine

cdeszaq が既に言っているように、[Flyway Homepage] にある機能比較マトリクスは、よい出発点です。

Liquibase と Flyway の両方とも、Maven と Ant へ統合できます。

次のステップは、Liquibase の XML ないしは注釈付き(annotated)のSQLフォーマットを使うか、(Flywayの)プレーンなSQLを使うないしはJavaで書いたマイグレーションを行いたいかを決定することです。

それぞれ、メリット・デメリットがあります。

  • Liquibase XML: 最小限のDB非依存の最大公約数のフォーマット。DDLを書かなくて良くなるし、DB間で互換性がある。ベンダーロックインではある(問題になるかもしれない。ならないかもしれない。)
  • Liquibase annotated SQL: Liquibaseのメタデータをコメント(必須)に付与したSQL。実行時にカスタムのSQLブロックとともにLiquibase XMLに変換されす。DB間で互換性があるかもしれないし、ないかもしれない。SQL with Liquibase metadata in comments (must be present).
  • Plain SQL (Flywayのみ): 通常のDDL SQLファイル。DB間で互換性があるかもしれないし、ないかもしれない。特別なアノテーションはない。ネイティブなDBツールを使って出力したDB構成のダンプが使える。ツール依存はない。ロックインがない。
  • Java migrations (Flywayのみ): JDBC API を使ったJavaクラスのマイグレーション。業務アプリケーション(LOB)の複雑なデータ変換を扱うのに適している。DB間で互換性があるかもしれないし、ないかもしれない。ベンダーロックインではある(問題になるかもしれない。ならないかもしれない。)
  • DDL のポータビリティに関するちょっとしたノート: H2のようなインメモリDBは、”実”DBへの互換モードがある。これだけで、追加で互換性のための抽象化をする必要性がなくなる。

他にも考えられる相違点がいくつかあります。

  • PL/SQLや T-SQL、MyQLやPostgreSQLのストアドをそのままダンプしてつかいたいなら、Flyway にしましょう。
  • もし、DDLがデータベース間で非互換で、LiquibaseのXMLやベンダー特有の機能を使うことを気にしないなら、Liquibase にしましょう。
  • Flywway にサポートされていないDBが必要なら、Liquibase にしましょう。
  • (たとえば、参照データなど) 業務アプリケーション(LOB)のサポートが必要なら、Flyway にしましょう。

シンプルさアプリケーション統合 については、言及してませんでした。ここは Flyway が輝ける領域であると信じています。とても軽量で、アプリケーション統合はこれ以上簡単にできないぐらい簡単に出来ます。

YAGNIの精神に基づいて手っ取り早く: ニーズに合った最もシンプルなツールを使いましょう!

ノート: ここのダウンマイグレーションは、ここにかいたように、おとり(薫製のニシン。訳注:ニュアンスいまいち)です。

免責情報: 私はFlaywayの開発者の一人で、フィードバックを待っています。:-)

Answer (17 votes) by Mark O'Connor

Flyway はとても似たツールです。軽くて、シンプルで、よい統合ができます。もし、すべての変更がSQLで収まるなら、どんなレベルの開発者でも抵抗感がないでしょう。

ただ、個人的にはやっぱりLiquibaseです。Liquibaseは、もっとパワフルな機能があります。

Answer ( 9 votes) by Nathan Voxland

書かれている要件の「将来的に異なる複数のデータベースをサポートする」を考えるなら、Liquibaseの法が良いでしょうあ。Flyway はデータベース特有の生SQLスクリプトを走らせることを中心にデザインされています。一方で、Liquibaseは変更をデータベース中立な方法で記述するオプションを持っており、アップグレードスクリプトは複数のデータベースに利用することができる。もし、Flyway (ないしはLiquibaseの注釈付きSQL)から始めたとしてら、異なるデータベースにデプロイしようとし始めるまでは動作するでしょうし、そこでスクリプトを書き換える必要があるでしょう。

もし、データベースを横断したサポートというものが、小さい課題であるのなら、Liquibase vs Flyway で、その他の機能と設計思想について比較しましょう。Axel の比較は良いものです、しかしながら、私は Flyway が Liquibase に比べて、"よりシンプル"だとは思いません。Liquibase は もっと多くの機能を持つ一方 (データベースdiff、チェンジログパラメータ、プリコンパイル、dbdoc、ロールバックスクリプト生成、実行用出力SQL)で、通常の”変更をすべてのデータベースに適用する”ケースでは、Flyway と同様に、とても直接的でシンプルです。

違いをサマリすると、

Flywayは、”低レベル”で必要なSQLを正しく書いていく、一方で、Liquibase は、”高レベル”で変更したいものを記述し、Liqubase はSQLを算出します。Flyway は、変更をファイル名で管理し、Liquibase は 変更をファイル内の順序で管理します。

免責事項: 私は Liquibase の開発者です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
91
Help us understand the problem. What are the problem?