====== FAQ ====== ==== Liquibase はどのライセンスのもとにリリースされていますか? ==== Liquibase は、Apache License, version 2.0 ライセンスでリリースされています。 ==== ソースコードはどこから入手できますか? ==== ソースコードは[[download | ダウンロード]] ページから入手可能です。 ==== Liquibase は開発環境のデータベースと本番環境のデータベースを比較して変更リストを生成するツールとどこが違うのですか? ==== Liquibase は、よりよく動きます。なぜなら変更が何かを // 理解している // からです。たとえば、データベースの比較プログラムが単純に、 結合環境の "person" テーブルに "firstname" と "lastname" カラムがあり、本番環境のシステムの、 "person" テーブルには、"name" カラムがあった場合、単純に "name" カラムをドロップして、 "firstname" カラムと "lastname" カラムを追加するようにレポートするでしょう。これはあなたのスキーマを適切な状況におくかもしれませんが、進行中は全員の名前(name)の値を失うことになります。Liquibase を利用すれば、変更セットは、" 'name' カラムを 'lastname' にリネームして、'firstname' カラムを追加するようにレポートするでしょう。" またもっとよい場合には、"name カラムをスペースで分割して、'firstname' と 'lastname' カラムにわけ、次に 'name' カラムをドロップするようにレポートすることもあるでしょう。" //なぜ// それらが本番環境と異なっているかを理解することで、価値あるデータを失うおそれがないのです。 ==== もし、複数のプロセスやアプリケーションが同時にデータベースを移行しようとしたらどうなりますか? ==== Liquibase は分散されたロックシステムを利用して、同時に一つのプロセスだけがデータベースを更新できるようになっており、ほかのプロセスは単純にロックが解放されるまで待つことになります。 ==== Liquibase はコードブランチと一緒に動作しますか? ==== はい。それぞれの変更は独立しており、ことなるブランチで作成されてマージされたデータベースへの変更が Liquibase から実行されるからです。文が実行される順序に関して問題が発生するかもしれませんが、変更ログファイルの順序を並び替えることでどんな問題でも容易に解決できるでしょう。 ==== なぜ、"author" タグを指定しなければいけないのですか? ==== なぜ、"id" タグだけではだめなのでしょう? author と id 属性タグの両方を必要とする主な理由は、同一人物が同じ "id" の値を利用することが簡単に起こりうるからです -- とくに複数のブランチを使用しているときには。ソース管理システムは、異なるブランチに追加された2つの変更セットを解決し、マージしようとしますが、2つの異なる変更セットが同じ "id" を利用することは気にしませんので、いったん変更セットがひとつの id でデータベースに対して実行されてしまうと、(かんたんには) 変更できません。 author タグに基づいて変更セットの一意性を決定することで、重複の可能性を低減させています。 ==== ほんとうに author タグを使用したくないのですが? ==== 組織によっては、変更を特定の個人にひもづけたくない場合や、もとの作者(author)が本当にわからない場合もあるでしょう。このときには、値を "UNKNOWN" のような値に変えてしまってください。 ==== データベースベンダー固有の機能、たとえば MySQL で ENGINE=InnoDB は使用できますか? ==== 現在のところ、テーブル作成タグでは、ベンダー固有の機能には対応していませんので、 タグを利用し手動で SQL 文を書く必要があります。もちろん、MySQL で default-storage-engine=INNODB と設定し、デフォルトのストレージエンジンを変更してもよいでしょう。 1.9 から、<[[ja/manual/modify_sql]]> タグを移用することで、生成された SQL を変更できるようになりました。