Javaで環境変数を設定する方法
読む所要時間: 8 分
環境変数は、データベースやキャッシュサーバー、サードパーティーのAPIなど、コードに明示的に設定を保存することなくJavaアプリケーションを構成するための優れた方法です。
このような設定をコードの外に保管しておくことには、いくつかの利点があります。
- 設定変更時のコードの更新や再コンパイルが不要になります。
- ユーザー名やパスワード、デプロイメントトークンなどの機密情報の漏洩を防止します。
- 同じコードを複数の環境にデプロイできます。
本稿では、Javaで環境変数を扱う方法をご紹介します。
Javaで環境変数にアクセスする方法
最も一般的な方法は、System.getenv()
を使う方法です。System.getenv()
は任意の引数として、String
を受け取ります。引数が渡されたかどうかによって、このメソッドから返される値が異なります。
String
が渡され、内部環境のMap
のキーと一致する場合、そのキーに対応する値が返されます。 一致するキーがなければ、null
が返されます。引数が渡されない場合、すべての環境変数とその値を含む読み出し専用のjava.util.Map
が返されます。Map
のキーは環境変数名で、値は環境変数の値です。
以下に、このメソッドを使って、ユーザーのシェルを含むLinuxの環境変数である「SHELL」を取得する例を示します。
環境変数の設定方法
環境変数を取得する方法だけでなく、設定方法についても知っておくと役に立ちます。本稿では、詳細までは紹介せず、必要なことだけに絞って説明します。 しかし、環境変数についてもっと深く知りたい方は、Twilio Blogの「環境変数の設定方法」を参照してください。
UNIX、Linux、macOS
UNIX、Linux、macOSでは、環境変数の設定は主に3つの方法で行います。
現在のセッションとすべての子プロセスで利用可能にする
以下の例のように、組み込みのexportコマンドを使用すると、現在のセッションと、現在のセッションで起動したプロセスの両方で利用できるように、環境変数を初期化できます。
現在のセッションで使用可能にする
以下の例のように、環境変数を初期化して、現在のセッションには利用可能に、子プロセスには無効になるように設定できます。
特定のプロセスで利用可能にする
環境変数を初期化し、特定のプロセスでのみ利用可能にできます。これは、特定のプロセスのみが変数を必要とする場合に便利です。以下の例のように、目的の処理を開始するときに初期化します。
Microsoft Windows
Microsoft Windowsでは、環境変数の設定が少し異なります。コントロールパネルから設定するか、コマンドプロンプトまたはPowerShellコンソールで設定するか、どちらかになります。以下に後者2つの例を示します。
.envファイルの使用
このように環境変数を設定することは非常に効果的ですが、一方で課題もあります。たとえば、オペレーティングシステムのシェルで設定する場合、アプリケーションが必要とする変数の具体的なリストはありませんし、変数が何のためにあるのか、どのようなデータ型でなければならないのかといった情報も得られません。
このことから、Twelve-Factor Appは 設定とコードの厳格な分離を推奨しています。この方法論は、.env(dotenv)ファイルの使用を通じて、開発者コミュニティ全体に急速に定着しました。以下の例のような、アプリケーションの動作に必要な環境変数を定義するキーと値のペアのリストを格納するプレーンテキストファイルを使用します。
プロジェクトを手軽に開始するために、すべてのキーを含むが値を含まない .env.example ファイルをプロジェクトに含めるという、さらなる共通の慣習も生まれています。新しい開発者がアプリケーションに取り掛かるとき、そのファイルをコピーし、名前を.envとし、各キーに自分のローカル開発環境に適した値を設定します。
.envファイルの読み込み
上記の例がプロジェクトの.envファイルであったと仮定すると、dotenv-javaのようなパッケージを使用して、変数をアプリケーションで使用できます。
Kotlinで開発している場合は、dotenv-kotlinを使用できます。
このパッケージの使用例は以下のとおりです。
このコードでは、新しいDotenv
オブジェクトであるdotenvを初期化して、プロジェクトのルートディレクトリにある.envの環境変数を読み込むために、Dotenv.configure().load()
を呼び出します。続いて、渡されたString
オブジェクトの値を取得するために、dotenv.get()
を使用します。一致するキーが見つからない場合、このメソッドはnull
を返します。
.envファイルのセキュリティに関する注意点
もし機密データが.env ファイルに保存されている場合、このファイルをバージョン管理下に置かないでください。バージョン管理下に置いてしまうと、dotenvファイルを使用することによるセキュリティ上の利点がすべて失われてしまいます。このため、バージョン管理から除外するのが一般的です。例えば、Gitを使う場合、プロジェクトの .gitignoreファイルに.envを追加します。
Javaで環境変数を扱う方法をご紹介しました
本稿では、Javaプロジェクトで環境変数を使用する方法をご紹介しました。
他に環境変数を使う方法をご存知でしたら、ぜひお教えください。
Matthew Setterは、Twilio VoicesチームのPHP編集者兼ポリグロットの開発者です。彼はDocker EssentialsとMezzio Essentialsの著者でもあります。PHPコードの作成に取り組んでいないときは、TwilioのPHP記事の優秀な編集者です。彼の連絡先はmsetter@twilio.comです。また、TwitterとGitHubでも情報を発信しています。