プログラムではよく設定ファイルが欲しくなります。外部サービスへの接続情報をはじめとして実行環境に応じて値が変わるべき部分は多々あるため、それをプログラムに直接組み込まない形で変えやすいようにした方がデプロイや運用が楽になります。設定ファイルの形式は様々なものがあります。よくあるのは .env、json、yaml、xml、ini、設定を読み込む言語そのもの(PHPの設定ファイルならPHPの連想配列で設定を作る)あたりな印象です。それぞれ良し悪しがありますが自分がよく使おうとする形式はコメントを残せる形式です。設定は呼び出すためのキーと設定値の組み合わせですが、キーの名前や値だけではそれがどういう意図でなんのために設定されたのかわかりにくいです。ついでにネストした構造の設定を書けて呼び出しもしやすければいうことなしです。
C#の設定ファイル関連でよく使われているライブラリは Microsoft.Extensions.Configuration です。さらにこれの拡張機能でJSONファイルを設定ファイルとして扱えるようになる Microsoft.Extensions.Configuration.Json があります。
runtime/src/libraries/Microsoft.Extensions.Configuration at bbcbee5dc08af19757787c09e0f8db370b1bcaa4 · dotnet/runtime
[runtime/src/libraries/Microsoft.Extensions.Configuration.Json at bbcbee5dc08af19757787c09e0f8db370b1bcaa4 · dotnet/runtime](https://github.com/dotnet/runtime/tree/bbcbee5dc08af19757787c09e0f8db370b1bcaa4/src/libraries/Microsoft.Extensions.Configuration.Json)
Microsoft.Extensions.Configuration.Json はJSONを設定として扱えます。またここで読み込むJSONにはコメントを書くこともできます。VSCodeの設定ファイルのJSONに書くコメントやJavaScriptのオブジェクトに書くコメントと同じ感じです。これは例えば次の様に設定と読み込みができます。
// appsettings.json { // データベース接続設定 "Database": { "Host": "localhost", "Port": 3306, "User": "admin", "Password": "password" }, "Account": { "Profile": { // ログインに使う時の名前 "Name": "hamamatsu-tarou" } } }
using Microsoft.Extensions.Configuration; var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); var host = configuration.GetSection("Database")["Host"]; var host = configuration.GetSection("Database")["Host"]; var port = configuration.GetSection("Database")["Port"]; var user = configuration.GetSection("Database")["User"]; var password = configuration.GetSection("Database:Password").Value; var accountName = configuration.GetSection("Account:Profile:Name").Value;
このようにしてコメント付きのJSONファイルを用意し、それを設定ファイルとして読み込むことでプログラムが大いに扱いやすくなります。
ちなみにこのコメント付きJSONはJSONC(JSON with Comment)というらしいです。