Flyway
Flyway は、データベースの変更にバージョン管理、追跡、適用できるデータベースマイグレーション ツールです。 IntelliJ IDEA は、 マイグレーション (データベースへの変更を定義)および コールバック (マイグレーションライフサイクルの特定のポイントで実行)を生成する専用アクションを備えた Flyway をサポートしています。
IntelliJ IDEA 2024.1 より前のバージョンでは、一部の Flyway 機能は JPA Buddy プラグイン でのみ利用可能でした。 次のビデオでは、これらの機能を Flyway プラグインで利用できることを紹介しています。
既存のプロジェクトに Flyway を追加する。
ビルドファイルをエディターで開きます(プロジェクトで使用するビルドツールに応じて、 pom.xml または build.gradle )。
次の依存関係を追加しますが、バージョンがプロジェクト全体と一致していることを確認してください。
<dependencies> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>12.0.3</version> </dependency> </dependencies>dependencies { implementation 'org.flywaydb:flyway-core:12.0.3' }dependencies { implementation("org.flywaydb:flyway-core:12.0.3") }(任意)Maven や Gradle を使って Flyway コマンドを実行したい場合は、次のプラグインを追加してください。
<plugins> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>12.0.3</version> <configuration> <url>${YOUR_DATABASE_URL}</url> <user>${YOUR_DATABASE_USERNAME}</user> <password>${YOUR_DATABASE_PASSWORD}</password> </configuration> </plugin> </plugins>plugins { id 'org.flywaydb.flyway' version '12.0.3' } flyway { url = '<YOUR DATABASE URL>' user = '<YOUR DATABASE USERNAME>' password = '<YOUR DATABASE PASSWORD>' }plugins { id ("org.flywaydb.flyway") version "12.0.3" } flyway { url = "<YOUR DATABASE URL>" user = "<YOUR DATABASE USERNAME>" password = "<YOUR DATABASE PASSWORD>" }Flyway プラグインの設定一覧については、 Flyway 構成リファレンスを参照してください。
Ctrl+Shift+O を押して変更をインポートします。
Flyway マイグレーション
Flyway マイグレーションは、データベーススキーマまたはデータの変更を定義します。 一般的に SQL で記述されますが、Flyway は Java ベースやスクリプトでのマイグレーションもサポートしています。 IntelliJ IDEA には、空の Java ベースのマイグレーションおよび 2 種類の SQL スキーママイグレーションを生成するための組み込みアクションがあります。
初期マイグレーション :選択したデータモデル(データベースや永続性ユニット)を現在の形で取り込みます。 その結果は、空のデータベースでそのデータモデルを再作成するために使用できる DDL スクリプトになります。
diff マイグレーション :2 つのデータモデルの差分を取り込みます。たとえば、現在のデータベーススキーマとコードのエンティティマッピングとの差分です。 その結果は、ターゲットモデルに対して実行することでソースと一致させる DDL スクリプトになります。
初期マイグレーションを生成する
永続性 ツールウィンドウを開きます。
ツールウィンドウで、永続性ユニットまたはエンティティを右クリックし、 を選択します。
表示される Flyway 初期スキーママイグレーション ダイアログで、マイグレーションの元となるデータモデルを選択します。
モデル: 永続性ユニットのエンティティマッピング
DB: 接続済みデータベースのスキーマ

選択内容に基づき、IntelliJ IDEA が永続性ユニットまたはデータベース接続を自動入力します。必要に応じて変更も可能です。
OK(O) をクリックします。
開いた Flyway マイグレーションのプレビュー ダイアログでマイグレーションの設定をし、 保存 をクリックします。
diff マイグレーションを生成する
永続性 ツールウィンドウを開き、永続性ユニットまたはエンティティを右クリックし、 を選択します。
または、 データベース ツールウィンドウを開き、データベースまたはテーブルを右クリックして Flyway マイグレーションの作成… を選択します。
開いた Flyway 差分マイグレーション ダイアログで、比較するデータモデルを選択します。
ソース (現在のデータモデル):
DB: 接続済みデータベースのスキーマ
モデル: 永続性ユニットのエンティティマッピング
ターゲット (以前のデータモデル):
DB :接続済みデータベースからのスキーマ
スナップショット: データモデルスナップショットからのスキーマ

DB や モデル を選択した場合、IntelliJ IDEA がデータベース接続や永続性ユニットを自動入力します。必要に応じて変更できます。
OK(O) をクリックします。
開いた Flyway マイグレーションのプレビュー ダイアログでマイグレーションの設定をし、 保存 をクリックします。
マイグレーション ファイルでは、テーブル名のクイックナビゲーションがサポートされています。 テーブルのエンティティクラスや、そのテーブルを初めて導入したマイグレーション、または(ファイルに データソースがアタッチされている場合)接続中のデータベース内のそのテーブルの DDL 定義にジャンプできます。
マイグレーションファイルでクイックナビゲーションを使用するには、テーブル名にキャレットを置き、 Ctrl+B を押して、 宣言の選択 リストから移動先を選択してください。 CREATE TABLE ステートメントでクイックナビゲーションを実行することはできませんのでご注意ください。

Flyway マイグレーションプレビュー ダイアログ
Flyway マイグレーションのプレビュー ダイアログでは、生成された DDL ステートメントの確認、マイグレーションへのグループ化、保存方法の設定ができます。

ダイアログ左側には、生成されたスキーマ変更のツリーが表示されます。 各変更には、 危険度別の色分けや関連する型を示すアイコンが付けられます。 特定の変更を選択すると、IntelliJ IDEA がダイアログ右側にその DDL ステートメントを表示します。
ツリー上部のアイコンで、生成された変更やマイグレーションの管理が可能です。
マイグレーションの追加
追加のマイグレーションを作成します。
マイグレーションから除去
選択した変更をマイグレーションから削除し、必要に応じて 無視 セクションに移動して、将来のマイグレーションに含めないようにします。
無視対象から復元
選択した変更を 無視 セクションから、任意のマイグレーションに移動します。
別のマイグレーションに移動
選択した変更を別のマイグレーションに移動します。
このオプションを選択した時に他にマイグレーションがなければ、IntelliJ IDEA が自動的に 1 件作成します。
他のアクションを表示
複数の変更を同時に操作できます: すべて選択 (特定の危険レベルのもの)、 すべて展開 、または すべて折りたたむ。
ダイアログ右側には、現在選択中の変更に対応する生成済み DDL ステートメントが表示されます。 マイグレーション(個別の変更ではなく)を選択すると、このセクションで保存方法の指定もできます。
Java ベースのマイグレーション
Java ベースのマイグレーションは、SQL で表現が難しい変更について SQL マイグレーションの代替手段として利用できます。 Flyway の JavaMigration インターフェース(通常は BaseJavaMigration クラスの継承)を実装し、Flyway の 命名規則に従う Java クラスです。
空の Java マイグレーションを生成する
Ctrl+Shift+A を押し、
Flyway Java マイグレーションと入力し、 Enter を押します。開いた Flyway Java マイグレーション ダイアログでファイル名を設定します。 IntelliJ IDEA は、 Flyway 設定に基づき、プレフィックスと番号を自動入力します。

必要に応じて、マイグレーションを作成するソースルートやパッケージを変更してください。
OK をクリックします。
IntelliJ IDEA が次の Java クラスを生成します。
Flyway コールバック
移行はほとんどのニーズには十分ですが、特定の状況では同じアクションを何度も実行する必要があります。 IntelliJ IDEA を使用すると、Flyway がサポートする すべてのイベントを生成できます。
SQL コールバックを生成する
Ctrl+Shift+A を押して、 Flyway SQL コールバック の入力を開始します。
開いたウィンドウで、生成されたファイルのソースルートとディレクトリを選択します。

コールバックイベント フィールドで、Flyway がサポートするイベントの 1 つを選択します。

オプションで、コールバックに説明を含めることもできます。 説明 フィールドの値がコールバック名に追加されます。
Java コールバックを生成する
エディターで Java ファイルを開きます。
Ctrl+Shift+A を押して、 Flyway Java コールバック の入力を開始します。
開いたウィンドウで、クラス名とコールバック名を入力し、コールバックイベントを選択します。 クラスソースルートとパッケージを選択します。
トランザクション内で処理できます チェックボックスを使用して、
canHandleInTransactionオーバーライドメソッドが true を返すか false を返すかを指定します。
Flyway の設定
空または差分の Flyway 移行が作成されるたびに、IntelliJ IDEA は flyway 命名パターンに基づいてファイル名を生成します。 IDE 設定 (Ctrl+Alt+S) で、名前生成の値を設定できます。

移行接頭辞。 デフォルト値は
Vです。バージョンパターン。 ハイフンの後に、生成されたシーケンスの例が表示されます。
移改行コード文字。 デフォルト値は「_」です。
マイグレーションの説明。
テンプレートでは次の変数とマクロが使用できます。
#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()}: メタ