はじめに
クラウド ネイティブの世界では、ブート速度 と メモリ消費量 によってマイクロサービス システムの実行コストが決まります。 Quarkus (「Supersonic Subatomic Java」) は、Kubernetes と GraalVM に特化して Red Hat によってゼロから開発されたフレームワークで、1 秒未満で起動し、ネイティブ モードで最大 50MB の RAM のみを使用する機能を備えています。
このシリーズでは、最初の「Hello World」記事から、本番環境で実行されている 5 つのマイクロサービスで構成される電子商取引システムまでを説明します。
クォーカスとは何ですか?
Quarkus は、JVM (HotSpot) および GraalVM ネイティブ イメージ用に設計された Kubernetes ネイティブ Java フレームワークです。目標は、Java がサーバーレス、マイクロサービス、コンテナベースのワークロードの主要な言語になるよう支援することです。
優れた機能
| 特長 | 説明 |
|---|---|
| ビルド時の最適化 | 依存関係の分析、構成、注釈処理は実行時ではなくビルド時に行われます。 |
| 開発サービス | 開発/テスト時に Testcontainers を使用して PostgreSQL、Kafka、Keycloak を自動的に起動する |
| ライブコーディング | コードを変更→保存→ブラウザを更新、再起動する必要はありません |
| 命令型と事後型の統合 | 同じプロジェクト内でブロッキング (命令的) と非ブロッキング (リアクティブ) の両方をサポート |
| GraalVM ネイティブ | ネイティブ実行可能ファイルにコンパイル — 起動 <50ms, RAM ~50MB |
| 拡張機能エコシステム | あらゆるニーズに対応する 600 以上の拡張機能: Hibernate、Kafka、gRPC、Keycloak... |
ビルド時の最適化アーキテクチャ
実行時 (クラスパスのスキャン、リフレクション、プロキシ生成) ですべてを処理する Spring Boot とは異なり、Quarkus はほとんどの作業を ビルド時 に実行します。
┌─────────────────────────────────────────────────┐
│ TRADITIONAL FRAMEWORK │
│ │
│ Start JVM → Load Classes → Scan Classpath → │
│ Process Annotations → Build Dependency Graph → │
│ Create Proxies → Ready (~5-30 giây) │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ QUARKUS (Build-Time) │
│ │
│ BUILD: Scan → Analyze → Generate Bytecode → │
│ Create Static Init Code │
│ │
│ RUN: Load Pre-computed Metadata → Ready │
│ (~0.5-1 giây JVM, <0.05 giây Native) │
└─────────────────────────────────────────────────┘
マイクロサービスにとってビルド時間が重要なのはなぜですか?
- 高速スケールアウト — Kubernetes は新しいポッドを数秒でスピンアップする必要があります
- サーバーレス/FaaS — コールド スタートがユーザー エクスペリエンスを決定します
- Resource efficiency — 100 micro-instances x 50MB << 100 x 500MB
- コストの最適化 — CPU/RAM の使用量に基づいて計算されるクラウドの請求額
Quarkus と Spring Boot — 現実的な比較
| 基準 | クォーカス 3.x | スプリングブート 3.x |
|---|---|---|
| Startup (JVM) | ~0.5-1s | ~3-8s |
| Startup (Native) | ~0.02-0.05s | ~0.1-0.3s (Spring AOT) |
| RSS Memory (JVM) | ~80-120MB | ~200-400MB |
| RSS Memory (Native) | ~30-60MB | ~80-150MB |
| Dev Experience | Dev Services, Live Coding, Dev UI | Spring DevTools, Initializr |
| Ecosystem | 600+ extensions | 300+ starters |
| コミュニティ | 強くなる | 非常に大きく、成熟した |
| 学習曲線 | 平均 (CDI、マイクロプロファイル) | 低 (おなじみ) |
| ネイティブ サポート | 一流、問題数は少ない | かなり改善されましたが、まだ限界があります |
| Reactive | Mutiny (native) + Vert.x | WebFlux (Project Reactor) |
Quarkus を選択するのはどのような場合ですか?
- Kubernetes 用の 新しいマイクロサービス (グリーンフィールド) を構築する
- サーバーレス/FaaS には 素早い起動が必要
- クラウド コストを最適化したい (RAM の削減、CPU の削減)
- チームは Jakarta EE / MicroProfile に精通しています
- GraalVM を使用した ネイティブ実行可能ファイル が必要です
Spring Boot を選択するのはどのような場合ですか?
- 既存のモノリスをマイクロサービスに移行する
- チームは深い春の経験を持っています
- 大規模なエコシステムと大規模なコミュニティのサポートが必要です
- アプリケーションの起動時間は重要ではありません
CDI と MicroProfile — 標準プラットフォーム
Quarkus は、独自の API ではなく、2 つのオープン スタンダードに基づいています。
CDI (Contexts and Dependency Injection)
CDI は、依存関係注入のための Jakarta EE 標準です。 Quarkus は ArC — CDI エンジンを使用してビルド時に処理します。
// Injection cơ bản
@ApplicationScoped // Singleton trong app
public class ProductService {
@Inject
ProductRepository productRepo;
@Inject
@ConfigProperty(name = "app.max-products",
defaultValue = "1000")
int maxProducts;
public List<Product> listActive() {
return productRepo.findActive();
}
}
// 一般的な CDI スコープ
@ApplicationScoped // 1 インスタンス / アプリ
@RequestScoped // 1 インスタンス / HTTP リクエスト
@SessionScoped // 1 インスタンス / セッション
@Dependent // 各インジェクションを新規作成
@Singleton // @ApplicationScoped と似ていますが、プロキシはありません
ArC と Spring DI: ArC はビルド時に依存関係グラフ全体を分析し、未使用の Bean を削除し、メモリと起動を削減します。
MicroProfile
Quarkus によって完全に実装されたマイクロサービスの仕様セット:
| スペック | Quarkus 拡張機能 | 機能 |
|---|---|---|
| Config | Built-in | Type-safe configuration, multiple sources |
| REST Client | quarkus-rest-client | Type-safe HTTP client |
| Fault Tolerance | quarkus-smallrye-fault-tolerance | @Retry, @CircuitBreaker, @Fallback |
| Health | quarkus-smallrye-health | Liveness, Readiness, Startup probes |
| Metrics | quarkus-micrometer | Application & JVM metrics |
| OpenAPI | quarkus-smallrye-openapi | Swagger documentation |
| JWT Auth | quarkus-smallrye-jwt | JWT token parsing & validation |
| OpenTelemetry | quarkus-opentelemetry | Distributed tracing |
利点: MicroProfile 仕様に従って記述されたコードは、Quarkus、Open Liberty、Payara、WildFly 間で 移植可能 です。
Quarkus 3.34 — 最新機能 (2026)
| 特長 | 説明 |
|---|---|
| Virtual Threads (Loom) | @RunOnVirtualThread — 命令型コードによるノンブロッキングのパフォーマンス |
| 開発サービス 2.0 | 組み込みコンテナだけでなく、あらゆるコンテナを自動的にプロビジョニングします。 |
| Unified CLI | quarkus dev, quarkus build, quarkus deploy |
| 改善されたネイティブ | ビルド時間が最大 40% 短縮され、より多くのライブラリがサポートされる |
| WebSocket Next | 新しい、アノテーション主導の WebSocket サーバー/クライアント API |
| Langchain4j | AI/LLM integration native |
| Hibernate ORM 7 | Jakarta Persistence 3.2, improved performance |
| Security improvements | OIDC multi-tenancy, fine-grained RBAC |
// 仮想スレッド — Quarkus 3.x の新機能
@Path("/api/v1/products")
パブリック クラス ProductResource {
@GET
@RunOnVirtualThread // 仮想スレッドで実行
パブリックリスト<Product> listProducts() {
// コードはブロックしますが、OS スレッドはブロックしません
Product.listAll() を返します。
}
}
Quarkus Extensions Ecosystem
拡張機能は、Quarkus がライブラリを統合する方法です。各拡張機能はビルド時の処理用に最適化されています。
# 拡張機能を検索
quarkus 拡張機能のリスト
quarkus 拡張機能リスト --search=postgres
# プロジェクトに拡張機能を追加する
quarkus 拡張機能で quarkus-rest-jackson を追加
quarkus 拡張機能で quarkus-hibernate-orm-panache を追加
quarkus 拡張機能 quarkus-jdbc-postgresql を追加
quarkus 拡張機能で quarkus-oidc を追加
quarkus 拡張機能 quarkus-smallrye-reactive-messaging-kafka を追加
このシリーズの主な拡張機能
| 拡張子 | 機能 |
|---|---|
quarkus-rest-jackson | JSON シリアル化を使用した REST API |
quarkus-hibernate-orm-panache | 簡素化された ORM (アクティブ レコード / リポジトリ) |
quarkus-jdbc-postgresql | JDBC driver cho PostgreSQL |
quarkus-flyway | Database schema migration |
quarkus-oidc | OpenID Connect / Keycloak integration |
quarkus-smallrye-reactive-messaging-kafka | Apache Kafka messaging |
quarkus-grpc | gRPC server/client |
quarkus-smallrye-fault-tolerance | Circuit Breaker, Retry, Fallback |
quarkus-opentelemetry | Distributed tracing |
quarkus-micrometer-registry-prometheus | Prometheus によるメトリクス |
quarkus-smallrye-health | Health checks |
quarkus-redis-client | Redis caching |
quarkus-kubernetes | Auto-generate K8s manifests |
quarkus-container-image-jib | Build container image |
デモ: こんにちは Quarkus — 最初のスタート
# Quarkus CLI をインストールします (Java 17 以降が必要)
# macOS
brew install quarkusio/tap/quarkus
# Linux (SDKMAN)
SDK インストール quarkus
# プロジェクトを作成する
quarkus アプリを作成します com.xdev:hello-quarkus \
--extension='レスト-ジャクソン' \
--java=21
cd hello-quarkus
# 開発モードを実行する
クォーカス開発者
結果:
________________
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ 、 _/ 、< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2026-04-03 10:00:00,123 INFO [io.quarkus] (Quarkus Main Thread)
hello-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.34.x)
started in 0.876s. Listening on: http://localhost:8080
Tests paused
Press [h] for more options>
0.876 秒 — 同等の Spring Boot の場合は 5 ~ 10 秒です。
Hello REST Endpoint
パッケージcom.xdev;
インポートjakarta.ws.rs.GET;
インポートjakarta.ws.rs.パス;
インポートjakarta.ws.rs.Produces;
インポートjakarta.ws.rs.core.MediaType;
@Path("/hello")
パブリック クラス GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
「Quarkus からこんにちは!」を返します。
}
}
カールする http://localhost:8080/hello
#クォーカスからこんにちは!
電子商取引システム アーキテクチャ (プレビュー)
このシリーズでは、次のものを構築します。
┌─────────┐ ┌─────────┐ ┌─────────┐
│ ブラウザ / │────▶│ API ゲートウェイ │────▶│ Keycloak │
│ モバイルアプリ │ │ (Nginx) │ │ (認証) │
━━━━━━━━━━━━━━━━━━━━━━━┘ ━━━━━━┬───────┘
│
┌───────┼───────┐
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│ 商品 │ │ ご注文 │ │ お支払い │
│ サービス │ │ サービス │ │ サービス │
│ │ │ │ │ │
│ クォーカス │ │ クォーカス │ │ クォーカス │
│ REST+gRPC│ │ REST │ │ REST │
━━━┬─────┘ └────┬──────┘ └────┬──────┘
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│PostgreSQL│ │PostgreSQL│ │PostgreSQL│
│(商品)│ │(注文) │ │(支払い)│
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┘
│
┌────┴────┐
│ カフカ │
│(イベント)│
━━━┬────┘
│
▼
┌─────────┐
│ お知らせ │
│ サービス │
│ (クォーカス) │
━─────────┘
5 Services:
- 製品サービス — 製品、カテゴリ、在庫の管理
- 注文サービス — 注文処理、ステートマシン
- 決済サービス — 支払い、取引ログ
- Notification Service — Email/SMS notifications
- User Service (Keycloak) — Identity & Access Management
## エクササイズ
- JDK 21+とQuarkus CLIをローカルマシンにインストールします。
- 拡張子を使用して Quarkus プロジェクトを作成します
rest-jackson - エンドポイントの書き込み
GET /api/infoJSONを返します{"framework": "Quarkus", "version": "3.34"} - Quarkus と同等の Spring Boot プロジェクトの起動時間を比較する
- 注入してみる
@ConfigPropertyの値を変更しますapplication.properties— ライブリロードを観察する - 利用可能なすべての拡張機能をリストします。
quarkus extension list --search=rest— 知りたい拡張機能を 3 つ選択してください
覚えておくべき重要な概念
┌─────────────────────────────┐
│ クォーカスのメンタルモデル │
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ ビルド時間 │───▶│ 実行時間 │ │
│ │ │ │ │ │
│ │ • クラスパス │ │ • ロード前 │ │
│ │ スキャン │ │ 計算 │ │
│ │ • アノテーション │ │ メタデータ │ │
│ │ 処理 │ │ • 実行 │ │
│ │ • バイトコード │ │ 静的 │ │
│ │ 世代 │ │ 初期化 │ │
│ │ • デッドコード │ │ • HTTP の開始 │ │
│ │ 削除 │ │ サーバー │ │
│ │ │ │ │ │
│ │ (ゆっくり、一度) │ │ (速い!) │ │
│ ━━━━━━━┘ ━━━━━━━┘ │
│ │
│ ジャカルタ EE 標準 MicroProfile 標準 │
│ ┌─────────┐ ┌───────────┐ │
│ │ • CDI (ArC) │ │ • 設定 │ │
│ │ • ジャカルタ REST │ │ • REST クライアント │ │
│ │ • 永続性 │ │ • フォールトトレランス │ │
│ │ • Bean 検証│ │ • ヘルス / メトリクス │ │
│ │ • セキュリティ │ │ • OpenAPI / JWT │ │
│ ━━━━━━━━┘ ━━━━━━━━━┘ │
━━━━━━━━━━━━━━━━━━━━━━━━┘
概要
- Quarkus は クラウド ネイティブと Kubernetes 向けに特別に設計された Java フレームワークです
- ビルド時の最適化により、起動が 1 秒未満、RAM が少ない場合に役立ちます
- Dev Services は、開発中にインフラストラクチャを自動的にプロビジョニングします
- Spring Boot との比較: Quarkus は 高速、軽量ですが、Spring Boot の方がより大規模な エコシステム を持っています
- このシリーズでは、5 つのマイクロサービスを備えた実用的な E コマース プラットフォーム システムを構築します
次の記事: Quarkus プロジェクトの作成 — CLI、開発モード、開発 UI、ライブ コーディング。