Chuyển đến nội dung chính

レッスン 1: クオークスとは何ですか? — マイクロサービス向けの超音速サブアトミック Java

Quarkus の概要、ビルド時最適化アーキテクチャ、マイクロサービスの Quarkus と Spring Boot の比較、Quarkus Extensions エコシステム、1 秒未満の起動デモ。

💻 プログラミング — レッスン 0 レッスン 1: クオークスとは何ですか? — スーパーソニック マイクロサービス用のサブアトミック Java

Quarkus マイクロサービス: 基本から運用まで

パート 1: Quarkus プラットフォームとプロジェクトのセットアップ

xdev.asia

はじめに

クラウド ネイティブの世界では、ブート速度 と メモリ消費量 によってマイクロサービス システムの実行コストが決まります。 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)   │
└─────────────────────────────────────────────────┘

マイクロサービスにとってビルド時間が重要なのはなぜですか?

  1. 高速スケールアウト — Kubernetes は新しいポッドを数秒でスピンアップする必要があります
  2. サーバーレス/FaaS — コールド スタートがユーザー エクスペリエンスを決定します
  3. Resource efficiency — 100 micro-instances x 50MB << 100 x 500MB
  4. コストの最適化 — 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 ExperienceDev Services, Live Coding, Dev UISpring DevTools, Initializr
Ecosystem600+ extensions300+ starters
コミュニティ強くなる非常に大きく、成熟した
学習曲線平均 (CDI、マイクロプロファイル)低 (おなじみ)
ネイティブ サポート一流、問題数は少ないかなり改善されましたが、まだ限界があります
ReactiveMutiny (native) + Vert.xWebFlux (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 拡張機能機能
ConfigBuilt-inType-safe configuration, multiple sources
REST Clientquarkus-rest-clientType-safe HTTP client
Fault Tolerancequarkus-smallrye-fault-tolerance@Retry, @CircuitBreaker, @Fallback
Healthquarkus-smallrye-healthLiveness, Readiness, Startup probes
Metricsquarkus-micrometerApplication & JVM metrics
OpenAPIquarkus-smallrye-openapiSwagger documentation
JWT Authquarkus-smallrye-jwtJWT token parsing & validation
OpenTelemetryquarkus-opentelemetryDistributed tracing

利点: MicroProfile 仕様に従って記述されたコードは、Quarkus、Open Liberty、Payara、WildFly 間で 移植可能 です。

Quarkus 3.34 — 最新機能 (2026)

特長説明
Virtual Threads (Loom)@RunOnVirtualThread — 命令型コードによるノンブロッキングのパフォーマンス
開発サービス 2.0組み込みコンテナだけでなく、あらゆるコンテナを自動的にプロビジョニングします。
Unified CLIquarkus dev, quarkus build, quarkus deploy
改善されたネイティブビルド時間が最大 40% 短縮され、より多くのライブラリがサポートされる
WebSocket Next新しい、アノテーション主導の WebSocket サーバー/クライアント API
Langchain4jAI/LLM integration native
Hibernate ORM 7Jakarta Persistence 3.2, improved performance
Security improvementsOIDC 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-jacksonJSON シリアル化を使用した REST API
quarkus-hibernate-orm-panache簡素化された ORM (アクティブ レコード / リポジトリ)
quarkus-jdbc-postgresqlJDBC driver cho PostgreSQL
quarkus-flywayDatabase schema migration
quarkus-oidcOpenID Connect / Keycloak integration
quarkus-smallrye-reactive-messaging-kafkaApache Kafka messaging
quarkus-grpcgRPC server/client
quarkus-smallrye-fault-toleranceCircuit Breaker, Retry, Fallback
quarkus-opentelemetryDistributed tracing
quarkus-micrometer-registry-prometheusPrometheus によるメトリクス
quarkus-smallrye-healthHealth checks
quarkus-redis-clientRedis caching
quarkus-kubernetesAuto-generate K8s manifests
quarkus-container-image-jibBuild 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:

  1. 製品サービス — 製品、カテゴリ、在庫の管理
  2. 注文サービス — 注文処理、ステートマシン
  3. 決済サービス — 支払い、取引ログ
  4. Notification Service — Email/SMS notifications
  5. User Service (Keycloak) — Identity & Access Management

## エクササイズ

  1. JDK 21+とQuarkus CLIをローカルマシンにインストールします。
  2. 拡張子を使用して Quarkus プロジェクトを作成します rest-jackson
  3. エンドポイントの書き込み GET /api/info JSONを返します {"framework": "Quarkus", "version": "3.34"}
  4. Quarkus と同等の Spring Boot プロジェクトの起動時間を比較する
  5. 注入してみる @ConfigProperty の値を変更します application.properties — ライブリロードを観察する
  6. 利用可能なすべての拡張機能をリストします。 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、ライブ コーディング。