カテゴリ: Quarkus 更新日: 2026/03/31

GitLab CIでQuarkusプロジェクトを構築!初心者向けCI/CDパイプライン入門ガイド

GitLab CIでQuarkusプロジェクトを構築
GitLab CIでQuarkusプロジェクトを構築

先生と生徒の会話形式で理解しよう

生徒

「最近よく聞くQuarkusを使って、GitLabで自動ビルドをやってみたいのですが、難しそうで…。」

先生

「大丈夫ですよ!GitLab CIを使えば、コードをプッシュするだけで自動的にQuarkusのビルドやテストを実行するパイプラインを簡単に作ることができます。」

生徒

「Javaのビルド環境とか、設定ファイルはどう書けばいいんですか?」

先生

「基本となる設定ファイル .gitlab-ci.yml の書き方から、効率的なビルド方法まで順番に解説していきますね。」

1. QuarkusとGitLab CIを組み合わせるメリット

1. QuarkusとGitLab CIを組み合わせるメリット
1. QuarkusとGitLab CIを組み合わせるメリット

モダンなJava開発において、超高速な起動と低メモリ消費を誇るQuarkusは、クラウドネイティブなアプリケーション開発の主役となっています。このQuarkusの力を最大限に引き出すのが、GitLab CI/CDによる開発プロセスの自動化です。

GitLab CIを導入することで、エンジニアが手動でコンパイルやテストを行う手間が省けます。コードをリポジトリに保存するたびに、サーバー側で自動的にMavenやGradleが実行され、バグを早期に発見できるようになります。特にQuarkusはコンテナ化との相性が抜群なため、ビルドからDockerイメージの作成までを一貫して自動化できる点は大きな強みです。初心者の方でも、まずは基本的なビルド工程を自動化することから始めれば、開発効率が劇的に向上することを実感できるはずです。

2. 事前準備とプロジェクトの構成

2. 事前準備とプロジェクトの構成
2. 事前準備とプロジェクトの構成

まずは、ビルド対象となるQuarkusプロジェクトが必要です。Mavenを使用する場合、標準的なディレクトリ構造は以下のようになります。GitLab CIは、プロジェクトのルートディレクトリにある設定ファイルを読み取って動作します。

プロジェクトの雛形を作成するには、Quarkusの公式サイトやCLIツールを利用するのが便利です。以下のサンプルコードは、非常にシンプルなREST APIのエンドポイントを持つJavaクラスの例です。まずはこのような簡単なプログラムから自動ビルドのテストを始めましょう。


package org.acme;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/hello")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello from Quarkus with GitLab CI!";
    }
}

このコードを作成したら、ローカル環境で ./mvnw compile が正常に動作することを確認しておきましょう。準備ができたら、GitLabにリポジトリを作成し、コードをコミットします。

3. gitlab-ci.ymlの基本設定

3. gitlab-ci.ymlの基本設定
3. gitlab-ci.ymlの基本設定

GitLab CIの核となるのが、.gitlab-ci.yml という設定ファイルです。このファイルに「どのOSで」「どのコマンドを実行するか」を記述します。QuarkusのビルドにはJavaの実行環境(JDK)が必要なため、公式のMavenイメージやJavaイメージを使用するのが一般的です。

以下の設定例は、Quarkusプロジェクトをビルドするための最もシンプルな構成です。stages で工程を定義し、script 内で実行したいコマンドを列挙します。初心者の方は、まずこのテンプレートをコピーして試してみることをお勧めします。


image: maven:3.9.6-eclipse-temurin-17

stages:
  - build
  - test

build-job:
  stage: build
  script:
    - echo "Quarkusプロジェクトのビルドを開始します..."
    - ./mvnw package -DskipTests
  artifacts:
    paths:
      - target/*.jar

test-job:
  stage: test
  script:
    - echo "単体テストを実行中です..."
    - ./mvnw test

この設定ファイルでは、まずJava 17がインストールされた環境を用意し、build ステージでビルドを行い、その後に test ステージでテストを実行するという流れになっています。artifacts を指定することで、ビルドされたJARファイルをGitLabの画面からダウンロードできるようになります。

4. Mavenラッパーとキャッシュの活用

4. Mavenラッパーとキャッシュの活用
4. Mavenラッパーとキャッシュの活用

CI環境でビルドを行う際、毎回依存ライブラリをダウンロードしていると時間がかかってしまいます。そこで重要なのがキャッシュ(cache)の設定です。Mavenのローカルリポジトリ(.m2/repository)をキャッシュすることで、2回目以降のビルド時間を大幅に短縮できます。

また、環境にMavenがインストールされていなくても動作するように、./mvnw(Maven Wrapper)を使用するのがQuarkusの標準的な作法です。スクリプト内で実行権限を与える必要がある場合があるため、chmod +x mvnw をコマンドに含めるのがコツです。実行結果のログを確認することで、正しくキャッシュが効いているか判断できます。


[INFO] Scanning for projects...
[INFO] -------------------< org.acme:code-with-quarkus >-------------------
[INFO] Building code-with-quarkus 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] --- quarkus-maven-plugin:3.6.0:build (default) @ code-with-quarkus ---
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 1500ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

このように「BUILD SUCCESS」と表示されれば、GitLab CI上でのビルドは成功です。キャッシュを適切に設定すると、この工程が数分から数十秒に短縮されることもあります。

5. ネイティブイメージのビルドに挑戦

5. ネイティブイメージのビルドに挑戦
5. ネイティブイメージのビルドに挑戦

Quarkusの最大の特徴は、GraalVMを利用したネイティブイメージの作成です。通常のJARファイルよりも起動が速く、メモリ使用量も極めて少ない実行バイナリを作成できます。GitLab CIでこれを実現するには、GraalVMがインストールされたコンテナイメージを使用します。

ただし、ネイティブビルドは非常に多くのCPUとメモリを消費するため、GitLabの共有ランナー(Shared Runner)を使用している場合はタイムアウトに注意が必要です。まずは通常のJVMモードでパイプラインを安定させ、慣れてきたら以下のコードを参考にネイティブビルドを組み込んでみましょう。


// ネイティブイメージで動作確認するための簡単なテストコード
package org.acme;

import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;

@QuarkusTest
public class GreetingResourceTest {

    @Test
    public void testHelloEndpoint() {
        given()
          .when().get("/hello")
          .then()
             .statusCode(200)
             .body(is("Hello from Quarkus with GitLab CI!"));
    }
}

ネイティブビルド用のプロファイル -Pnative を指定して実行することで、Linux上で直接動作するバイナリファイルが生成されます。これにより、Javaをインストールしていない軽量なコンテナ環境でもアプリケーションを動かすことが可能になります。

6. 開発を加速させるCI/CDのヒント

6. 開発を加速させるCI/CDのヒント
6. 開発を加速させるCI/CDのヒント

最後に、より実戦的な活用方法についていくつか紹介します。GitLab CIでは onlyrules という設定を使うことで、「mainブランチにマージされた時だけデプロイする」といった制御が可能です。また、環境変数(Variables)機能を使えば、データベースの接続情報やAPIキーなどの機密情報を安全に管理できます。

Quarkusは開発モード(Dev Mode)が強力ですが、CI/CD環境は本番環境に近い状態でテストを行う場所です。継続的にテストを回すことで、Javaのバージョンアップやライブラリの更新に伴う予期せぬ不具合を未然に防ぐことができます。まずは小さな一歩として、自分のプロジェクトに .gitlab-ci.yml を追加し、自動でビルドが通る喜びを体験してみてください。それが、プロフェッショナルなJavaエンジニアへの第一歩となります。

最新のクラウド技術やマイクロサービス開発において、GitLab CIとQuarkusの組み合わせは最強の武器になります。自動テストが通った際の緑色のチェックマークを見るたびに、あなたのコードの品質が保証されていくはずです。ぜひ今回のガイドを参考に、自分だけのパイプラインを構築してみてください。

カテゴリの一覧へ
新着記事
New1
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
New2
Micronaut
Micronautで非同期HTTP処理を行う方法!リアクティブ対応の基礎知識
New3
Micronaut
Micronautの@Prototypeとは?新しいインスタンスを生成するスコープの基本
New4
Quarkus
QuarkusのCDIスコープを完全理解!@ApplicationScopedと@RequestScopedを初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.4
Java&Spring記事人気No4
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.5
Java&Spring記事人気No5
Java
Java Optional ifPresentの使い方を徹底解説!nullチェックをスマートに省略する方法
No.6
Java&Spring記事人気No6
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.7
Java&Spring記事人気No7
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.8
Java&Spring記事人気No8
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?