Liquibase
対応する機能を有効にするには、プロジェクトに Liquibase 依存関係が含まれていることを確認してください。 また、変更ログをすばやく生成して実行したり、SQL ステートメントをプレビューしたりするためのさまざまなアクションも提供されます。
スキーマを初期化する
IntelliJ IDEA を使用すると、JPA エンティティで提供されるマッピングに基づいてデータベーススキーマを初期化できます。 現在のエンティティの DDL コマンドのセットが Liquibase 変更ログの形式で生成されます。
Ctrl+Shift+A を押して、 Liquibase 初期スキーマ の入力を開始します。
Liquibase の変更ログファイルを開き、 Alt+Insert を押して、 Liquibase 初期スキーマ を選択することもできます。 この場合、開いたファイルのパラメーターが 変更履歴プレビューウィンドウで使用されます。
データモデルに基づいて DDL スクリプトを生成するには、 モデル を選択し、対応する永続性ユニットを指定します。

IntelliJ IDEA には、選択したエンティティの変更に特化した移行スクリプトを作成するオプションがあります。 スコープ リストで 選択されたエンティティ をクリックし、 カスタムスコープ用のエンティティを選択 ウィンドウでエンティティを選択します。

変更ログのプレビューウィンドウ

変更ログを通常のファイルとして保存する場合は、次の構成オプションが利用可能になります。
ディレクトリ および ファイル名 フィールドは、生成される変更ログの場所を構成します。 指定した名前の変更ログがすでに存在する場合は、警告が表示され、その後、変更がその変更ログに追加されます。
次に含める、 フォルダーを含める、 コンテキストを含める を使用して、変更ログを別の変更ログに含めるかどうかを指定できます。 フォルダーを含める ボックスをオンにすると、現在の変更ログだけでなく、フォルダー全体の include ステートメントが生成されます。
ファイルタイプ ドロップダウンから、Liquibase が対応している 4 種類のファイル型(YAML、JSON、SQL、XML)のいずれかを選択でき、IntelliJ IDEA はその型で変更ログを生成します。
変更ログをスクラッチファイルとして保存する場合は、その名前と種類のみを構成できます。

ウィンドウの左側には、生成される変更セットのプレビューが表示されます。 各変更をクリックすると、どのように表示されるかを確認できます。 複数の変更を 1 つの変更セットに結合するか、無視するには、ドラッグアンドドロップするだけです。 プレビューウィンドウの左上隅には、結果の変更ログを変更するためのさまざまなアクションが含まれています。

次のアクションが提供されます。
変更ログの追加 — セカンダリ変更ログを作成する
変更セットの追加 — 選択した変更ログに新しい変更セットを作成します
変更ログから除去 オプション付き:
変更ログから除去 — 現在の変更ログから変更を削除するだけです
除去して無視 — 変更を削除して 無視 に追加すると、将来の変更セットからも除外されます
無視対象から復元 — 無視 の変更を変更ログに移動します
コンテキストの設定 (変更セット用)
ラベルの設定 (変更セット用)
他のアクションを表示 — 危険レベルに基づいてすべての変更を選択し、すべての変更を展開 / 折りたたむ
空の変更ログを作成する
プロジェクト ツールウィンドウで、 db/changelog ディレクトリを右クリックします。
新規 を選択(または Alt+Insert を押す)し、 Liquibase 変更ログ を選択します。

開いた 新規 Liquibase 変更ログ ダイアログで、変更ログファイルの XML または YAML 形式を選択します。
これにより、Liquibase ファイルテンプレートに基づいて新しいファイルが作成されます。 IDE 設定 (Ctrl+Alt+S) の で、使用可能なすべてのファイルテンプレートを確認できます。
IntelliJ IDEA は、Liquibase スキーマに対する検証、既知のパラメーターの提案、プロパティ宣言や インクルードファイルへのナビゲーションなど、XML および YAML Liquibase 変更ログファイルでのコーディング支援を提供します。
プライマリおよびセカンダリの変更ログ
IntelliJ IDEA を使用すると、変更をプライマリとセカンダリの 2 種類の変更ログに保存できます。 この機能の 1 つの使用例は、自動的に実行できる安全な変更と、注意が必要で手動で実行する必要がある変更を分離することです。
変更は、そのタイプ ( 内) によって自動的に分離できます。 あるいは、 変更ログの追加 アクションを使用して、プレビューウィンドウでセカンダリ変更ログを手動で作成することもできます。 その後、必要な変更セットを新しい変更ログにドラッグするだけです。
デフォルトでは、Primary と Secondary の変更ログは別々のディレクトリで生成され、プラグインの設定でカスタマイズできます。 IDE の設定内、 セクションで続きを読むことができます。
移行スクリプトを生成する
データベース接続が確立されていない場合は、 接続を作成します。
データベース ツールウィンドウで、データベースを右クリックし、 Liquibase 変更ログを作成する を選択します。

または、エディターで JPA エンティティを開き、次のいずれかを実行します。
ガターの
をクリックして Liquibase 変更ログを作成する を選択します。
キャレットをエンティティに置き、 Alt+Enter を押してインテンションアクションを呼び出し、 Liquibase 変更ログを作成する を選択します。
開いたダイアログで、ソース (データモデルの目的の状態) とターゲット (データモデルの古い状態) を選択します。
次のソースオプションから選択できます。
DB: 最新のデータベースがあり、別の DB を同じ状態に更新するための移行スクリプトを生成したい場合に使用する必要があります。
モデル: これを使用して、エンティティリレーションシップモデル (JPA エンティティ) の現在の状態と古い (ターゲット) 状態の違いを表す移行スクリプトを生成します。
ターゲットは次のように設定できます。
DB — ターゲット DB のスキーマが古いバージョンです。
スナップショット - 必要な状態がデータモデルのスナップショットに保存されている場合は、このオプションを使用します。 これは IntelliJ IDEA でも生成できます。
OK をクリックします。 IntelliJ IDEA はソースとターゲットの違いを分析し、 変更ログのプレビュー ダイアログを表示します。
変更ログを通常のファイルとして保存する場合は、次の構成オプションが利用可能になります。
ディレクトリ フィールドで、変更ログファイルを保存する場所を指定します。
ファイル名 フィールドに、生成された変更ログファイルの名前を入力します。
次に含める、 フォルダーを含める、 コンテキストを含める を使用して、変更ログを別の変更ログに含めるかどうかを指定できます。 フォルダーを含める チェックボックスを選択すると、現在の変更ログだけでなく、フォルダー全体の include ステートメントが生成されます。
ファイルタイプ リストで、Liquibase が対応している 4 種類のファイル型(YAML、JSON、SQL、XML)のいずれかを選択でき、IntelliJ IDEA はその型で変更ログを生成します。
変更ログをスクラッチファイルとして保存する場合は、 変更ログのプレビュー ダイアログの上部にある スクラッチファイル を選択し、その名前とタイプを指定します。

Gradle/Maven プラグインなしで Liquibase 変更ログを実行する
JPA 構造タブでは、Liquibase 更新を実行し、SQL をプレビューする方法も提供します。 アップデートを実行するには、 Liquibase の更新 ボタンをクリックします。
データベース ツールウィンドウで、データベースを右クリックし、 Liquibase の更新 を選択します。
または、 Ctrl+Shift+A を押して Liquibase の更新 と入力します。
開いた Liquibase の更新 ダイアログで、次のパラメーターを設定します。
変更ログファイルへのパス
使用する DB 接続
Liquibase のコンテキストとラベル
操作のログレベル

更新 をクリックして、構成されたオプションで Liquibase 更新コマンドを実行します。
SQL の表示 をクリックして SQL ステートメントのプレビューを表示することもできます。

構造ツールウィンドウを使用して変更ログを移動する
Liquibase の変更ログファイルに多数の変更セットがある場合、 構造 ツールウィンドウの 論理ビューを使用すると、ファイルをすばやくプレビューし、ファイル内を移動できます。変更タイプが個別のノードとして表示され、必要に応じて展開して詳細を確認できます。 変更の種類は個別のノードとして表示され、展開すると詳細情報にアクセスできます。
論理ビューは、XML および YAML 変更ログファイルで使用できます。
エディターで変更ログファイルを開いた状態で、 構造 ツールウィンドウ () を開きます。
または、 Alt+7 を押します。
構造 ツールウィンドウで、 論理 タブを開きます。
変更をクリックすると、変更履歴ファイル内の定義に移動します。
includeタグとincludeAllタグの場合は、含まれているファイル内の変更セットにリダイレクトされます。

Liquibase 設定

基本設定
IntelliJ IDEA では以下を指定できます:
使用したい Liquibase のバージョン
変更セットの作成者名
デフォルトのファイルタイプ。 次の 4 つのファイルタイプがサポートされています。
XML
SQL
YAML
JSON
変更ログテンプレート
空または差分の Liquibase 変更ログが作成されるたびに、IntelliJ IDEA はテンプレートに基づいてファイル名を生成します。 変更ログのプライマリ / セカンダリディレクトリと名前を設定できます。
正確な構成には、次の変数とマクロが使用できます。
#date([format])– 指定された SimpleDateFormat(英語) の現在のシステム日付。 例:#date(\"yyyy-MM-dd\")は、2020-12-31 としてフォーマットされた日付を返します。#increment([start], [step], [decimalFormat])— 名前を一意に保つために使用される番号。start値は最初のファイルに使用され、次のファイルごとに段階的に増加します。decimalFormatパラメーターは番号の DecimalFormat(英語) を指定します。 例:#increment(1.0, 0.1, \"#.0\")は、1.1、1.2、1.3 などの形式で値を返します。semVer— プロジェクトのセマンティックバージョン (別名 SemVer) は、3 桁のシーケンス (Major.Minor.Patch)、オプションのプレリリースタグ、およびオプションのビルドメタタグを使用する、広く採用されているバージョンスキームです。 オブジェクトには次のメソッドが含まれています (例の完全バージョンは 1.2.3-SNAPSHOT+meta です)。${semVer.getRawVersion()}: 1.2.3-SNAPSHOT${semVer.getMajor()}: 1${semVer.getMinor()}: 2${semVer.getPatch()}: 3${semVer.getPreRelease()}: SNAPSHOT${semVer.getMeta()}: メタ
Db タイプ
ソフトウェアでは、いくつかの DBMS タイプのサポートを提供する必要がある場合があります。 この場合、DDL 変更を宣言するための DB 間ソリューションを提供する Liquibase が最適な選択肢です。 IntelliJ IDEA もこのソリューションをサポートしています。 DB 間変更ログを生成するときに、Liquibase プロパティを使用して各 DBMS の正しいデータ型を指定します。
異なる DBMS に対して個別の変更ログを作成する必要はありません。
変更セットテンプレート
変更セットテンプレートは、Liquibase を使用してデータベーススキーマの変更を指定するための標準化された形式を提供する事前定義された構造です。 これらのテンプレートは、一貫性があり再利用可能な変更セットを作成するための基盤として機能し、データベースデプロイ全体の統一性とメンテナンスの容易さを保証します。
IntelliJ IDEA は、変更セットを生成する際にテンプレートを適用する機能を提供します。 この機能により、さまざまなカスタマイズ可能な要素を組み込むことができます。
暗黙的なロールバックをサポートしていない変更セットに空のロールバックを追加する – このオプションは、 暗黙的なロールバックが不足している(英語)新しい変更セットに、TODO コメントを含む空のロールバックタグを自動的に追加します。
failOnError および runOnChange: IntelliJ IDEA は changeSet タグ内でよく使用される属性をサポートしており、ユーザーは
failOnErrorおよびrunOnChangeのデフォルト値を設定できます。前提条件を作成する – 各変更セットには特定の前提条件を含めることができます。 例:
tableExistsおよびcolumnExists前提条件タグがaddColumnステートメントに追加されます。
特定の Liquibase 変更セットではこのオプションが提供されない場合があることに注意することが重要です。 例: タグ procedureExists は createProcedure ステートメントでは使用できません。

以下は、ドロップテーブルチェンジセットに対して有効になっている 4 つの機能すべてを示す例です。
JPA Buddy の機能
JPA Buddy プラグインをインストールすると、Liquibase のサポートがさらに強化されます。
JPA デザイナー
JPA デザイナー ツールウィンドウを使用すると、コードを生成および変更できます。
ツールウィンドウの上部 (JPA パレット) で、アクション (例: 作成) を選択し、要素 (例: テーブル) をダブルクリックします。
ツールウィンドウの下部 (JPA インスペクター) は、変更ログの選択された要素 (たとえば、changeSet) に適応し、その属性を変更できるようにします。
JPA デザイナーの詳細については、 エンティティデザイナー を参照してください。

エディターツールバー
エディターツールバーを使用すると、関連するアクションにすばやくアクセスできます。 次のものが含まれます。
JPA 構造で開いているファイルを選択するアクション
JPA パレットからのすべてのアクション
スキーマ変更ログの初期化アクション
差分変更ログアクション

JPA Buddy はデータモデルを理解し、可能な限り変更セットを事前に入力します。 また、JPA Inspector を使用すると、各変更ログ要素の属性を調べることができます。
