Skip to content

7.5. Flyway + jOOQ codegen統合ビルドフロー

7.5.1. ビルド順序

┌─────────────────────────────────────────────────────────┐
│                    mvn compile                           │
└──────────────────────┬──────────────────────────────────┘


              ┌─────────────────┐
              │  flyway:migrate  │   ① DBスキーマ適用
              └────────┬────────┘


              ┌─────────────────┐
              │  jooq:generate   │   ② Javaコード生成
              └────────┬────────┘


              ┌─────────────────┐
              │    compile       │   ③ コンパイル
              └─────────────────┘

7.5.2. Maven実行順序設定

pom.xmlでプラグインの実行順序を<phase><execution>の順序で制御します。

xml
<build>
  <plugins>
    <!-- 第1段階:Flywayマイグレーション -->
    <plugin>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-maven-plugin</artifactId>
      <executions>
        <execution>
          <id>flyway-migrate</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>migrate</goal>
          </goals>
        </execution>
      </executions>
      <!-- 設定省略([Flyway設定](/ja/backend/data/flyway-config)ドキュメントを参照してください) -->
    </plugin>

    <!-- 第2段階:jOOQコード生成 -->
    <plugin>
      <groupId>org.jooq</groupId>
      <artifactId>jooq-codegen-maven</artifactId>
      <executions>
        <execution>
          <id>jooq-codegen</id>
          <phase>generate-sources</phase>
          <goals>
            <goal>generate</goal>
          </goals>
        </execution>
      </executions>
      <!-- 設定省略([jOOQコード生成](/ja/backend/data/jooq-codegen)ドキュメントを参照してください) -->
    </plugin>
  </plugins>
</build>

7.5.3. ローカル開発ワークフロー

  1. Docker ComposeでPostgreSQLを実行します。
  2. マイグレーションファイルを作成します(src/main/resources/db/migration/)。
  3. mvn generate-sourcesを実行してFlywayマイグレーション + jOOQ codegenを実行します。
  4. 生成されたjOOQクラスを使用してRepositoryコードを作成します。
bash
# PostgreSQL実行
docker compose up -d

# マイグレーション + コード生成
mvn generate-sources

# アプリケーション実行
mvn spring-boot:run

7.5.4. CI環境ワークフロー

CIではFlywayマイグレーションとjOOQ codegenのためにPostgreSQLサービスが必要です。

yaml
# .circleci/config.yml(抜粋)
backend-build:
  docker:
    - image: cimg/openjdk:21.0
    - image: cimg/postgres:16.0
      environment:
        POSTGRES_DB: flowin
        POSTGRES_USER: flowin
        POSTGRES_PASSWORD: flowin1234
  steps:
    - checkout
    - run:
        name: DB待機
        command: dockerize -wait tcp://localhost:5432 -timeout 60s
    - run:
        name: ビルド(マイグレーション + codegen + コンパイル)
        command: mvn package

TIENIPIA QUALIFIED STANDARD