【.NET】設定ファイル(例 appsettings.json)にコメント書けるってよ

# はじめに
.NET Framework で作成した自社製ライブラリーを、.NET 7 に移植することにした。
.NET Framework では設定ファイルは、App.config (XML 形式)を使用していたが、.NET(旧名 .NET Core)からは、appsettings.json(JSON 形式)が推奨されている。

JSON になることで気になったのは、JSON ってコメントが書けたっけ？

https://qiita.com/yokra9/items/1ac03876415d7fd47a65

そういえば、Visual Studio Code の設定ファイル(settings.json)は、コメント使えますもんね。

# 調査
公式にコメントをサポートしていることが分かった。

https://github.com/dotnet/AspNetCore.Docs/issues/26254


>appsettings.json のコメント
appsettings.json および appsettings.{Environment}.json ファイル内のコメントは、JavaScript または C# スタイルのコメントを使用した場合にサポートされています。

https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0#comments-in-appsettingsjson

# 確認
下記の App.config を JSON に変更する。

```xml:App.config
<?xml version="1.0" encoding="utf-8"?>
<DBInfo>
    <!-- DBサーバー -->
    <DataSource>localhost</DataSource>

    <!-- データベース名 -->
    <Database>test</Database>

    <!-- ユーザー -->
    <DBUserID>admin</DBUserID>

    <!-- パスワード -->
    <DBPassword>P@ssw0rd</DBPassword>
</DBInfo>
```

## パターン１
コメント付きにした JSON ファイルを作成する。
コメントは設定行の上側に設置、`/* */` と `//` でコメントを記述してみました。
コードのシンタックスハイライトには、`jsonc` で指定してみた。

```jsonc:appsettings.json
{
  /* -----------------------------
    データベース接続情報 
   -----------------------------*/
  "dbInfo": {
    // DBサーバー
    "server": "localhost",
    // データベース名
    "dbName": "test",
    // ユーザー
    "user": "admin",
    // パスワード
    "password": "P@ssw0rd"
  }
}
```

### プログラム1
※設定ファイル名は`appsetting.json`にしていますが、 違うファイル名でも問題ありません。

```cs
using Microsoft.Extensions.Configuration;

class Program
{
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(path: "appsettings.json");
        var configuration = builder.Build();

        IConfigurationSection section = configuration.GetSection("dbInfo");
        string? str = section["server"];
        Console.WriteLine(str);
        str = section["dbName"];
        Console.WriteLine(str);
        str = section["user"];
        Console.WriteLine(str);
        str = section["password"];
        Console.WriteLine(str);
        Console.ReadLine();
    }
}
```

### 結果1

```
localhost
test
admin
P@ssw0rd
```

## パターン２
コメントのパターンを設定行の上側か右側に設置、`/* */` と `//` でコメントを記述してみました。

```jsonc:appsettings.json
{
  /* -----------------------------
    データベース接続情報 
   -----------------------------*/
  "dbInfo": {
    /* DBサーバー */
    "server": "localhost",
    // データベース名
    "dbName": "test",
    "user": "admin",       /* ユーザー */
    "password": "P@ssw0rd" // パスワード
  }
}
```
### プログラム2

コメントには関係しないが、設定情報の取得方法をパターン1と変えてみました。

```cs
using Microsoft.Extensions.Configuration;

class Program
{
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(path: "appsettings.json");
        var configuration = builder.Build();

        string?　str = configuration["dbInfo:server"];
        Console.WriteLine(str);
        str = configuration["dbInfo:dbName"];
        Console.WriteLine(str);
        str = configuration["dbInfo:user"];
        Console.WriteLine(str);
        str = configuration["dbInfo:password"];
        Console.WriteLine(str);
        Console.ReadLine();
    }
}
```

### 結果2

```
localhost
test
admin
P@ssw0rd
```

# 最後に
.NETの設定ファイル(`appsetting.json`)のコメントについて検索してみたんですが、あまり言及している日本での記事が見当たらなかったので、書いてみました。

# 参照
* [.NET コンソールアプリケーション (.NET 5/6/7)で appsettings.json ファイルから設定情報を読み込む (C#プログラミング)](https://www.ipentec.com/document/csharp-dot-net-using-appsetting-json-in-console-application)
* [【.NET Core】ConfigurationBuilderを使ってC#で設定ファイルや環境変数を扱う](https://tech-blog.cloud-config.jp/2019-7-11-how-to-configuration-builder/)
* [jsonにコメントは書ける](https://blog.unikktle.com/json%E3%81%AB%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AF%E6%9B%B8%E3%81%91%E3%82%8B/)