※ この記事にはアフィリエイトリンクが含まれます
C#で環境変数の取得に悩んでいませんか?
環境変数の読み取りで詰まることはよくあります。
- 環境変数がnullになってしまう。
- 開発環境と本番環境で値が違う。
- ASP.NET CoreやDockerで反映されない。
結論から言うと、C#ではEnvironmentクラスやIConfigurationを使い、実行環境に合わせて取得方法を使い分けるのが最も確実です。
- ConsoleやライブラリならEnvironment.GetEnvironmentVariableを使う。
- ASP.NET CoreならIConfiguration経由で取得するのが便利です。
- DockerやAzureではサービス側の設定を確認してください。
この記事では、初心者向けにC#での環境変数取得を詳しく解説します。
基本的な使い方から例、よくあるエラーと対処法まで網羅します。
なぜ環境変数を使うのか
環境変数は機密情報や設定値をコードから分離します。
ソースコードに直書きせずに環境ごとに値を切り替えられます。
Environmentクラスで変数を取得する
C#ではSystem.Environmentを使って環境変数を取得できます。
最も基本的なメソッドはGetEnvironmentVariableです。
var value = Environment.GetEnvironmentVariable("MY_VAR");
Console.WriteLine(value);この例ではMY_VARという名前の環境変数を取得します。
取得できない場合はnullが返りますので注意してください。
複数の環境変数を取得する
すべての環境変数を取得することも可能です。
var dict = Environment.GetEnvironmentVariables();
foreach (System.Collections.DictionaryEntry de in dict)
{
Console.WriteLine($"{de.Key} = {de.Value}");
}戻り値はIDictionaryなのでループ処理で扱えます。
大量の値を確認したいときに便利です。
環境変数のスコープと注意点
WindowsにはProcess、User、Machineのスコープがあります。
Environment.GetEnvironmentVariableにはEnvironmentVariableTargetのオーバーロードがあります。
var userVal = Environment.GetEnvironmentVariable("MY_VAR",
EnvironmentVariableTarget.User);ただし、.NET CoreをLinuxやmacOSで使う場合、UserやMachineはサポートされないことがあります。
そのためクロスプラットフォームではProcessレベルの利用が一般的です。
ASP.NET Coreでの取得方法
ASP.NET CoreではIConfigurationを使うのが一般的です。
IConfigurationは環境変数、appsettings.json、コマンドラインの順で優先度を扱えます。
// Startup.cs または Program.cs の例
var value = Configuration["MY_VAR"];
Console.WriteLine(value);環境変数は環境ごとに設定しておくことで、コード変更なしに切り替え可能です。
また、環境変数名のネーミングではコロン(:)が使えない場合があるので注意してください。
環境ごとの設定ファイルと優先順位
IConfigurationは複数のプロバイダーを合成します。
優先順位を理解しておくと意図しない値の上書きを防げます。
Visual StudioやVS Codeでのローカル設定
Visual StudioではlaunchSettings.jsonで環境変数を設定できます。
デバッグ実行時はここで指定した値がプロセスに注入されます。
{
"profiles": {
"MyApp": {
"environmentVariables": {
"MY_VAR": "local-value"
}
}
}
}VS Codeでは.envファイルやlaunch.jsonで設定する方法があります。
ただし、.envはASP.NET Coreのビルドプロセスでは自動で読み込まれません。
Dockerやクラウドでの注意点
DockerではDockerfileやdocker-composeでENVを指定します。
ENV MY_VAR=container-valuedocker-compose.ymlでもenvironmentキーで設定できます。
クラウド環境(Azure、AWS、GCP)では各サービスの設定画面で環境変数を設定します。
Azure App Serviceの例
Azureでは「アプリケーション設定」にキーと値を追加します。
デプロイ後はApp Serviceがその値をプロセス環境変数として渡します。
値の型変換と安全な扱い方
環境変数は文字列として渡されます。
数値や真偽値に変換する場合はTryParseを使って安全に処理しましょう。
var s = Environment.GetEnvironmentVariable("PORT");
if (int.TryParse(s, out var port))
{
// port を使う
}nullチェックを忘れるとNullReferenceExceptionの原因になります。
機密情報は環境変数で扱える一方、アクセス制御やログ出力に注意が必要です。
よくあるトラブルと対処法
値が取得できない場合はまず設定場所を確認しましょう。
ローカルでセットした値が反映されないケースが多くあります。
- Visual Studioの
launchSettings.jsonを確認する。 - PowerShellやコマンドプロンプトで設定した場合は新しいプロセスを開く。
- Dockerならイメージを再ビルドして環境変数を反映する。
さらにASP.NET CoreではIConfigurationの優先度に注意してください。
appsettings.jsonや環境別のファイルで上書きされていることがあります。
パーミッションやプラットフォームの違い
Windows特有のUser/MachineスコープはLinuxで動かないことがあります。
クロスプラットフォームを意識する場合はProcessスコープでの利用を推奨します。
セキュリティと運用上のポイント
環境変数はソース管理に含めないでください。
機密情報はシークレットストアかクラウドのシークレットマネージャを検討しましょう。
CI/CDで環境変数を注入する方法を整備すると安全に運用できます。
まとめと実践の提案
C#で環境変数を取得する方法はシンプルです。
Environment.GetEnvironmentVariableやIConfigurationを用途に合わせて使い分けてください。
まずはローカルで値を設定して取得できるか確かめるのがおすすめです。
そしてDockerやクラウドにデプロイする際は、環境設定の反映方法をチェックしてください。
困ったときは設定場所とプロセスのスコープを確認する習慣をつけましょう。

#エンジニアとして、もっと自分の力を活かしたいあなたへ
「このまま今の職場にいて、成長できるんだろうか?」
C#を使っている方なら、一度はそう感じたことがあるかもしれません。
実は今、C#/.NETエンジニアの市場価値は高まっており、
年収アップ・フルリモート・自社開発企業など、選べる選択肢は確実に増えています。
もし今後、C#を活かして働きたい、あるいは開発現場で経験を積みたいとお考えなら…
自分に合った転職サービスを早めに知っておくことが大きな武器になります。
現役エンジニアからのサポート付き・無料で学べるスクール・社内SE特化の求人など、
転職支援サービスを厳選したまとめ記事をこちらで紹介しています。

ここまで読んでいただきありがとうございました。
コメント