Micronautの環境変数の扱い方完全ガイド!Docker・クラウドと連携する設定管理入門
生徒
「MicronautをDockerやクラウドで動かすとき、設定はどうやって管理するんですか?」
先生
「その場合は環境変数を使うのが基本になります。Micronautは環境変数との相性がとても良いですよ。」
生徒
「設定ファイルと何が違うんでしょうか?」
先生
「違いや使い分けも含めて、順番に確認していきましょう。」
1. Micronautにおける環境変数の役割
Micronautでは、設定管理の方法として設定ファイルと環境変数の両方を利用できます。環境変数とは、アプリケーションの外側から値を渡す仕組みで、実行環境ごとに設定を切り替える際に非常に便利です。特にDockerやクラウド環境では、環境変数が標準的な設定手段として使われます。
コードを書き換えずに動作を変更できる点が大きな特徴で、本番運用を意識した開発では欠かせない存在です。
2. 環境変数と設定ファイルの優先順位
Micronautでは、複数の設定ソースが存在する場合、あらかじめ決められた優先順位に従って値が決定されます。一般的に、環境変数は設定ファイルよりも優先されます。そのため、同じ設定項目が両方に存在した場合は、環境変数の値が使われます。
この仕組みにより、ローカル開発では設定ファイルを使い、本番では環境変数で上書きするといった柔軟な運用が可能になります。
3. Micronautで環境変数を参照する基本例
環境変数は特別な設定をしなくても、Micronautが自動的に読み取ります。アプリケーション側では、通常の設定値と同じ感覚で扱えます。ここではサーバーのポート番号を環境変数から受け取る例を見てみましょう。
import io.micronaut.context.annotation.Value;
import jakarta.inject.Singleton;
@Singleton
public class EnvConfig {
@Value("${server.port}")
private int port;
public int getPort() {
return port;
}
}
例えばSERVER_PORTという環境変数を設定すると、この値が自動的に反映されます。
4. Dockerで環境変数を渡す方法
Docker環境では、コンテナ起動時に環境変数を指定するのが一般的です。これにより、同じイメージを使いながら設定だけを切り替えられます。Micronautはこの仕組みを前提として設計されているため、特別な対応は不要です。
FROM eclipse-temurin:17-jre
ENV SERVER_PORT=8080
COPY app.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
このように環境変数を定義するだけで、Micronaut側が自動的に設定として認識します。
5. クラウド環境での環境変数活用
クラウドサービスでは、管理画面や設定ファイルを通じて環境変数を登録するケースが多くあります。データベース接続情報やAPIキーなど、外部に漏れてはいけない情報をコードやリポジトリに含めずに管理できる点が大きなメリットです。
Micronautは起動時に環境変数を自動取得するため、クラウド特有の設定方法を意識せずに開発を進められます。
6. YAML設定と環境変数の組み合わせ
環境変数はすべての設定を置き換えるものではありません。基本設定はYAMLファイルに記述し、環境ごとに変わる部分だけを環境変数で上書きする使い方が現実的です。この組み合わせにより、設定の可読性と柔軟性を両立できます。
server:
port: 8080
datasources:
default:
url: ${DB_URL}
このように記述すると、データベースの接続先だけを環境変数で安全に管理できます。
7. 環境変数を使う際の注意点
環境変数は便利ですが、数が増えすぎると全体像が把握しづらくなります。どの環境変数が必要なのかを整理し、命名規則を統一することが重要です。また、ローカル開発時に設定漏れがあると起動エラーになるため、デフォルト値を設定するなどの工夫も有効です。
Micronautの環境変数の扱い方を理解することで、Dockerやクラウドを前提とした現代的な開発スタイルにスムーズに移行できます。