JSON with Comments
JSONC(JSON with Comments)はJavaScriptスタイルのコメントを許可するように標準JSONを拡張したものです。多くの開発ツールがコメントで設定を文書化できるJSONCを設定ファイルに使用しています。このパーサーはコメントを除去して有効なJSONを生成し、データ構造を保持します。
仕様
よくあるユースケース
- TypeScript/JavaScriptプロジェクトのtsconfig.jsonとjsconfig.jsonの解析
- VS Codeのsettings.jsonと拡張機能設定の読み取り
- Cloudflareのwrangler.jsonc設定ファイルの処理
- ESLint、Prettier、その他のツール設定のインラインドキュメント付き編集
機能
- 単一行コメントの解析(// コメント)
- 複数行コメントの解析(/* コメント */)
- トレーリングカンマの処理(JSONCファイルで一般的)
- コメントを除去して有効なJSON出力を生成
- すべての標準JSON パーサー機能(ツリービュー、変換)
例
TypeScript設定
試してみる →コンパイラオプションを説明するコメント付きのtsconfig.jsonファイル。
{
// Compiler options for the project
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
/* Enable all strict type checking options */
"strict": true
}
}ヒント
- VS Code、TypeScript、および多くのモダンツールはJSONCをネイティブにサポートしています。
- 設定を共有する際、受信者のツールがコメントをサポートしているか確認してください。
- ツールが厳密なJSONを要求する場合、コメントを除去して標準JSONに変換してください。
解説 JSON with Comments
JSONC(JSON with Comments)はJavaScriptスタイルの単一行(//)および複数行(/* */)コメント、ならびに配列やオブジェクトの最後の要素の後のトレーリングカンマを許可する標準JSONの拡張です。公式な標準ではありませんが、JSONCはインラインドキュメントが保守性を向上させる開発者向け設定ファイルのデファクトフォーマットとなっています。
MicrosoftはVisual Studio Codeを通じてJSONCを普及させ、settings.json、keybindings.json、launch.json、extensions.jsonに使用しています。TypeScriptのtsconfig.jsonとJavaScriptのjsconfig.jsonはJSONCファイルであり、.json拡張子を使用する多くのESLint、Prettier、Babel設定ファイルも同様です。Cloudflareのwrangler.jsoncはコメントサポートを示すために明示的に.jsonc拡張子を使用しています。
プレーンJSONに対するJSONCの主な利点はドキュメントです。設定ファイルにはキー名だけでは目的が明らかでない設定が含まれることがよくあります。コメントにより、開発者は設定が存在する理由、有効な値、変更の影響を説明できます。トレーリングカンマは最後の要素が他のすべてと同じフォーマットを持つことを可能にし、新しい項目の追加がdiffで2行ではなく1行の変更として表示されるため、バージョン管理のノイズを減少させます。
内部的には、JSONCパーサーは結果を標準JSONパーサーに渡す前にコメントとトレーリングカンマを除去します。つまり、データモデルはJSONと同一です。コメントは人間のためのメタデータであり、プログラムのためのデータではありません。厳密なJSONコンプライアンスを要求するツール用にJSONCをJSONに変換する際、コメントは単に除去されます。VS Codeで使用されているMicrosoftのnode-jsonc-parserライブラリがJSONC解析のリファレンス実装です。
JSONCはRFCやECMA仕様で定義された公式標準ではありません。MicrosoftがVS CodeとTypeScriptを通じて普及させた慣例であり、動作はリファレンス実装として機能するjsonc-parserライブラリで明確に定義されています。JSONCをサポートする他のツール(ESLint、Prettier、各種エディタ)は、単一行コメント、複数行コメント、トレーリングカンマについて同じ慣例に従っています。一般的なJSONCファイルには、tsconfig.jsonとjsconfig.json(TypeScript/JavaScript)、VS Code設定ファイル(settings.json、launch.json、tasks.json、keybindings.json)、wrangler.jsonc(Cloudflare Workers)、devcontainer.json(VS Code Dev Containers)、その他のツール設定があります。開発者が主に編集するJSONファイルでコメントの恩恵を受けられるものは、おそらくJSONCをサポートしています。
JSONCは明示的なJSONCサポートを持つツールが読み取る設定ファイルにのみ使用すべきです。APIレスポンス、データストレージ、サービス間通信には常に標準JSONを使用してください。ほとんどのJSONパーサーはコメントを構文エラーとして拒否します。標準JSONパーサーでJSONC設定ファイルをプログラム的に処理するには、まずJSONC対応ライブラリを使用してコメントを除去してください。
JSONCはJSON5より保守的です。JSON5はJSONのより広範なスーパーセットです。JSONCがコメントとトレーリングカンマのみを追加するのに対し、JSON5はシングルクォート文字列、引用なしのオブジェクトキー、16進数、先頭と末尾の小数点、InfinityとNaN、複数行文字列も許可します。JSONCは開発者エコシステムでより広いツールサポートを持ちますが、JSON5はBabelのbabel.config.json5のような特定の設定ファイルで使用されますが、全体的な採用はより狭いです。