tech.guitarrapc.cóm

Technical updates

非ASP.NET Coreなプロジェクトで UserSecretsを使うためのVisual Studio 拡張を作りました

非ASP.NET Core、特にGeneric Hostで開発するなら必要になるVS拡張を公開していたのを忘れていました。*1

今回は、GenericHostなど非ASP.NET Coreなプロジェクトでも、ASP.NET CoreなプロジェクトにあるManage UserSecrets (ユーザーシークレットの管理) と同様の手助けをするVisual Studio拡張 Open UserSecrets を作った話です。

OpenUserSecrets

TL;DR

Open UserSecrets拡張をいれることで、UserSecretsを開くためのメニューが非ASP.NET Coreプロジェクトでも表示されます。

Open UserSecrets

appsettings.Development.jsonにはCD先の開発環境を設定しておいて、ローカル開発環境はUserSecretsで実行時にコンフィグ上書きするのが楽になるのでぜひどうぞ。

OpenUserSecrets

身近そうな例として、MicroBatchFramework(現: ConsoleAppFramework)のConfigを利用した例は、Open UserSecretsを使うとローカルテストが圧倒的に楽になります。

むしろ、これなしでUserSecrets使うのつらすぎませんか?

UserSecrets とは

ASP.NET Coreを開発していて、開発環境とローカル開発でコンフィグを分けたい時に使うのがUserSecretsです。

ASP.NET Core での開発におけるアプリ シークレットの安全な保存

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 (ユーザーシークレットの管理) がコンテキストメニューに表示されます。

ASP.NET Core なプロジェクトを右クリックすると UserSecrets を管理するためのメニューが追加されている

これを選択するだけで、自動的にsecrets.jsonが開かれます。

secrets.json をVSで編集できるようになる

非ASP.NET Core なプロジェクトでUserSecretsを利用する難しさ

UserSecretsは何もASP.NET Coreなプロジェクト専用の機能ではありません。

.NET Frameworkでも .NET CoreでもMicrosoft.Extensions.Configuration.UserSecrets nugetをプロジェクトに追加することで利用できるようになります。

www.nuget.org

ただしNuGetをいれても素のVisual Studioのままでは、次の方法で管理することになります。

Enable secret storage

dotnet user-secrets を使った管理

  1. Enable secret storageに従い、csprojのPropertyGroupの中に、UserSecretsId要素でGUIDを指定して保存
  2. .csprojのあるパスでdotnet user-secrets set KEY VALUEコマンドを使って%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.jsonを作成
  3. 以降もdotnet user-secretsで管理

手で管理

  1. Enable secret storageに従い、csprojのPropertyGroupの中に、UserSecretsId要素でGUIDを指定して保存
  2. %APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.jsonを作成
  3. 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を検索してください。

Visual Studio拡張でOpen UserSecretsを検索

ダウンロードしたらVSを再起動します

拡張ダイアログがでるのでインストールします

インストール完了

ではConsole Appで利用してみましょう。

サンプルプロジェクトをリポジトリに用意してあります。

github.com

適当な .NET Core Consoleプロジェクトに、Microsoft.Extensions.Configuration.UserSecrets Nugetを入れます。(これでUserSecretsが利用できるようになります)

あとはプロジェクトを右クリックしてOpen UserSecretsを選ぶだけです。

Open UserSecrets を選ぶ

Manage UserSecretsと同様にsecrets.jsonがVisual Studioで開くので好きに編集してください。

自動的に secrets.json がVisual Studio で開く

まとめ

みなさんが幸せになりますように願っています。ASP.NET Coreチームでも .NET Coreチームでもいいから早くVisual Studio拡張を用意してほしいです。

github.com

*1:公開して3カ月がたっていました。スターで気づいた