拡張子が同じ .json でも、コメントを書けるファイルと書けないファイルがあります。このページでは、tsconfig.json・package.json・wrangler.jsonc を比べて、その違いが何で決まるかを確かめます。

tsconfig.json は通る

tsconfig.json に、行コメント・ブロックコメント・末尾カンマを入れて、tsc --showConfig に読ませます。

{
  // コメント
  "compilerOptions": {
    /* block */
    "noEmit": true,
    "strict": true,
  },
  "files": ["./a.ts"]
}

拡張子は .json のままなのに、エラーになりません。ただし、これは「tsc が受け付けた」という実測です。TypeScript の公式文書のうち、tsconfig.json の handbook のページでは、コメントを書けるという記述を見つけられませんでした。仕様として保証されているのかは、確認できていません。

package.json は通らない

package.json の先頭に、同じように行コメントを入れます。

{
  // コメント
  "name": "x",
  "version": "1.0.0"
}

npm と pnpm は、Volta(Node.js のバージョン管理ツール)の入口を通さず、実体を直接動かしました。Node.js 自身も、require で読ませました。

npm・pnpm・Node.js の 3 つとも、package.json のコメントを受け付けませんでした。npm は「package.json は本物の JSON でなければならない」という趣旨の案内も出しています(この出力の 4 行目)。

Volta の入口(npm コマンドの手前で動く仕組み)を通すと、npm に届く前に Volta error: Could not parse project manifest で止まります。エラーを出しているのは Volta の側です。

違いを決めているのは読む側

3 つの結果を並べます。

ファイル 読む側 コメント
tsconfig.json tsc 通った
package.json npm・pnpm・Node.js・Volta 通らなかった
wrangler.jsonc wrangler このリポジトリで実際にコメントを書いている

wrangler.jsonc は、拡張子が .jsonc です。このリポジトリの website/wrangler.jsonc には、// のコメントが何行も入っています。

VS Code にも、同じ考え方の仕組みがあります。VS Code は「JSON with Comments」というモードを持ち、settings.json などの設定ファイルをこのモードで扱います。

When in the JSON with Comments mode, you can use single line (//) as well as block comments (/* */) as used in JavaScript.

出典: https://code.visualstudio.com/docs/languages/json(取得日: 2026-09-22)

ファイルの中身は、どれも「JSON のように見えるテキスト」です。コメントを許すかどうかは、ファイルの拡張子ではなく、そのファイルを読むプログラム(パーサー)が、標準の JSON か、コメントを足した派生かで決まっています。

package.json については、npm・pnpm・Node.js のいずれも標準の JSON として読むので、書けません。「package.json は書けない」というより、「package.json を読む道具が、標準の JSON としてしか読まない」と言うほうが正確です。