非ASP.NET Core、特にGeneric Hostで開発するなら必要になるVS拡張を公開していたのを忘れていました。*1
今回は、GenericHostなど非ASP.NET Coreなプロジェクトでも、ASP.NET CoreなプロジェクトにあるManage UserSecrets
(ユーザーシークレットの管理) と同様の手助けをするVisual Studio拡張 Open UserSecrets を作った話です。
- TL;DR
- UserSecrets とは
- ASP.NET Core なプロジェクトではUserSecrets が空気のように利用できる
- 非ASP.NET Core なプロジェクトでUserSecretsを利用する難しさ
- Open UserSecrets の紹介
- まとめ
TL;DR
Open UserSecrets拡張をいれることで、UserSecretsを開くためのメニューが非ASP.NET Coreプロジェクトでも表示されます。
appsettings.Development.json
にはCD先の開発環境を設定しておいて、ローカル開発環境はUserSecretsで実行時にコンフィグ上書きするのが楽になるのでぜひどうぞ。
身近そうな例として、MicroBatchFramework(現: ConsoleAppFramework)のConfigを利用した例は、Open UserSecretsを使うとローカルテストが圧倒的に楽になります。
むしろ、これなしでUserSecrets使うのつらすぎませんか?
UserSecrets とは
ASP.NET Coreを開発していて、開発環境とローカル開発でコンフィグを分けたい時に使うのがUserSecretsです。
UserSecretsを使うことで、secrets.json
を%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
に保持できます。
ASP.NET Core なプロジェクトではUserSecrets が空気のように利用できる
ASP.NET Coreではこれを管理するためのVisual Studioのメニュー拡張が自動的に追加され、Visual Studio 2017/2019でプロジェクト名を右クリックするとManage UserSecrets
(ユーザーシークレットの管理) がコンテキストメニューに表示されます。
これを選択するだけで、自動的にsecrets.jsonが開かれます。
非ASP.NET Core なプロジェクトでUserSecretsを利用する難しさ
UserSecretsは何もASP.NET Coreなプロジェクト専用の機能ではありません。
.NET Frameworkでも .NET CoreでもMicrosoft.Extensions.Configuration.UserSecrets
nugetをプロジェクトに追加することで利用できるようになります。
ただしNuGetをいれても素のVisual Studioのままでは、次の方法で管理することになります。
dotnet user-secrets を使った管理
- Enable secret storageに従い、csprojのPropertyGroupの中に、
UserSecretsId
要素でGUIDを指定して保存 - .csprojのあるパスで
dotnet user-secrets set KEY VALUE
コマンドを使って%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
を作成 - 以降も
dotnet user-secrets
で管理
手で管理
- Enable secret storageに従い、csprojのPropertyGroupの中に、
UserSecretsId
要素でGUIDを指定して保存 %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
を作成- secrets.jsonを開き編集
ASP.NET Coreとはずいぶんと異なるフローであることに気づきます。 ASP.NET Coreが提供するManage UserSecretsは、上記フローを1つのコマンドで実施し、Visual Studioからsecrets.jsonも開けるようになります。
Visual Studio Codeで開発しているなら、dotnet user-secretsでもいいのですが、Visual Studioでプロジェクトに関わるファイルを別のエディタをいちいち開くのは辛いでしょう。
Open UserSecrets の紹介
Open UserSecretsを作った動機はまさにこの難しさをASP.NET Coreのプロジェクトと同等まで簡単にすることです。
Visual Studio 2019 (VS2017も同様です)をOpen UserSecrestを使う流れを見てみましょう。とはいってもふつうのVisual Studio拡張と同じです。
Visual Studio > ExtensionsでOnlineからOpen UserSecretsを検索してください。
ではConsole Appで利用してみましょう。
サンプルプロジェクトをリポジトリに用意してあります。
適当な .NET Core Consoleプロジェクトに、Microsoft.Extensions.Configuration.UserSecrets
Nugetを入れます。(これでUserSecretsが利用できるようになります)
あとはプロジェクトを右クリックしてOpen UserSecretsを選ぶだけです。
Manage UserSecretsと同様にsecrets.json
がVisual Studioで開くので好きに編集してください。
まとめ
みなさんが幸せになりますように願っています。ASP.NET Coreチームでも .NET Coreチームでもいいから早くVisual Studio拡張を用意してほしいです。
*1:公開して3カ月がたっていました。スターで気づいた