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 つの変更セットに結合するか、無視するには、ドラッグアンドドロップするだけです。プレビューウィンドウの左上隅には、結果の変更ログを変更するためのさまざまなアクションが含まれています。

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

開いた新規 Liquibase 変更ログダイアログで、変更ログファイルの XML または YAML 形式を選択します。
これにより、Liquibase ファイルテンプレートに基づいて新しいファイルが作成されます。IDE 設定 (Ctrl+Alt+S) ので、使用可能なすべてのファイルテンプレートを確認できます。
IntelliJ IDEA は、Liquibase スキーマに対する検証、既知のパラメーターの提案、プロパティ宣言やインクルードファイル(英語)へのナビゲーションなど、XML および YAML Liquibase 変更ログファイルでのコーディング支援を提供します。
プライマリおよびセカンダリの変更ログ
IntelliJ IDEA を使用すると、変更をプライマリとセカンダリの 2 種類の変更ログに保存できます。この機能の 1 つの使用例は、自動的に実行できる安全な変更と、注意が必要で手動で実行する必要がある変更を分離することです。
変更は、そのタイプ (内) によって自動的に分離できます。あるいは、変更ログの追加アクションを使用して、プレビューウィンドウでセカンダリ変更ログを手動で作成することもできます。その後、必要な変更セットを新しい変更ログにドラッグするだけです。
デフォルトでは、プライマリ変更ログとセカンダリ変更ログは別のディレクトリに生成されます。これはプラグイン設定でカスタマイズできます。詳細については、 セクションの 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 パレット) で、アクション (例: 作成 ) を選択し、要素 (例: Table ) をダブルクリックします。
ツールウィンドウの下部 (JPA インスペクター) は、変更ログの選択された要素 (たとえば、changeSet) に適応し、その属性を変更できるようにします。
JPA デザイナーの詳細については、エンティティデザイナーを参照してください。

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

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

関連ページ:
JPA Buddy
JPA Buddy は、開発者が Hibernate、EclipseLink、Spring Data JPA、Flyway、Liquibase、Lombok、MapStruct、その他の関連テクノロジーを Java と Kotlin の両方で効率的に使用できる IntelliJ IDEA プラグインです。このプラグインは、JPA を使用した開発への参入障壁を下げ、開発者の生産性を向上させ、コードがベストプラクティスに従っていることを確認します。JPA Buddy は以下を提供します。JPA を操作...
データベースへの接続
データベースツールと SQL プラグインを有効にするこの機能は、IntelliJ IDEA にデフォルトでバンドルされ有効になっているデータベースツールと SQL プラグインに依存しています。関連する機能が利用できない場合は、プラグインを無効にしていないことを確認してください。を押して設定を開き、を選択します。インストール済みタブを開き、データベースツールおよび SQL プラグインを見つけて、プラグイン名の横にあるチェックボックスを選択します。このトピックでは、IntelliJ IDEA でのデー...
ファイル構造
IntelliJ IDEA を使用すると、構造ツールウィンドウと構造ポップアップでファイルの構造を表示および移動できます。プロジェクトがバージョン管理されている場合、構造ツールウィンドウと構造ポップアップに VCS ステータスの色が表示されます。これは、ファイルの変更を追跡できます。変更されたオブジェクトの名前は青色になり、新しく追加されたオブジェクトの名前は緑色でハイライトされます。構造のアイコンにマウスを合わせると、ツールチップにその項目に関する追加情報が表示されます。例: メソッドが静的かど...
エンティティデザイナー
JPA Buddy をインストールすると、次のものが見つかります。エディターツールバー、JPA デザイナーツールウィンドウ、デザイナー設定で JPA デザイナーの外観をカスタマイズできます。他のパネルと一緒に表示したり、個別のパネルとして表示したり、標準の IntelliJ IDEA パネルに統合したり、完全に非表示にしたりできます。永続化ツールウィンドウ:以前 JPA 構造で利用可能だった機能のほとんどは、現在永続化ツールウィンドウでも利用できます。さらに、JPA Buddy では、永続化ツール...
データベースのバージョニング
ソースコード内のデータモデルがリレーショナルデータベースと確実に一致するようにするには、それらの同期を維持することが重要です。この課題に取り組むために一般的に使用される 2 つの方法があります。データベースファースト:このアプローチでは、データベースは、「データベースリバースエンジニアリング」とも呼ばれるコード生成を通じてデータベーススキーマから生成されるデータモデルクラス (POJO または JPA エンティティ) よりも優先されます。生成されたクラスはいつでも再生成される可能性があり、ソー...
Flyway
対応する機能を有効にするには、プロジェクトに Flyway 依存関係が含まれていることを確認してください。<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>dependencies { implementation 'org.flywaydb:flyway-core' }dependen...