😎

jOOQ + Flywayでコード生成

2024/09/01に公開

前回jOOQでコード生成ができたので、次はFlywayでマイグレーション後にコード生成を試す。
https://zenn.dev/kentama/articles/1ea77d73ca9a37

環境

  • jOOQ: 3.19.11
  • Flyway: 9.22.3
  • PostgreSQL: 15

Flywayの設定

以下は、Flywayでマイグレーションを行うための最低限の設定

build.gradle.kts
plugins {
    kotlin("jvm")
    id("org.jooq.jooq-codegen-gradle") version "3.19.11"
+    id("org.flywaydb.flyway") version "9.22.3"
}


jooq {
    configuration {
        generator {
            // ...
            database {
                name = "org.jooq.meta.postgres.PostgresDatabase"
                inputSchema = "public"
                includes = ".*"
+                excludes = "flyway_schema_history" // 不要なので除外
            }
        }
    }
}

+flyway {
+    driver = "org.postgresql.Driver"
+    url = "jdbc:postgresql://localhost:5432/postgres"
+    user = "postgres"
+    password = "password"
+    schemas = arrayOf("public")
+}

+tasks.named("jooqCodegen") {
+    // コード生成の前にマイグレーションを実施させる
+    dependsOn(tasks.named("flywayMigrate"))
+}

コード生成

以下のコマンドを実行して、Flywayのマイグレーション後にコードを生成が実行されることを確認する。
flywayMigrateが実行されていればOK。

$ ./gradlew jooqCodegen --dry-run
flywayMigrate SKIPPED
jooqCodegen SKIPPED

確認ができたら実際にコード生成を行う

$ ./gradlew jooqCodegen

マイグレーションファイルが変更されたときだけコード生成させる

Gradleのビルドキャッシュを利用することで、マイグレーションファイルが変更されたときだけコード生成させることができる。
buid.gradle.ktsに以下を追記する。

kotlin
tasks.named("jooqCodegen") {
    dependsOn(tasks.named("flywayMigrate"))
+    // マイグレーションファイルのパスを指定
+    inputs.files(fileTree("src/main/resources/db/migration"))
}

次に--build-cacheオプションを指定してコード生成を行う。キャッシュが使われていることがログで確認できる。

$ ./gradlew jooqCodegen --build-cache
...
> Task jooqCodegen FROM-CACHE

Discussion