起動に数秒かかるのがJavaの常識だった。Quarkusは、その常識を数十ミリ秒まで縮めてくる。
Red Hatが開発を主導する、クラウドネイティブ・コンテナファーストのJavaフレームワークだ。
従来のJavaアプリを悩ませてきた「起動の遅さ」と「メモリ消費の大きさ」を、ビルド時処理とGraalVMネイティブイメージという二つの技術で片づけている。
Spring Bootとの違いはどこにあるのか、環境構築は何から始めればいいのか、REST APIやDB接続の実装はどう書くのか。
ここから一つずつ確認していく。
Quarkusとは?特徴・仕組み・注目される理由

Quarkusは、Red Hat社が開発を主導する、クラウドネイティブかつコンテナファーストなJavaアプリケーションを構築するためのフレームワークです。
Kubernetesのような環境でJavaを最適に動かすことを目的に設計されました。
その最大の特徴は、驚異的な起動速度と低いメモリ消費にあります。
サーバーレスやマイクロサービスといった現代的なアーキテクチャで、Javaが持つ堅牢性を最大限に活かせます。
Quarkusの読み方は?名前の由来は?
Quarkusは「クォーカス」と読みます。名前の由来は素粒子物理学の「クォーク(quark)」で、小さく高速な粒子のイメージをフレームワークのコンセプトに重ねています。
公式サイトでは「Supersonic Subatomic Java(超音速・亜原子のJava)」というキャッチコピーを掲げています。
従来のJavaの重量級イメージを覆す、軽量・高速なフレームワークであることを表現した名前です。
Quarkusの特徴|ビルド時処理で高速化
Quarkusのパフォーマンスを支えているのは、「コンパイル時にできることはすべてやってしまおう」という思想です。
従来のJavaフレームワークは、アプリケーション起動時にクラスパスのスキャンや設定の読み込み、DI(依存性の注入)コンテナの構築などを行っていました。
これには時間がかかり、メモリも多く消費します。
- クラスパスのスキャン
- 設定ファイルの読み込み
- DI(依存性の注入)コンテナの構築
一方でQuarkusは、ビルドの段階でクラスパスのスキャンや設定読み込みといった処理の多くを済ませてしまいます。
GraalVMという技術を使って、JavaコードをOSが直接実行できるネイティブイメージに変換することも可能です。
このネイティブイメージ化により、JVM(Java仮想マシン)の起動が不要になり、数十ミリ秒という驚異的な速さでアプリケーションが起動します。
Quarkusのこの仕組みが、パフォーマンスの高さを実現しているのです。
Spring Bootに慣れた開発者にとって、この「ビルド時処理」の発想は新鮮です。
Spring Bootではアプリケーション起動時にクラスパスのスキャンやBean定義の解決が走りますが、Quarkusではこれらがビルド段階で完了しています。
起動時に「待ち」が発生しない設計は、ローカル開発でのストレスも大幅に軽減します。
GraalVMネイティブイメージの仕組みと制約
GraalVMとは、Oracleが開発する高性能なJDKディストリビューションです。
その中核機能であるAOT(Ahead-of-Time)コンパイラを使うと、Javaコードを事前にOSネイティブの実行可能バイナリへ変換できます。
このネイティブイメージは、JVMを経由せずに直接起動するため、起動時間が数十ミリ秒、メモリ消費が数十MBという圧倒的な軽量性を実現します。
Quarkusはこの仕組みをフレームワークレベルでサポートしており、ビルドコマンド1つでネイティブイメージを生成できます。
ただし、ネイティブイメージには制約もあります。リフレクションや動的プロキシの利用が制限されるため、対象クラスを設定ファイルで明示する必要があります。
また、ネイティブビルド自体に数分〜十数分かかるため、開発中はJVMモードを使い、本番デプロイ時のみネイティブビルドを行うのが一般的です。
JVMモードとネイティブモードはどう使い分ける?
QuarkusにはJVMモードとネイティブモードの2つの動作モードがあります。
JVMモードは、通常のJava実行環境で動かす方式です。
ライブコーディング(コード変更の即時反映)やデバッガ接続が可能なため、開発中はこちらを使います。
起動速度はSpring Bootより高速ですが、ネイティブモードほどではありません。
ネイティブモードは、GraalVMでネイティブイメージを生成して実行する方式です。
起動が数十ミリ秒、メモリが数十MBと圧倒的に軽量で、本番環境やCI/CDパイプラインでのコンテナデプロイに適しています。
実務では「開発中はJVMモード、本番デプロイはネイティブモード」と使い分けるのが主流です。
Spring Bootとの違いを徹底比較
Java開発で最もポピュラーなSpring BootとQuarkusは、しばしば比較対象になります。
どちらも優れたフレームワークですが、思想と得意な領域が異なります。
| 項目 | Quarkus | Spring Boot |
| 起動速度 | 非常に高速(ネイティブで数十ミリ秒) | やや遅い(数秒〜数十秒) |
| メモリ使用量 | 非常に少ない(ネイティブで数十MB) | やや多い(数百MB〜) |
| 得意な領域 | マイクロサービス、サーバーレス | モノリス、マイクロサービス |
| エコシステム | 急速に成熟(拡張機能1,200以上) | 非常に成熟、膨大 |
| 開発体験 | ライブコーディング機能が強力 | DevToolsによるホットリロード |
表だけを見るとQuarkusが有利に見えますが、実際の技術選定では「エコシステムの厚み」が決定打になることも多いです。
Spring Bootなら「困ったらStack Overflowで検索すればほぼ解決策が見つかる」という安心感があります。
一方Quarkusではまだ日本語情報が限られるため、公式ドキュメント(英語)を読む力が求められます。
Spring Bootは長年の実績があり、非常に広範なエコシステム(ライブラリや情報)を持っています。
どのようなアプリケーションにも対応できる万能性が魅力です。
対してQuarkusは、クラウドネイティブ環境に特化することで、リソース効率を極限まで高めました。特にコンテナとの相性は抜群です。
クラウド時代に選ばれる背景
なぜ今、Quarkusのようなフレームワークが求められるのでしょうか。その背景には、アプリケーションの実行環境の変化があります。
現代の開発では、Dockerでアプリケーションをコンテナ化し、Kubernetesで管理するスタイルが主流です。
このような環境では、多数のコンテナを効率よく、そして迅速に起動・停止させる必要があります。
例えば、アクセスが急増した際にサーバーの数を自動で増やす「オートスケール」を考えます。
起動が遅いアプリケーションでは、スケールが間に合わずサービス停止につながるリスクがあります。
Quarkusの高速起動・低メモリ消費という特徴は、コンテナを素早く立ち上げ、1台のサーバー上でより多くのコンテナを稼働させることを可能にします。
これは、クラウドの利用料金、つまりコストの削減に直結する非常に大きな利点なのです。
Quarkusのメリットとデメリット

Quarkusは素晴らしい技術ですが、万能ではありません。採用を検討する際には、メリットとデメリットの両方を正しく理解しておく必要があります。
Quarkusを使うメリット(高速起動・軽量化)
Quarkusがもたらす最大のメリットは、やはりそのパフォーマンスです。
Quarkusのデメリットや課題
一方で、Quarkusにはいくつかの課題も存在します。
実際に筆者もこの制約にはハマった経験がある。
Spring Bootの案件で、同一クラス内から@Transactionalメソッドを呼び出す設計にしていた。
本番環境でデータ不整合が発生して初めて、プロキシの制約に気づいた。原因の切り分けに時間を要した苦い記憶がある。
QuarkusのDIコンテナ「ArC」では、この制約が解消されている。
self-invocation(同一クラス内呼び出し)でもインターセプタが正しく適用される。
ただしprivateメソッドにはインターセプタが効かない点は共通の注意点だ。
Spring Boot経験者が持つDIやアノテーションの知識はそのまま活きるため、フレームワーク間の共通知識は学習コストの軽減につながる。
Quarkusはどんな環境に向いている?
高速起動・軽量化・低リソース消費といった特性から、Quarkusは特に以下の環境で真価を発揮します。
- 向いている環境
- マイクロサービスアーキテクチャ
- サーバーレスアプリケーション(AWS Lambdaなど)
- Kubernetes上でのコンテナ運用
- リソースに制約のあるIoTデバイス
- 向いていない環境
- 巨大なモノリシックアプリケーション(一括での移行は困難)
- Quarkusが対応していない特殊なライブラリに強く依存するシステム
- フレームワークの学習に時間をかけられない短期プロジェクト
Quarkusの始め方|開発環境の構築手順

Quarkusでの開発を始めるのは非常に簡単です。ここでは、Mavenを使った基本的なセットアップ方法を紹介します。
Quarkusのインストール手順
最も簡単な方法は、公式サイトのプロジェクトジェネレーターを利用するやり方です。
- code.quarkus.io にアクセスします。
- GroupやArtifactなどを入力します。
- 必要な拡張機能(
quarkus-rest-jacksonなど)を選択します。 - 「Generate your application」をクリックし、Zipファイルをダウンロードして展開します。
これだけで、すぐに開発を始められるプロジェクトの雛形が完成します。
Maven/Gradleでのセットアップ
ダウンロードしたプロジェクトは、標準的なMavenまたはGradleプロジェクトです。
pom.xml(Mavenの場合)には、Quarkusを動作させるためのプラグインやライブラリの依存関係がすでに記述されています。
主要な部分は以下のようになっています。
Mavenの例
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-bom</artifactId>
<version>3.33.3.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.quarkus.platform</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>3.33.3.Final</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>Gradleの例
plugins {
id 'java'
id 'io.quarkus'
}
repositories {
mavenCentral()
}
dependencies {
implementation enforcedPlatform("io.quarkus.platform:quarkus-bom:3.33.3.Final")
implementation "io.quarkus:quarkus-rest"
testImplementation "io.quarkus:quarkus-junit5"
testImplementation "io.rest-assured:rest-assured"
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}開発をスムーズにする拡張機能
Quarkusの機能は「拡張機能」として提供されます。プロジェクトジェネレーターで選択するか、後からコマンドで追加可能です。
quarkus-rest-jackson: REST APIを開発するための基本的な拡張機能(旧名: quarkus-resteasy-reactive-jackson)。quarkus-hibernate-orm-panache: データベースアクセスを劇的に簡素化します。quarkus-container-image-jib: Dockerfileなしでコンテナイメージをビルドできます。
これらの拡張機能が、Quarkusでの高い生産性を支えています。
Quarkusでの実装例

Hello World、REST API、DB接続の3ステップで、Quarkusの開発体験を実際に確かめられます。
それでは、実際に簡単なアプリケーションを作成してみましょう。
Hello Worldを作ってみる
プロジェクトジェネレーターで作成したコードには、すでに簡単なエンドポイントが含まれています。
src/main/java/org/acme/GreetingResource.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 RESTEasy Reactive";
}
}このプロジェクトのルートディレクトリで、以下のコマンドを実行して開発モードで起動します。
./mvnw quarkus:dev起動後、ブラウザやcurlで http://localhost:8080/hello にアクセスしてみましょう。
「Hello from RESTEasy Reactive」と表示されます。
開発モード(quarkus:dev)で起動すると、Dev UIが http://localhost:8080/q/dev-ui で利用できます。
設定値の確認やエンドポイント一覧をブラウザ上で確認でき、Spring Boot Actuatorに似た体験がデフォルトで手に入ります。
REST APIの実装手順
次に、簡単なJSONを返すAPIを実装してみましょう。GreetingResource.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("/greeting")
public class GreetingResource {
public static class Message {
public String value;
public Message(String value) {
this.value = value;
}
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Message greet() {
return new Message("こんにちは、Quarkus!");
}
}ファイルを保存すると、Quarkusが自動で変更を検知し、アプリケーションが更新されます。
http://localhost:8080/greeting にアクセスすると、以下のようなJSONが返却されます。
{"value":"こんにちは、Quarkus!"}DB接続とPanacheの活用
Quarkusの拡張機能であるPanacheを使うと、データベースアクセスが非常にシンプルになります。
まず、quarkus-jdbc-postgresqlとquarkus-hibernate-orm-panacheの拡張機能を追加します。
次に、application.propertiesにデータベース接続情報を記述します。
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=user
quarkus.datasource.password=password
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/mydatabase
quarkus.hibernate-orm.database.generation=drop-and-createエンティティクラスを作成します。PanacheEntityを継承するだけで、基本的なCRUD操作ができます。
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Entity;
@Entity
public class Fruit extends PanacheEntity {
public String name;
public String color;
}これだけで、データベース操作が簡単になります。
Fruit.findById(id)やFruit.listAll()、fruit.persist()といったメソッドがすぐに使えます。
Quarkusの強力な機能の一つです。
命令型コードとリアクティブ型コードの使い分け
Quarkusのもう一つの特徴が、命令型(同期・ブロッキング)スタイルとリアクティブ(非同期・ノンブロッキング)スタイルの組み合わせです。
両者のコードをシームレスに書ける設計になっています。
普段どおりの命令型スタイルでコードを書きつつ、高負荷なI/O処理が発生する箇所だけリアクティブスタイルを部分的に採用する、といった使い分けが可能です。
どちらのスタイルで書いても同じQuarkusランタイム上で動作するため、後からリアクティブ化する際の書き換えコストを抑えられます。
Quarkusとマイクロサービス開発

Quarkusは、その設計思想からマイクロサービスやクラウドネイティブ開発と非常に高い親和性を持っています。
Kubernetesとの相性
Kubernetesはコンテナのオーケストレーションツールであり、Quarkusとの相性は抜群です。
- 高速なスケールアウト: Quarkusコンテナは起動が速いため、負荷に応じてPod(コンテナの実行単位)を迅速に追加できます。
- 高いリソース効率: メモリ使用量が少ないため、一つのノード(サーバー)により多くのPodを集約でき、インフラコストを削減可能です。
- ヘルスチェック:
quarkus-smallrye-health拡張機能を追加すると、/q/healthのようなヘルスチェック用エンドポイントが自動で有効になり、KubernetesがPodの正常性を簡単に監視できます。
クラウドネイティブ開発での強み
クラウドネイティブとは、クラウドの利点を最大限に活用するように設計されたアプリケーション開発のアプローチです。
Quarkusはまさに、このアプローチを体現しています。
設定情報を環境変数から読み込む機能や、コンテナイメージを簡単に作成する仕組みが標準で備わっており、CI/CDパイプラインへの統合も容易です。
イミュータブル(不変)なインフラを構築する上で、Quarkusは強力な武器となります。
他のフレームワークとの比較
クラウドネイティブなJavaフレームワークはQuarkusだけではありません。
- Micronaut: Quarkusと同様に、コンパイル時DI(依存性の注入)によって高速起動を実現します。GraalVMネイティブイメージにも対応しています。
- Helidon: Oracleが開発するフレームワークで、シンプルなAPIとリアクティブ対応が特徴です。
これらのフレームワークも素晴らしい選択肢です。
ただし、Red Hatという強力なバックボーンと活発なコミュニティを持つQuarkusは、2026年時点で最も勢いのあるフレームワークの一つです。
Quarkus入門の学習ロードマップ

公式ドキュメント・書籍・リリース経緯を押さえれば、実務投入までの見通しが立てやすくなります。
Quarkusに興味を持ったら、次は実際に触れてみることが一番の近道です。
公式ドキュメント・チュートリアルの活用
Quarkusの公式サイトには、非常に充実したドキュメントとガイドが用意されています。
- Getting Started: 最初に読むべき導入ガイドです。
- Guides: 「REST APIの作り方」「データベースへの接続」など、目的別の詳細なガイドが多数あります。
まずは公式サイトのガイドに沿って、実際に手を動かしてみることを強くお勧めします。
学習に役立つ書籍や記事
国内外でQuarkusに関する書籍が複数出版されています。
また、多くの技術ブログで実践的な情報が発信されていますので、「java quarkus チュートリアル」などで検索すると、有益な情報が見つかるはずです。
Quarkusのリリース経緯とバージョン推移
Quarkusは2019年11月にバージョン1.0がRed Hat主導でリリースされました。
以降もRed Hatを中心としたOSSコミュニティで継続的にアップデートが重ねられています。
2026年9月時点の最新LTSはQuarkus 3.33系(2027年3月までサポート)です。
歴史の浅いフレームワークに見えますが、リリースから既に複数年が経過し、実務導入事例も着実に増えています。
実務で使う前に学んでおきたいこと
Quarkusを本格的に利用する前に、以下の3つの概念について理解を深めておくとスムーズです。
- DIコンテナ "ArC": QuarkusのDIコンテナの仕組み。
- 設定管理:
application.propertiesでのプロファイルごとの設定方法など。 - ネイティブイメージの制約: ネイティブイメージで動作させる場合、Javaのリフレクションなど一部機能に制約があります。その仕組みと対処法を学んでおくと、トラブルシューティングに役立ちます。
筆者の見解では、2026年時点のQuarkusは「Spring Bootの代替」ではありません。
「コンテナ・サーバーレス特化のJava最適解」というポジションが最も的確です。
既存のSpring Bootプロジェクトを急いで移行する必要はありませんが、新規のマイクロサービス構築では有力な選択肢として検討する価値があります。
Quarkusのよくある質問(FAQ)
QuarkusはSpring Bootの代わりになる?
用途によります。マイクロサービスやサーバーレス環境ではQuarkusが起動速度・メモリ効率で有利です。一方、エンタープライズ規模のモノリスや、Spring Cloudの豊富なエコシステムを活用したい場合はSpring Bootが適しています。両者は競合というより、得意領域が異なるフレームワークです。
Quarkusの学習コストはどのくらい?
Java経験者であれば、入門レベル(Hello World〜REST API)は約2週間で習得できます。実践レベル(DB接続・テスト・ネイティブビルド・CI/CD連携)まで含めると1〜2ヶ月が目安です。JPAやJAX-RSといった標準仕様を採用しているため、Java EE/Jakarta EEの経験があれば学習コストはさらに低くなります。
QuarkusはJava何から使える?
Quarkus 3.x系ではJava 17以上が必要です。2026年9月時点の最新LTSはQuarkus 3.33系(最新パッチ3.33.3)です。Java 21・Java 25にも対応しており、仮想スレッド(Virtual Threads)などの最新機能も活用できます。
QuarkusはJava 21の仮想スレッドに対応している?
対応しています。Quarkus 3.x系はJava 21の仮想スレッド(Virtual Threads)をサポートしています。設定を有効にするだけで、リアクティブ処理なしに高い並行性を実現できます。
Quarkusは商用利用できる?ライセンスは?
QuarkusはApache License 2.0のオープンソースソフトウェアであり、商用利用は無料です。Red Hatが提供する商用サポート(Red Hat build of Quarkus)は別途有償ですが、フレームワーク自体の利用に費用はかかりません。
まとめ|Quarkusは高速起動が武器のクラウドネイティブJavaフレームワーク
Quarkusは、ビルド時処理とGraalVMネイティブイメージによって、Javaの弱点だった起動の遅さとメモリ消費の大きさを解決するフレームワークです。
マイクロサービスやサーバーレスといったクラウドネイティブな環境ほど、その強みが活きます。
- 起動速度・メモリ効率を重視するならQuarkus、エコシステムの厚みを重視するならSpring Bootが向いています
- まずはJVMモードのライブコーディングで開発し、本番デプロイ時のみネイティブビルドを使うのが実務での基本パターンです
- 既存のSpring Bootプロジェクトを急いで移行する必要はなく、新規のマイクロサービス構築で選択肢に入れるのが現実的です
まずはcode.quarkus.ioでプロジェクトを生成し、この記事のHello World例から手を動かしてみてください。







