QuarkusのDIとは?初心者向けにわかるCDIの基本概念と仕組みをやさしく解説
生徒
「Quarkusって軽くて速いって聞きますけど、DIとかCDIって言葉が出てきてよく分からなくなりました」
先生
「QuarkusではDIという仕組みを使って、クラス同士のつながりを自動で管理しています。その中心にある考え方がCDIです」
生徒
「DIとCDIって別物なんですか?」
先生
「考え方と仕組みの関係です。まずはDIの意味から、順番に理解していきましょう」
1. QuarkusにおけるDIの基本的な考え方
QuarkusのDIとは、依存性注入と呼ばれる仕組みです。依存性注入とは、クラスが必要とする別のクラスを、自分で生成するのではなく、フレームワーク側が自動で用意してくれる考え方です。 Javaの初心者が最初につまずきやすいポイントは、クラス同士がどのようにつながっているかという部分です。DIを使わない場合、あるクラスの中で別のクラスを直接newしてしまい、変更に弱いコードになりがちです。 QuarkusではDIを使うことで、コードの見通しが良くなり、修正や拡張がしやすい設計になります。
2. CDIとは何かを初心者向けに整理する
CDIはContexts and Dependency Injectionの略で、Java標準のDI仕様です。QuarkusはこのCDIをベースにしてDI機能を提供しています。 CDIは難しそうな名前ですが、基本的には「オブジェクトの管理」と「必要な場所への自動注入」を担当します。 Quarkusでは軽量で高速なCDI実装が使われており、起動時間が短く、メモリ使用量も抑えられています。これがQuarkusがクラウドネイティブ向けと言われる理由の一つです。
3. Quarkusで管理されるBeanの仕組み
CDIでは、DIの対象となるクラスをBeanと呼びます。Quarkusでは、特定のアノテーションを付けたクラスがBeanとして自動的に管理されます。 BeanはQuarkusの起動時に解析され、どのクラスがどのクラスに注入されるのかが決まります。 この仕組みにより、開発者はオブジェクトの生成タイミングや管理を意識せずに、ビジネスロジックに集中できます。
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class GreetingService {
public String greet(String name) {
return "こんにちは、" + name + "さん";
}
}
4. DIを使ったクラスの注入方法
QuarkusでDIを使う場合、Injectアノテーションを使ってBeanを注入します。 この方法を使うと、newキーワードを書かずに、必要なクラスをそのまま利用できます。 初心者のうちは「どこでインスタンスが作られているのか分からない」と感じるかもしれませんが、Quarkusが自動で管理していると考えると理解しやすくなります。
import jakarta.inject.Inject;
public class GreetingController {
@Inject
GreetingService greetingService;
public void execute() {
System.out.println(greetingService.greet("Quarkus"));
}
}
5. スコープの概念とDIの関係
CDIにはスコープという概念があります。スコープとは、Beanがどの範囲で、どのくらいの期間使われるかを表すものです。 Quarkusではアプリケーション全体で一つだけ使われるスコープや、必要なときだけ作られるスコープなどがあります。 スコープを正しく理解することで、無駄なオブジェクト生成を防ぎ、パフォーマンスの良いアプリケーションを作ることができます。
import jakarta.enterprise.context.Dependent;
@Dependent
public class SimpleLogger {
public void log(String message) {
System.out.println("LOG: " + message);
}
}
6. QuarkusでDIを使うメリット
QuarkusでDIとCDIを使う最大のメリットは、コードの変更に強くなることです。 例えば、処理の中身を差し替えたい場合でも、DIを使っていれば他のクラスに影響を与えにくくなります。 また、テストコードを書きやすくなる点も重要です。DIを前提とした設計は、初心者から中級者へステップアップするための大切な考え方です。
7. QuarkusとCDIを学ぶときの注意点
初心者がQuarkusのDIやCDIを学ぶときは、すべてを一度に理解しようとしないことが大切です。 まずはBeanとは何か、Injectで何が起きているのかを体感することが重要です。 Quarkusは設定が少なく、動作も直感的なので、DIやCDIの学習にとても向いています。基本を押さえれば、後のREST APIやデータベース連携の理解もスムーズになります。
public class DiConceptExample {
public static void main(String[] args) {
System.out.println("DIはオブジェクトの管理を任せる考え方です");
}
}