LoginSignup
15
14

More than 5 years have passed since last update.

ConfigurationBuilder を環境変数と設定ファイルで優先順位をつけて設定する

Posted at

.NET Core から使われているConfigurationBuilder で、コンフィグレーションを環境変数、appsettings.json の順番で読み込みたいというニーズがあったので、簡単なサンプルを作って検証した。

事前準備

ConfigurationBuilder をインストールするには下記のライブラリが必要

  • Microsoft.Extensions.Configuration

さらに、環境変数、Jsonの設定ファイルを使いたい時は次のものが必要です。他のプロバイダもあるので、これ以外に使いたかったら検索するとよいと思います。

  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.Json

nuget パッケージをインストールしておきましょう。

環境変数と、appsettings.jsonの設定

テスト用に、環境変数と、appsettings.json作成します。 環境変数のみのパターン、重複しているパターン、ファイルのみのパターンでデータを作っています。

環境変数

            // Only Environment Variables has been set
            Environment.SetEnvironmentVariable("SOME_PRIMARY_KEY", "EnvironmentVariablesKey");
            // Evirnoment Variables and appsettings has been set
            Environment.SetEnvironmentVariable("SOME_HOST_NAME", "EnvironmentVariablesHostName");

appsettings.json

{
  "SOME_HOST_NAME": "AppSettingsHostName",
  "SOME_SECRET":  "AppSettingsSecret"
}

ちなみに、コンフィグファイルを VS に含めるときは、Property > Advanced > Copy to Output DirectoryCopy always になっているようにすること。そうでないと実行ディレクトリに該当ファイルがコピーされません。

Builder を使用する

Builderの使用は単純に New をして、読み込みたいコンフィグレーションを足していくだけです。インターフェイスがあるので、そちらで受けるようにしておきました。すると、テストが楽になりそうですね。


IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json");
builder.AddEnvironmentVariables();
var configration = builder.Build();

あとは使うだけです。

Console.WriteLine($"SOME_PRIMARY_KEY: {configration["SOME_PRIMARY_KEY"]}");
Console.WriteLine($"SOME_HOST_NAME: {configration["SOME_HOST_NAME"]}");
Console.WriteLine($"SOME_SECRET: {configration["SOME_SECRET"]}");

実行結果

ちなみに、後から足したソースで上書きされるようですね。無ければ、最初のものがセットされます。これは便利。

SOME_PRIMARY_KEY: EnvironmentVariablesKey
SOME_HOST_NAME: EnvironmentVariablesHostName
SOME_SECRET: AppSettingsSecret

リソース

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14