Micronautで設定値を取得する方法!@Valueと@ConfigurationPropertiesの使い分け完全解説
生徒
「Micronautでアプリの設定値を取得するには、どの方法が良いのでしょうか?」
先生
「Micronautでは@Valueと@ConfigurationPropertiesという二つの方法があります。それぞれ使い方や適した場面が異なるので理解しておくと便利です。」
生徒
「具体的にどんな違いがあるんですか?」
先生
「それでは、設定値取得の基本とサンプルを交えて順番に解説していきましょう。」
1. @Valueアノテーションを使った設定値取得
@Valueアノテーションは、設定ファイルや環境変数に定義された「1つの値」をプログラム内に取り込むための仕組みです。特に、アプリ名・URL・フラグ値など、単独で利用する設定を扱うときに便利です。MicronautではDI(依存性注入)の機能によって、設定値を自動的にクラスへ渡してくれるため、初心者でも簡単に利用できます。設定値は主にapplication.ymlまたはapplication.propertiesに記述します。
まずは、もっともシンプルな例として、アプリケーション名を設定ファイルから取得する方法を見てみましょう。
package com.example.config;
import io.micronaut.context.annotation.Value;
import jakarta.inject.Singleton;
@Singleton
public class AppConfig {
@Value("${app.name}")
String appName;
public String getAppName() {
return appName;
}
}
上記の@Value("${app.name}")は、「app.name」という設定キーに対応する値を読み込み、appName変数へ自動的に代入するという意味です。Micronautが起動するときに設定値が読み込まれるため、開発者が手動でファイルを読み取る必要はありません。
次に、設定ファイル側の記述例を確認してみましょう。
app:
name: MicronautSample
このように設定しておくと、プログラム内では「MicronautSample」という文字列を取得できます。たとえば、ログ出力や画面表示、APIレスポンスなどでアプリケーション情報を表示したい場合に活用できます。また、設定値をコード内に直接書かないことで、環境ごとの変更にも柔軟に対応できるというメリットがあります。小規模な設定を素早く取得したい場合は、@Valueを使う方法を覚えておくと非常に便利です。
2. @ConfigurationPropertiesを使った設定値取得
一方、@ConfigurationPropertiesは、関連する複数の設定値を「1つの設定クラス」としてまとめて取得できる仕組みです。設定値を個別に取得するのではなく、まとまりのある情報として管理したい場合に非常に役立ちます。特に、アプリケーション名やバージョン情報、外部サービスの接続情報など、同じグループに属する設定を整理して扱いたい場面でよく利用されます。
Micronautでは、application.ymlに記述された階層構造の設定を、自動的にJavaクラスのフィールドへマッピングしてくれます。これにより、設定値の管理がしやすくなり、コードの可読性や保守性も向上します。また、設定項目が増えてもクラスを拡張するだけで対応できるため、実務でも多く利用される重要な機能です。
以下は、アプリケーションの基本情報を取得するシンプルなサンプルです。
package com.example.config;
import io.micronaut.context.annotation.ConfigurationProperties;
import jakarta.inject.Singleton;
@ConfigurationProperties("app")
@Singleton
public class AppProperties {
private String name;
private String version;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
@ConfigurationProperties("app")と指定することで、application.ymlの「app」から始まる設定値をまとめて取得できます。クラス内のフィールド名とYAMLのキー名が一致すると、自動的に値が設定されます。
次に、設定ファイルの記述例を確認してみましょう。
app:
name: MicronautSample
version: 1.0.0
上記の設定では、「app」というグループの中に「name」と「version」という設定値が定義されています。このような階層構造にすることで、関連する設定を分かりやすく整理できます。
初心者の方は、「設定ファイルの値が、そのままJavaクラスの変数に自動で入る」とイメージすると理解しやすいでしょう。例えば、nameには「MicronautSample」、versionには「1.0.0」が自動で代入されます。
この仕組みを利用すると、設定値を複数のクラスから再利用できるため、同じ値を何度も記述する必要がなくなります。その結果、設定変更にも柔軟に対応でき、アプリケーション全体の管理がしやすくなります。
3. @Valueと@ConfigurationPropertiesの使い分け方
単一の設定値を取得する場合は@Valueが手軽で簡単です。一方、関連する設定を複数まとめて取得したい場合や、設定値のグループ化を行いたい場合は@ConfigurationPropertiesを使います。
たとえば、データベース接続設定や外部APIのエンドポイント情報など、複数のプロパティをまとめて管理したい場合には@ConfigurationPropertiesを使うと、コードが整理され、可読性や保守性も向上します。
SEOキーワード:Micronaut 設定値使い分け、@Value 使い方、@ConfigurationProperties 利用方法、Java 設定管理、Micronaut DI 設定注入
4. サービスでの設定値利用例
設定値を取得したら、サービスクラスで活用できます。例えばアプリ名やバージョンをログ出力したり、条件分岐に利用することが可能です。
package com.example.service;
import com.example.config.AppProperties;
import jakarta.inject.Singleton;
@Singleton
public class GreetingService {
private final AppProperties appProperties;
public GreetingService(AppProperties appProperties) {
this.appProperties = appProperties;
}
public String greet() {
return "Welcome to " + appProperties.getName() + " v" + appProperties.getVersion();
}
}
このように@ConfigurationPropertiesを使うと、複数の設定値をまとめて注入でき、サービスの処理で簡単に利用可能です。
SEOキーワード:Micronaut サービス設定値利用、Java DI 設定注入、Micronaut @ConfigurationProperties サンプル、設定値ログ出力
5. 環境変数やプロファイルごとの設定値取得
Micronautではapplication.ymlのプロファイル機能を利用して、環境ごとに異なる設定値を管理できます。@Valueや@ConfigurationPropertiesはプロファイルに応じた値を自動で取得可能です。
# application-dev.yml
app:
name: MicronautSampleDev
version: 1.0.1
開発環境ではapplication-dev.ymlを読み込み、本番環境ではapplication-prod.ymlを読み込むことで、環境ごとに設定を切り替えられます。
SEOキーワード:Micronaut プロファイル設定、環境別設定値取得、Java プロパティ環境切替、Micronaut @Value 環境対応
6. まとめの前に活用のポイント
@Valueは簡単な単一値取得に、@ConfigurationPropertiesは複数設定値のまとめ管理に適していることを覚えておきましょう。DIコンテナと組み合わせることで、設定値の変更や環境切替も簡単に行え、Micronautアプリケーションの柔軟性が向上します。開発者はこの二つの方法を理解し、適切に使い分けることで、保守性の高いコードを書くことができます。