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

QuarkusのCDIスコープを完全理解!@ApplicationScopedと@RequestScopedを初心者向けに徹底解説

CDIのスコープ(@ApplicationScoped, @RequestScoped)を理解する
CDIのスコープ(@ApplicationScoped, @RequestScoped)を理解する

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

生徒

「QuarkusでDIとかCDIって出てくるんですが、スコープって何を意味しているんですか?」

先生

「スコープは、そのクラスのインスタンスが、いつ作られて、どのくらいの間使われるかを決める仕組みです。」

生徒

「@ApplicationScopedや@RequestScopedをよく見ますが、違いがよく分かりません。」

先生

「では、QuarkusとCDIの基本から順番に、初心者でもイメージできるように説明していきましょう。」

1. QuarkusとCDIの関係をざっくり理解しよう

1. QuarkusとCDIの関係をざっくり理解しよう
1. QuarkusとCDIの関係をざっくり理解しよう

Quarkusは、Javaで高速なWebアプリケーションやREST APIを作るためのフレームワークです。 Quarkusの大きな特徴の一つが、CDIという仕組みを使ったDIです。 CDIは、オブジェクトの生成や管理をフレームワークに任せるための仕組みで、プログラムを書く人は「何を使いたいか」だけを意識すればよくなります。 このCDIで重要になるのが、スコープという考え方です。 スコープを理解すると、Quarkusで書かれているコードの意味が一気に分かりやすくなります。

2. CDIスコープとは何かをイメージで考える

2. CDIスコープとは何かをイメージで考える
2. CDIスコープとは何かをイメージで考える

CDIスコープとは、そのクラスのインスタンスが「いつ作られ」「いつまで使われるか」を決めるルールです。 たとえば、アプリ全体で一つだけ使い回したいものもあれば、リクエストごとに新しく作りたいものもあります。 Quarkusでは、この違いをアノテーションで指定します。 初心者のうちは、まず「アプリ全体で一つ」か「アクセスごとに一つ」という感覚を持つことが大切です。

3. ApplicationScopedの基本的な考え方

3. ApplicationScopedの基本的な考え方
3. ApplicationScopedの基本的な考え方

ApplicationScopedは、アプリケーション全体で一つのインスタンスを使い回すスコープです。 Quarkusが起動したときに一度だけ作られ、アプリが終了するまで同じものが使われます。 設定情報や共通処理など、どこから呼ばれても同じでよい処理に向いています。 何度も新しく作られないので、パフォーマンスの面でもメリットがあります。


import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class GreetingService {

    public String hello() {
        return "Hello Quarkus!";
    }
}

このクラスは、アプリ全体で一つだけ作られ、何度リクエストが来ても同じインスタンスが使われます。 初心者のうちは「ずっと生きているクラス」と覚えると分かりやすいです。

4. RequestScopedの基本的な考え方

4. RequestScopedの基本的な考え方
4. RequestScopedの基本的な考え方

RequestScopedは、HTTPリクエストごとに新しく作られるスコープです。 Web画面を開いたり、REST APIを呼び出したりするたびに、新しいインスタンスが作られます。 一つのリクエストの中でだけ使われ、処理が終わると破棄されます。 ユーザーごとに違うデータを扱う場合に向いています。


import jakarta.enterprise.context.RequestScoped;

@RequestScoped
public class AccessLogService {

    public String log() {
        return "request accessed";
    }
}

このクラスは、アクセスされるたびに新しく作られます。 同時に複数の人がアクセスしても、それぞれ別のインスタンスが使われるので安心です。

5. ApplicationScopedとRequestScopedの違いを比較する

5. ApplicationScopedとRequestScopedの違いを比較する
5. ApplicationScopedとRequestScopedの違いを比較する

ApplicationScopedは、アプリ全体で共有される一つのインスタンスです。 RequestScopedは、リクエスト単位で作られる一時的なインスタンスです。 たとえば、設定値を返すだけの処理はApplicationScopedが向いています。 一方で、リクエストの内容に応じて変わる処理はRequestScopedが適しています。 どちらを使うかは、「いつまでその情報を使いたいか」で考えると判断しやすくなります。


import jakarta.inject.Inject;

public class SampleResource {

    @Inject
    GreetingService greetingService;

    @Inject
    AccessLogService accessLogService;

    public String execute() {
        return greetingService.hello() + " / " + accessLogService.log();
    }
}

6. 初心者がつまずきやすいポイントと注意点

6. 初心者がつまずきやすいポイントと注意点
6. 初心者がつまずきやすいポイントと注意点

初心者がよく迷うのが、どのスコープを使えばよいか分からない点です。 最初は、共通処理はApplicationScoped、リクエスト依存の処理はRequestScopedと覚えておけば問題ありません。 また、ApplicationScopedで状態を持つ場合は注意が必要です。 複数のリクエストから同時に使われるため、値を書き換える処理を書くと予期しない動きになることがあります。 まずは状態を持たないクラスとして使うのが安全です。


@ApplicationScoped
public class CounterService {

    private int count = 0;

    public int increment() {
        count++;
        return count;
    }
}

このようなコードは、学習用としては理解しやすいですが、実際の開発では注意が必要です。 スコープの特性を意識することが、QuarkusとCDIを正しく使う第一歩になります。

カテゴリの一覧へ
新着記事
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とMicronautとHelidonを徹底比較!軽量Javaフレームワークの違いを初心者向けに解説
No.3
Java&Spring記事人気No3
Quarkus
Quarkusのセキュリティ基礎を初心者でもわかるように解説!
No.4
Java&Spring記事人気No4
Micronaut
MicronautとSpring Bootの違いとは?アーキテクチャ比較で速さの秘密を理解する
No.5
Java&Spring記事人気No5
Quarkus
Quarkusでマイクロサービス開発が加速する理由を徹底解説!Java初心者でも分かるクラウドネイティブ
No.6
Java&Spring記事人気No6
Quarkus
Quarkusの開発環境構築で躓きやすいポイントを完全解説!初心者でも安心して始めるためのチェックガイド
No.7
Java&Spring記事人気No7
Java
Javaのboolean型の使い方を完全ガイド!真偽値と条件分岐の基本
No.8
Java&Spring記事人気No8
Micronaut
MicronautのAOPが高速な理由とは?コンパイル時AOPの仕組みを初心者向けに徹底解説