しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET Core 1.0 で追加された User Secrets を使ってみる

これまでは開発環境用の接続情報など GitHub などのリポジトリに含めたくない情報は、Web.config の configSource を使って別ファイルにして管理していたかもしれません。

ASP.NET Core 1.0 には User Secrets が追加されたので、ユーザー専用の情報を簡単に扱えるようになりました。古い情報ですが GitHub の Wiki で紹介されてます。

Home · dotnet/aspnetcore Wiki · GitHub

Visual Studio 2015 向けのツールでは、右クリックメニューから簡単にユーザーシークレットの管理が行えるようになっているので、コマンドから操作する必要がなく便利です。

選択すると json ファイルが開かれるので、ここに appsettings.json と同じように書くだけです。

ユーザーシークレットの管理から開くと、自動的に project.json に userSecretsId が生成されて追加されます。設定はこの値をユニークキーとして管理されます。

設定といっても、実体はユーザープロフィール内に保存された json ファイルなので、各プラットフォーム以下のような場所に保存されるようになっています。applicationId というのは userSecretsId のことです。

  • Windows: %APPDATA%\microsoft\UserSecrets\\secrets.json
  • Linux: ~/.microsoft/usersecrets/\secrets.json
  • Mac: ~/.microsoft/usersecrets/\secrets.json
Home · dotnet/aspnetcore Wiki · GitHub

実際に接続文字列を保存して、読み込めるか試してみました。丁度 Azure Storage を使っていたので、この接続文字列をユーザーシークレットに保存して使えるようにします。

ユーザーシークレットの管理から開いた json ファイルに、接続文字列を追加します。

ASP.NET Core 1.0 の設定ファイルには書き方というか、色々と仕組みが用意されているみたいなので、時間があるときに調べてみたいです。

設定自体はこれで完了ですが、このままだと ConfigurationBuilder で読み込まれていないので、Startup クラスに少しだけコードを追加する必要があります。

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

    if (env.IsDevelopment())
    {
        builder.AddUserSecrets();
    }

    builder.AddEnvironmentVariables();

    Configuration = builder.Build();
}

開発環境の時のみ AddUserSecrets メソッドを呼び出して、ユーザーシークレットに保存したファイルを読み込むようにします。メソッドチェーンで書けないのが少しアレですが。

これで実行すると、ユーザーシークレットに保存した接続文字列が使われます。