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

Quarkus Reactiveプログラミング入門|UniとMultiの違いと使い方を初心者向けにやさしく解説

UniとMultiの違いと使い方を初心者向けに理解する
UniとMultiの違いと使い方を初心者向けに理解する

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

生徒

「QuarkusのReactiveプログラミングで、UniとかMultiって出てくるんですが、正直よく分かりません…」

先生

「Quarkusでは、非同期処理やリアクティブ処理を分かりやすく書くためにUniとMultiを使います。違いが分かると、REST APIの実装が一気に楽になりますよ。」

生徒

「同期処理と何が違うんですか?初心者でも理解できますか?」

先生

「大丈夫です。まずは考え方から、実際のJavaコードを見ながら説明していきましょう。」

1. QuarkusにおけるReactiveプログラミングとは

1. QuarkusにおけるReactiveプログラミングとは
1. QuarkusにおけるReactiveプログラミングとは

QuarkusのReactiveプログラミングは、Javaで非同期処理をシンプルに書くための仕組みです。 従来の同期処理では、処理が終わるまでスレッドが待ち続けますが、Reactiveプログラミングでは 処理結果が返ってきたタイミングで次の処理を実行します。

Quarkusでは、このReactiveプログラミングを実現するためにSmallRye Mutinyというライブラリを採用しています。 その中心となる概念がUniとMultiです。Quarkus、Reactive、非同期処理、ノンブロッキングといった キーワードは、REST API開発でも頻繁に登場します。

2. Uniの基本概念と特徴

2. Uniの基本概念と特徴
2. Uniの基本概念と特徴

Uniは「結果が一つだけ返ってくる非同期処理」を表します。 データベースから一件のデータを取得する場合や、単純な計算結果を返す場合によく使われます。 同期処理で言えば、戻り値が一つのメソッドに近いイメージです。

QuarkusのREST APIでUniを使うと、処理中にスレッドをブロックせず、 高速でスケーラブルなアプリケーションを実現できます。 初心者の方は「結果が一つならUni」と覚えると理解しやすくなります。


import io.smallrye.mutiny.Uni;

public class UniExample {
    public static void main(String[] args) {
        Uni<String> uni = Uni.createFrom().item("Hello Quarkus");

        uni.subscribe().with(
            item -> System.out.println(item)
        );
    }
}

Hello Quarkus

3. Multiの基本概念と特徴

3. Multiの基本概念と特徴
3. Multiの基本概念と特徴

Multiは「複数のデータが順番に流れてくる非同期処理」を表します。 一覧データの取得や、イベントが連続して発生する処理に向いています。 同期処理で言えば、リストや配列を順番に処理するイメージです。

QuarkusのReactiveプログラミングでは、ストリーム処理のようにデータを扱えるため、 メモリ効率が良く、リアルタイム性の高い処理が可能になります。 Kafkaなどのイベント駆動開発にもつながる重要な考え方です。


import io.smallrye.mutiny.Multi;

public class MultiExample {
    public static void main(String[] args) {
        Multi<Integer> multi = Multi.createFrom().items(1, 2, 3);

        multi.subscribe().with(
            item -> System.out.println(item)
        );
    }
}

1
2
3

4. UniとMultiの違いをイメージで理解する

4. UniとMultiの違いをイメージで理解する
4. UniとMultiの違いをイメージで理解する

UniとMultiの違いはとてもシンプルです。 Uniは「一回だけ結果が返る電話」、Multiは「何度も通知が届くメッセージアプリ」 のように考えると分かりやすくなります。

QuarkusのReactive REST APIでは、エンドポイントの戻り値として UniやMultiをそのまま返すことができます。 これにより、非同期処理を意識せずに、自然なJavaコードが書けるのが特徴です。

5. Uniを使った簡単なREST APIの考え方

5. Uniを使った簡単なREST APIの考え方
5. Uniを使った簡単なREST APIの考え方

QuarkusのREST APIでは、データ取得処理をUniで返すことで、 ノンブロッキングなAPIを簡単に実装できます。 まだデータベースを学習していなくても、考え方だけ理解しておくと後で役立ちます。


import io.smallrye.mutiny.Uni;

public class UserService {

    public Uni<String> findUserName() {
        return Uni.createFrom().item("Taro");
    }
}

Taro

6. Multiを使った繰り返し処理の考え方

6. Multiを使った繰り返し処理の考え方
6. Multiを使った繰り返し処理の考え方

Multiは、繰り返し処理や一覧表示と相性が良いReactive型です。 for文の代わりに使うというより、「データが流れてくる」という感覚を持つことが大切です。

Quarkusでは、この仕組みによって大量データでも安定した処理が可能になります。 Reactive Streamsの考え方に自然と慣れていくことができます。


import io.smallrye.mutiny.Multi;

public class NumberService {

    public Multi<Integer> getNumbers() {
        return Multi.createFrom().items(10, 20, 30, 40);
    }
}

10
20
30
40

7. 初心者がつまずきやすいポイントと学習のコツ

7. 初心者がつまずきやすいポイントと学習のコツ
7. 初心者がつまずきやすいポイントと学習のコツ

QuarkusのReactiveプログラミングで初心者がつまずきやすいのは、 「いつ処理が実行されるのか分からない」という点です。 UniやMultiは、subscribeされたタイミングで初めて処理が動きます。

まずは、同期処理との違いを意識しすぎず、 「結果が一つならUni」「複数ならMulti」という基準で使い分ける練習をすると理解が進みます。 Quarkus、Reactive、Uni、Multi、REST APIといったキーワードを意識しながら、 小さなサンプルコードを動かすのがおすすめです。

カテゴリの一覧へ
新着記事
New1
Quarkus
Quarkusのフォーム認証を基礎から解説!初心者向けセキュリティ入門ガイド
New2
Micronaut
MicronautプロジェクトをGradleで管理する基礎!build.gradleの役割を解説
New3
Micronaut
LinuxでMicronautをセットアップする方法!パッケージ管理とGradle連携
New4
Java
Javaのswitch文を徹底解説!case・defaultの書き方と実例まとめ
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkusプロジェクト構成の基本を完全解説!初心者でも迷わない「どこに何を書くか」ガイド
No.2
Java&Spring記事人気No2
Quarkus
Quarkusのセキュリティ基礎を初心者でもわかるように解説!
No.3
Java&Spring記事人気No3
Quarkus
QuarkusとMicronautとHelidonを徹底比較!軽量Javaフレームワークの違いを初心者向けに解説
No.4
Java&Spring記事人気No4
Quarkus
Quarkusの開発環境構築で躓きやすいポイントを完全解説!初心者でも安心して始めるためのチェックガイド
No.5
Java&Spring記事人気No5
Micronaut
MicronautとSpring Bootの違いとは?アーキテクチャ比較で速さの秘密を理解する
No.6
Java&Spring記事人気No6
Quarkus
Quarkusでマイクロサービス開発が加速する理由を徹底解説!Java初心者でも分かるクラウドネイティブ
No.7
Java&Spring記事人気No7
Micronaut
Micronautのアプリケーション起動が速い理由を初心者向けに解説
No.8
Java&Spring記事人気No8
Micronaut
MicronautのAOPが高速な理由とは?コンパイル時AOPの仕組みを初心者向けに徹底解説