GitLab CIでQuarkusプロジェクトを構築!初心者向けCI/CDパイプライン入門ガイド
生徒
「最近よく聞くQuarkusを使って、GitLabで自動ビルドをやってみたいのですが、難しそうで…。」
先生
「大丈夫ですよ!GitLab CIを使えば、コードをプッシュするだけで自動的にQuarkusのビルドやテストを実行するパイプラインを簡単に作ることができます。」
生徒
「Javaのビルド環境とか、設定ファイルはどう書けばいいんですか?」
先生
「基本となる設定ファイル .gitlab-ci.yml の書き方から、効率的なビルド方法まで順番に解説していきますね。」
1. QuarkusとGitLab CIを組み合わせるメリット
モダンなJava開発において、超高速な起動と低メモリ消費を誇るQuarkusは、クラウドネイティブなアプリケーション開発の主役となっています。このQuarkusの力を最大限に引き出すのが、GitLab CI/CDによる開発プロセスの自動化です。
GitLab CIを導入することで、エンジニアが手動でコンパイルやテストを行う手間が省けます。コードをリポジトリに保存するたびに、サーバー側で自動的にMavenやGradleが実行され、バグを早期に発見できるようになります。特にQuarkusはコンテナ化との相性が抜群なため、ビルドからDockerイメージの作成までを一貫して自動化できる点は大きな強みです。初心者の方でも、まずは基本的なビルド工程を自動化することから始めれば、開発効率が劇的に向上することを実感できるはずです。
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の基本設定
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ラッパーとキャッシュの活用
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. ネイティブイメージのビルドに挑戦
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のヒント
最後に、より実戦的な活用方法についていくつか紹介します。GitLab CIでは only や rules という設定を使うことで、「mainブランチにマージされた時だけデプロイする」といった制御が可能です。また、環境変数(Variables)機能を使えば、データベースの接続情報やAPIキーなどの機密情報を安全に管理できます。
Quarkusは開発モード(Dev Mode)が強力ですが、CI/CD環境は本番環境に近い状態でテストを行う場所です。継続的にテストを回すことで、Javaのバージョンアップやライブラリの更新に伴う予期せぬ不具合を未然に防ぐことができます。まずは小さな一歩として、自分のプロジェクトに .gitlab-ci.yml を追加し、自動でビルドが通る喜びを体験してみてください。それが、プロフェッショナルなJavaエンジニアへの第一歩となります。
最新のクラウド技術やマイクロサービス開発において、GitLab CIとQuarkusの組み合わせは最強の武器になります。自動テストが通った際の緑色のチェックマークを見るたびに、あなたのコードの品質が保証されていくはずです。ぜひ今回のガイドを参考に、自分だけのパイプラインを構築してみてください。