https://a.storyblok.com/f/270183/1368x665/7d47494bfb/java_environmental-variables_24.png

Javaで環境変数を扱う

最終更新日 March 7, 2024

所要時間:1 分

はじめに

環境変数("env vars "と呼ばれることもある)とは、プログラムの外部に保存する変数のことで、プログラムの動作に影響を与えることができる。後でその値を使用して、プログラム、アプリケーション、サービスの動作を変更することができます。アプリケーションは、環境変数をミュータブル変数(変更可能な値)ではなく、実行中の固定値として扱います。環境変数は、通常はハードコードする値だが、環境間で変化したり、APIキーやパスワードのように機密性が高いため、コードから除外しておきたい場合に最も便利だ。これにより、コードの移植性が保たれ、管理が容易になり、開発やテストのような安全性の低い環境でも秘密を守ることができる。

このブログ記事では、環境変数とは何か、なぜJavaアプリケーションで環境変数が重要なのか、一般的な使用例、そして異なる環境で環境変数を設定しアクセスする方法について説明します。

前提条件

- Javaの基礎知識

- IntelliJ IDEAやEclipseのようなIDE

- Vonageアカウント

使用例

環境変数を使う一般的な方法には次のようなものがある:

  • APIキー、パスワード、トークンをコード外で安全に保管する。

  • 開発、テスト、ステージング、本番の間で構成を切り替える。

  • マシンやコンテナ間で同じコードを変更なしで実行できる。

  • のような変数を定義します。 PATHまたは JAVA_HOME.

APIキー、パスワード、トークンの保存

仕組み

APIキー、データベース・パスワード、認証トークンなどの機密情報は、環境変数(例. API_KEYDB_PASSWORD).

メリット

ソースコードに秘密が漏れないようにすることで、セキュリティ・リスクを低減し、バージョン管理における偶発的な漏えいを防ぐことができる。また、1つのファイルを編集するだけなので、キーやパスワードのローテーションも容易になる。

実施例

Java では、Vonage API キーは次のような環境変数として保存できます。 VONAGE_API_KEY.コードでは System.getenv("VONAGE_API_KEY")でアクセスし、キーがアプリケーションに直接埋め込まれないようにします。

環境間でコンフィギュレーションを切り替える

仕組み

環境変数 ENV_MODEまたは APP_ENV,などの環境変数は、アプリケーションが開発環境、テスト環境、ステージング環境、本番環境のどれで動作しているかを示すことができます。

メリット

これにより、アプリケーションは自動的にコンテキストに基づいて動作を調整することができる。例えば、開発モードでは冗長なロギングを有効にし、本番モードではパフォーマンスのためにログを最小化するとします。

実施例

Javaアプリケーションは System.getenv("ENV_MODE")をチェックして、正しいデータベース接続文字列を選択したり、環境に応じてデバッグ・ツールを有効/無効にしたりします。

マシンやコンテナ間で同じコードを実行する

仕組み

環境変数をコードの外に置いておくことで、同じコードベースを異なるマシン、サーバー、コンテナ間で変更することなくデプロイできる。

メリット

特にDockerやKubernetesのようなコンテナ化されたセットアップでは、ソースコードに触れることなく環境変数の値を調整するだけで済むため、アプリケーションの移動や拡張が容易になる。

実施例

コンテナ化されたJavaアプリケーションは、データベースの資格情報やサービスのURLのために環境変数を定義するかもしれない。コンテナがローカルで実行されるか本番環境で実行されるかに関係なく、同じコードが動作する。

パス変数の定義

仕組み

環境変数 PATHまたは JAVA_HOMEなどの環境変数は、実行可能ファイル、ライブラリ、または実行環境のシステムレベルの場所を指定する。

メリット

これにより、ファイルの場所をハードコーディングすることなく、ツールやアプリケーションを一貫して実行できるようになる。複数のプラットフォームで、それぞれ異なるディレクトリ構造でソフトウェアを実行する場合に特に便利です。

実施例

Javaでは JAVA_HOMEを設定することで、アプリケーションは常にJDKがどこにあるかを知ることができる。環境変数からパスを読み取ることで、開発者はプラットフォーム固有の問題を回避し、アプリケーションの移植性を高めることができる。

環境変数の使い方

環境変数を使用するには、まずシステムまたは設定ファイルで定義し、実行時にアプリケーションからその値にアクセスします。

環境変数の設定

ベストプラクティスとして、オペレーティングシステムで環境変数を設定します。 環境変数を設定します。環境変数を設定します。これは、コマンドラインで行うことも、.envファイルで直接行うこともできます。

Javaアプリケーションを実行する前に環境変数を設定する

最も一般的な方法は、Javaアプリケーションを起動する前に、オペレーティング・システムに環境変数を設定することである。これは、コマンドラインまたはスクリプトで行うことができます。

例えば、Unix環境では、ターミナルで次のように環境変数を設定できる:

export MY_VAR="some value"

ウィンドウズのコマンドプロンプトではこうなる:

set MY_VAR=some value

サブプロセスに設定

サブプロセスに環境変数を設定する必要がある場合 サブプロセスに環境変数を設定する必要がある場合は、ProcessBuilder クラスを使用できます:

ProcessBuilder processBuilder = new ProcessBuilder();
Map<String, String> env = processBuilder.environment();
env.put("MY_VAR", "some value");
Process process = processBuilder.start();

IDEで環境変数を設定する

のような統合開発環境(IDE)を使用している場合 のような統合開発環境または Eclipseのような統合開発環境(IDE)を使用している場合は、アプリケーションの構成設定で環境変数を設定できます。

ビルドツールで環境変数を設定する

のようなビルドツールを使う場合 メイブンまたは グラドルのようなビルド・ツールを使う場合、ビルド・スクリプトや設定ファイルで環境変数を設定できる。

ファイルからの設定の読み込み

そのため java.util.Propertiesを実装しているので、拡張子に関係なく、キーと値のペアをマップするファイルなら何でもロードできる:

var props = new Properties();
var envFile = Paths.get("/path/to/MyEnvConfig.env");
try (var inputStream = Files.newInputStream(envFile)) {
	props.load(inputStream);
}
String apiKey = props.get("VONAGE_API_KEY");
String apiSecret = props.get("VONAGE_API_SECRET");

環境変数の取得

Javaでの環境変数へのアクセスは簡単で、標準Javaライブラリで提供されている Systemクラスを使って行うことができます。ここではその方法を簡単に説明する:

単一の環境変数を取得する:特定の環境変数の値を取得するには System.getenv(String name)メソッドを使う。例えば API_KEYという名前の環境変数にアクセスするには

String apiKey = System.getenv("API_KEY");

ヌル値のチェック:環境変数がNULL(設定されていない)かどうかをチェックするのは、潜在的な可能性を避けるための良い習慣だ。 NullPointerExceptions.例えば

String apiKey = Optional.ofNullable(System.getenv("API_KEY")).orElse(otherValue);

ここで otherValueはフォールバック値である。もし環境変数が見つからないときに早く失敗したいのであれば、代わりに例外を投げることができる:

Optional.ofNullable(System.getenv("API_KEY")).orElseThrow(() -> new IllegalStateException("API_KEY env var is not defined"));

すべての環境変数を取得する:すべての環境変数の Map<String, String>を使う。 System.getenv().これは、利用可能なすべての環境変数を反復処理したい場合に便利である。例えば

Map<String, String> envVars = System.getenv();
for (String envName : envVars.keySet()) {
    System.out.format("%s=%s%n", envName, envVars.get(envName));`
}

あるいは、これを1行で書くこともできる:

System.getenv().forEach((k, v) -> System.out.println(k+"="+v));

ベストプラクティスの共有

環境変数の取得と設定は、プロダクション・ソフトウェアを作成する上で不可欠な要素です。この記事を最後まで読んでいただければ、環境変数とは何か、使用例、環境変数の取得と設定方法、Javaで.envファイルを使用する方法についてご理解いただけたと思います。私たちはコミュニティの参加を常に歓迎しています。お気軽に GitHubVonage コミュニティ Slack.他にも環境変数を使ったベストプラクティスがありますか?ぜひ共有して タグをつけてください.ぜひ聞かせてください!

シェア:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana Phamデベロッパー・アドボケイト

ダイアナはVonageのデベロッパー・アドボケイト。新鮮な牡蠣を食べるのが好き。