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

Quarkus + Reactive Routesで軽量REST APIを作る方法を初心者向けに解説

Quarkus + Reactive Routesで軽量APIを作る方法
Quarkus + Reactive Routesで軽量APIを作る方法

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

生徒

「QuarkusでREST APIを作れると聞いたんですが、Spring Bootと何が違うんですか?」

先生

「Quarkusは起動がとても速く、メモリ使用量が少ないのが特徴です。特にReactive Routesを使うと、軽量で高速なAPIを簡単に作れます。」

生徒

「Reactive Routesって難しそうですが、初心者でも大丈夫ですか?」

先生

「基本はとてもシンプルです。まずは仕組みと最小構成のコードから見ていきましょう。」

1. QuarkusのREST APIとは何か

1. QuarkusのREST APIとは何か
1. QuarkusのREST APIとは何か

QuarkusのREST APIは、JavaでWeb APIを作るための仕組みです。 REST APIは、ブラウザやスマートフォンアプリ、別のサーバーとデータをやり取りするための入口として使われます。 Quarkusでは、RESTEasyやReactive Routesといった仕組みを使って、シンプルかつ高速なAPIを構築できます。 特にQuarkusはクラウドネイティブを前提に設計されており、コンテナ環境やマイクロサービスとの相性がとても良いのが特徴です。

2. Reactive Routesの特徴とメリット

2. Reactive Routesの特徴とメリット
2. Reactive Routesの特徴とメリット

Reactive Routesは、Quarkus独自の軽量なルーティング機能です。 従来のアノテーション中心のREST APIとは違い、関数のような書き方でURLと処理を結び付けます。 これによりコード量が減り、処理の流れも直感的に理解しやすくなります。 また、非同期処理を前提としているため、アクセスが増えても効率よく処理できる点が大きなメリットです。

3. 最小構成でReactive Routesを定義する

3. 最小構成でReactive Routesを定義する
3. 最小構成でReactive Routesを定義する

まずは、最もシンプルなReactive Routesの例を見てみましょう。 URLにアクセスしたら文字列を返すだけのAPIです。 初心者の方は「URLと処理をつなげている」と考えると理解しやすくなります。


import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class SimpleRoutes {

    @Route(path = "/hello", methods = Route.HttpMethod.GET)
    void hello(RoutingExchange exchange) {
        exchange.ok("Hello Quarkus Reactive API");
    }
}

4. パラメータを受け取るAPIの作り方

4. パラメータを受け取るAPIの作り方
4. パラメータを受け取るAPIの作り方

REST APIでは、URLに含まれる値を受け取って処理することがよくあります。 Reactive Routesでは、クエリパラメータも簡単に扱えます。 ここでは、名前を受け取ってメッセージを返すAPIを作ってみます。 Webアプリと連携する基本形として覚えておくと便利です。


import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class ParamRoutes {

    @Route(path = "/greet", methods = Route.HttpMethod.GET)
    void greet(RoutingExchange exchange) {
        String name = exchange.getParam("name").orElse("Guest");
        exchange.ok("Hello " + name);
    }
}

5. JSONを返すReactive Routes

5. JSONを返すReactive Routes
5. JSONを返すReactive Routes

実際のREST APIでは、文字列ではなくJSON形式でデータを返すことが多くなります。 Quarkusでは、JavaのオブジェクトをそのままJSONとして返せます。 これにより、データ構造を意識しながらAPIを設計できるようになります。


import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.Map;

@ApplicationScoped
public class JsonRoutes {

    @Route(path = "/user", methods = Route.HttpMethod.GET)
    void user(RoutingExchange exchange) {
        Map<String, Object> data = Map.of(
            "id", 1,
            "name", "Taro",
            "role", "beginner"
        );
        exchange.ok(data);
    }
}

6. Reactive Routesと非同期処理の考え方

6. Reactive Routesと非同期処理の考え方
6. Reactive Routesと非同期処理の考え方

Reactive Routesは、最初から非同期処理を意識して作られています。 そのため、時間のかかる処理があっても全体のパフォーマンスが落ちにくくなります。 初心者の段階では「同時にたくさんのアクセスを効率よく処理できる仕組み」と理解しておけば十分です。 Quarkusが内部でうまく調整してくれるため、複雑な設定をしなくても高速なAPIを作れます。

7. 開発中に便利なホットリロード機能

7. 開発中に便利なホットリロード機能
7. 開発中に便利なホットリロード機能

Quarkusには、コードを変更すると自動で反映されるホットリロード機能があります。 Reactive Routesでも同様に、保存するだけでAPIの挙動が変わるため、学習効率が非常に高いです。 初心者の方でも試行錯誤しながら理解を深めやすく、REST APIの動きを直感的に確認できます。


@Route(path = "/status", methods = Route.HttpMethod.GET)
void status(RoutingExchange exchange) {
    exchange.ok("API is running");
}

8. Quarkusで軽量APIを作るときのポイント

8. Quarkusで軽量APIを作るときのポイント
8. Quarkusで軽量APIを作るときのポイント

QuarkusとReactive Routesを使うことで、シンプルなコードで高速なREST APIを作れます。 起動が速く、メモリ消費が少ないため、学習用だけでなく実務でも使われる技術です。 まずは小さなAPIから作り、URLと処理の関係を理解することが大切です。 それができるようになると、Quarkusによる本格的なAPI開発へ自然に進めるようになります。

まとめ

まとめ
まとめ

ここまで、QuarkusとReactive Routesを組み合わせた軽量なREST APIの構築方法について詳しく解説してきました。 Javaの世界では、長らくSpring Bootが主流でしたが、クラウドネイティブやコンテナ化が当たり前となった現代において、Quarkusのような「超軽量・高速起動」なフレームワークの重要性はますます高まっています。 特に今回紹介したReactive Routesは、従来のJAX-RS(RESTEasy)によるアノテーションベースの開発とは一線を画し、よりシンプルで宣言的なルーティングを可能にします。

Quarkus Reactive Routesの重要なポイント

QuarkusでWeb APIを開発する際に、Reactive Routesを選ぶメリットは単なる「書きやすさ」だけではありません。 内部でVert.xという非常に強力な非同期エンジンが動いているため、リソースを極限まで節約しながら大量のリクエストを裁くことができます。 プログラミング初心者の方にとって、最初は「非同期」という言葉が難しく感じるかもしれませんが、Quarkusがその複雑な部分を吸収してくれるため、開発者はビジネスロジックに集中できるのが大きな利点です。

応用的なルート定義のサンプル

まとめとして、複数のパスやメソッドを扱う少し実践的なコードを確認してみましょう。 例えば、商品情報を扱うAPIを想定した場合、以下のようにIDを指定してデータを取得したり、ステータスコードを制御したりすることができます。 Reactive Routesを使うことで、非常に見通しの良いコードが書けることがわかります。


import io.quarkus.vertx.web.Route;
import io.quarkus.vertx.web.RoutingExchange;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.HashMap;
import java.util.Map;

@ApplicationScoped
public class ProductRoutes {

    // 商品詳細を取得するエンドポイント
    @Route(path = "/product/:id", methods = Route.HttpMethod.GET)
    void getProduct(RoutingExchange exchange) {
        String productId = exchange.getParam("id").orElse("unknown");
        
        // 実際はデータベースから取得しますが、ここではサンプルデータを返します
        Map<String, String> product = new HashMap<>();
        product.put("id", productId);
        product.put("name", "高性能サーバー");
        product.put("status", "在庫あり");

        if ("unknown".equals(productId)) {
            exchange.notFound().end("商品が見つかりませんでした");
        } else {
            exchange.ok(product);
        }
    }

    // APIのヘルスチェック用
    @Route(path = "/health", methods = Route.HttpMethod.GET)
    void checkHealth(RoutingExchange exchange) {
        exchange.response().setStatusCode(200).end("OK");
    }
}

今後の学習ステップ

REST APIの基本が理解できたら、次はデータベースとの連携に挑戦してみましょう。 Quarkusには「Hibernate Reactive」や「Panache」といった、データベース操作を劇的に楽にするライブラリが用意されています。 今回学んだReactive Routesと組み合わせることで、データの保存、更新、削除といったフル機能のWebアプリケーションを構築できるようになります。

また、Quarkusの最大の特徴である「ネイティブコンパイル」もぜひ試してほしい機能です。 Javaコードをバイナリ実行ファイルに変換することで、起動時間を数ミリ秒単位まで短縮し、メモリ消費量を劇的に抑えることが可能になります。 これは、AWS Lambdaなどのサーバーレス環境でJavaを利用する際に非常に強力な武器となります。

まずは、手元の開発環境でコードを書き換え、ホットリロードの快適さを体感しながら、少しずつエンドポイントを増やしてみてください。 自分で作ったURLにブラウザやツールからアクセスして、意図した通りのデータが返ってくる瞬間の喜びこそが、プログラミング上達の一番の近道です。 モダンなJava開発の扉は、このQuarkusから開かれています。

先生と生徒の振り返り会話

生徒

「先生、今回の内容でReactive Routesの使い方がかなりイメージできました!アノテーション一つでURLとメソッドを紐付けられるのが直感的ですね。」

先生

「そうですね。特に『RoutingExchange』を使うことで、レスポンスのステータスコードやパラメータの取得がJavaの標準的な感覚で書けるのが魅力です。実際に動かしてみて、何か気づいたことはありますか?」

生徒

「はい!ホットリロードが本当に速くて驚きました。Spring Bootを使っていた時よりも、コードを書き換えてから確認するまでの待ち時間がほとんどないので、初心者でもストレスなく実験を繰り返せますね。」

先生

「素晴らしい着眼点です。その『開発者体験』の良さがQuarkusが選ばれる大きな理由の一つなんですよ。JSONを返すのも、Mapやエンティティを渡すだけで自動で変換してくれるから楽でしょう?」

生徒

「本当にそう思います。Mapを使ってJSONを返すコードを書いてみましたが、複雑なライブラリの設定なしで動いたので感動しました。次はこれを使って、簡単なTODOリストのAPIとかを作ってみたいです。」

先生

「いいですね!TODOリストなら、GETで一覧取得、POSTで新規作成という風に、HTTPメソッドを使い分ける練習にもなります。Quarkusなら軽量なので、複数のサービスを同時に立ち上げてもパソコンが重くなりにくいですよ。どんどん挑戦していきましょう。」

生徒

「ありがとうございます!モダンなJava開発が楽しくなってきました。これからも軽量で高速なシステム作りをマスターしていけるよう頑張ります!」

カテゴリの一覧へ
新着記事
New1
Quarkus
Quarkus拡張開発をマスター!ビルドプロセスの仕組みと内部構造を徹底解説
New2
Micronaut
Micronautの@Factoryとは?複雑なBean生成を管理するための方法を解説
New3
Quarkus
QuarkusのDIとCDIを完全理解!@Producesでプロデューサーメソッドを使う方法を初心者向けに解説
New4
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
人気記事
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
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.4
Java&Spring記事人気No4
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.5
Java&Spring記事人気No5
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.6
Java&Spring記事人気No6
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.7
Java&Spring記事人気No7
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?
No.8
Java&Spring記事人気No8
Quarkus
Quarkus拡張開発を徹底解説!仕組みから自作エクステンションの作り方まで