これまでは開発環境用の接続情報など 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 のことです。
Home · dotnet/aspnetcore Wiki · GitHub
- Windows: %APPDATA%\microsoft\UserSecrets\
\secrets.json - Linux: ~/.microsoft/usersecrets/
\secrets.json - Mac: ~/.microsoft/usersecrets/
\secrets.json
実際に接続文字列を保存して、読み込めるか試してみました。丁度 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 メソッドを呼び出して、ユーザーシークレットに保存したファイルを読み込むようにします。メソッドチェーンで書けないのが少しアレですが。
これで実行すると、ユーザーシークレットに保存した接続文字列が使われます。