Skip to content
ブログに戻る
チュートリアル

TOML vs JSON vs YAML:設定ファイル形式はどれを選ぶ?

TOML・JSON・YAML の設定ファイル形式を比較。コメント、データ型、日付、ネスト、実際の落とし穴を整理し、明確な選択マトリクスと相互変換のヒントを紹介します。

13 分で読める

TOML vs JSON vs YAML:設定ファイル形式はどれを選ぶ?

TOML vs JSON vs YAML の要点を先にまとめる。JSON はあらゆる言語がパースできる、機械間データ交換のデフォルトだ。YAML は Kubernetes や CI パイプラインを動かす、人間にやさしい形式。そして TOML は Cargo.tomlpyproject.toml のような、ツールやアプリケーションの設定のために作られた、明示的で型付きの形式だ。どこでも通用する唯一の形式は存在しない。適切な設定ファイル形式は次の三点で決まる。誰が編集するのか、コメントが必要か、そして型をどこまで厳格にしなければならないか、だ。

簡単な目安を示そう。機械が書き、機械が読むなら JSON を選ぶ。人間が毎日、深くネストしたインフラを手で編集するなら、YAML はその複雑さに見合う価値がある。ミスしにくい、明快で型付きの設定が欲しいなら、TOML が最も安全な選択だ。これらの形式は競合ではない。それぞれ別のレーンを走っている。機械向けの JSON、DevOps 向けの YAML、ツール設定向けの TOML だ。この記事の残りでは、並べて見る具体例、実際にバグを生む違い、そして次のプロジェクトにそのまま当てはめられる決定マトリクスで、その主張を裏づけていく。

30 秒で分かる答え

時間が 30 秒しかないなら、設定ファイル形式の比較はこの表で足りる。

JSONYAMLTOML
コメント不可可(#可(#
データ型明示的・最小限暗黙的(形から推論)明示的・豊富
ネイティブな日付不可バージョン依存可(4 種類)
ネストの表現波かっこ {}インデント[section] ヘッダー
インデント依存なしあり(タブ禁止)なし
複数行文字列不可(\n のみ)可(|>可("""
末尾カンマ禁止該当なし配列内では許可
JSON のスーパーセットはい(1.2)いいえ
最適な用途API、データ交換K8s、CI、AnsibleRust/Python のツール設定

この表から、一行でまとめられる結論が三つ導ける。

  • JSON を選ぶのは、ファイルをプログラムが生成し消費するとき。API のペイロード、package.jsontsconfig.json、システム境界をまたぐものすべてだ。
  • YAML を選ぶのは、人間が深くネストした設定を手で編集し、エコシステムがすでにそれを前提としているとき。Kubernetes のマニフェスト、GitHub Actions、Docker Compose、Ansible の playbook などだ。
  • TOML を選ぶのは、ツールやアプリケーション向けに明快で型付きの設定が欲しいとき。おおむねフラットでセクションがいくつかあり、習熟度の異なる貢献者が編集するような設定だ。Cargo.tomlpyproject.toml、Hugo、Netlify などがそうだ。

これらの結論がなぜ成り立つのか、その理由の中にこそ本物のバグが潜んでいる。

同じ設定を三つの書き方で

違いを最も手っ取り早く説明するのは、一つの設定を三通りに書いてみることだ。ここに小さなサービス設定を用意した。名前とバージョン、いくつかのトップレベルのフラグ、機能のリスト、そしてネストしたデータベースブロックだ。

JSON:

{
  "name": "acme-api",
  "version": "2.4.0",
  "debug": false,
  "released": "2026-07-02",
  "features": ["auth", "metrics", "tracing"],
  "database": {
    "host": "db.internal",
    "port": 5432,
    "max_connections": 100
  }
}

YAML:

name: acme-api
version: "2.4.0"
debug: false
released: "2026-07-02"
features:
  - auth
  - metrics
  - tracing
database:
  host: db.internal
  port: 5432
  max_connections: 100

TOML:

name = "acme-api"
version = "2.4.0"
debug = false
released = "2026-07-02"
features = ["auth", "metrics", "tracing"]

[database]
host = "db.internal"
port = 5432
max_connections = 100

三つとも同一のデータを表している。目が引っかかる場所がいくつかある。JSON は最も記号が多い。すべてのキーは二重引用符で囲まれ、階層ごとに波かっこが増え、末尾カンマが一つ紛れ込むだけで構文エラーになる。YAML はそのほとんどを取り払う。構造はインデントだけから生まれ、タブが忍び込むまでは美しく読める。TOML はその中間に位置する。引用符は文字列にだけ付き、key = value の組を並べ、[database] ヘッダーが昔の INI ファイルのようにネストしたブロックに名前を与える。released フィールドが三つとも引用符付きの文字列になっているのが分かる。おかげでここではデータが同一に保たれている。これは意図的だ。というのも、日付こそが、これらの形式が一致しなくなるまさにその地点だからだ。

JSON — 機械間データ交換のデフォルト

JSON は何も考えずに手を伸ばす形式であり、たいていその直感は正しい。主要な言語はすべてパーサーを備え、あらゆる HTTP API はこれを話し、その文法は頭の中に収まるほど小さい。厳格であいまいさがない。文字列は文字列、5432 は数値、true はブール値であり、それぞれの書き方はちょうど一通りしかない。この厳格さこそが、一度も出会ったことのないシステム同士で JSON を安全に送れる理由だ。Node のサービスが Go のサービスに JSON を POST するとき、両者はその意味をバイト単位で一致させられる。

その同じ厳格さゆえに、JSON は自分の本拠地で圧倒的だ。package.jsontsconfig.jsoncomposer.json が JSON なのは、ツールが絶えずそれらを生成し書き換えるからであり、機械が書く設定には機械にとって厳格な形式が向いている。API のペイロードやメッセージキューについては、ほかを選ぶ理由がそもそもない。

JSON の弱点は、人間が手で編集しなければならなくなった瞬間にすべて表面化する。コメントがない。末尾カンマがないので、リストの並べ替えはカンマの修正を伴う。複数行文字列がなく、あるのは \n エスケープだけだ。すべてのキーに二重引用符が要る。そして日付型がないので、2026-07-02 は引用符付きの文字列として存在し、慣習に従ってパースするしかない。人が保守する設定ファイルにとって、こうした欠落は積み重なって摩擦になる。

「JSON にコメントがない」問題

JSON に最も多く要望される機能は、Douglas Crockford が意図的に外したもの、すなわちコメントだ。彼の理屈はこうだ。コメントは、人々が設定ファイルにパース用のディレクティブをこっそり紛れ込ませることを誘い、相互運用性を壊す、と。その判断をどう思うにせよ、素の JSON 設定には注釈を付けられず、これは人間が保守するあらゆるものにとって苦痛だ。実際的な解決策はスーパーセットだ。JSON5 はコメント、末尾カンマ、引用符なしのキー、シングルクォートを加える。JSONC(JSON with Comments)はより軽量な派生で、VS Code が設定に使っている。どちらも JSON の形を保ちつつ、編集しやすくする。コメントが必要でも JSON ファミリーにとどまりたいなら、それぞれの使い分けとツールを機嫌よく保つ方法について、JSON5 と JSONC のフォーマットガイドを読んでほしい。

YAML — 人間にやさしい DevOps の標準

YAML はキーボードに向かう人間に最適化されている。コメントをサポートし、インデントベースのレイアウトによって深くネストした構造をすっきり保ち、アンカーを使えばブロックを一度定義してコピー&ペーストの代わりにエイリアスで再利用できる。

defaults: &defaults
  timeout: 30
  retries: 3

staging:
  <<: *defaults
  host: staging.internal

production:
  <<: *defaults
  host: prod.internal

&defaults アンカーがブロックに名前を与え、<<: *defaults がそれを両方の環境にマージするので、共有された timeout の変更は一箇所で済む。JSON にも TOML にも、これに相当するものはない。この読みやすさこそ、YAML が運用の共通語になった理由だ。Kubernetes のマニフェスト、GitHub Actions のワークフロー、Docker Compose のファイル、Ansible の playbook は、どれも YAML だ。設定が五階層の深さで、人間が毎日それを微調整するとき、YAML の記号の少なさは本物の救いになる。

その代償は複雑さと予期せぬ挙動だ。YAML 1.2 の仕様は大きく、完全準拠はまれなので、パーサーごとに端の方で食い違う。インデントには意味があり、タブは完全に禁止され、ずれた空白一つが意味を変えたり、パースに失敗させたりする。最も鋭い刃は暗黙の型付けだ。YAML は引用符なしのスカラーの型をその形から推測するが、あだ名が付くほど頻繁に推測を誤る。

一段落で分かる Norway 問題

YAML に country: NO と書くと、多くのパーサーは文字列 "NO" ではなくブール値 false を返してくる。というのも、ほとんどの Kubernetes ツールが今なお従っている YAML 1.1 が、NOYESONOFFYN をブール値として扱うからだ。ノルウェーの国コードは、エラーもなく静かに false になる。同じ暗黙の型付けは、0755 を八進数に、1.201.2 に変えてしまう。解決策は退屈だが信頼できる。何か別のものと取り違えられそうな文字列は引用符で囲むことだ。この落とし穴は、実際の障害や YAML 1.1 対 1.2 の経緯を含めて、それ自体で詳しく掘り下げる価値があるほど有名だ。YAML Norway 問題のガイドで扱っている。この記事にとっての教訓は単純だ。YAML の便利さと危険さは、同じ機能から来ている。

YAML が勝つのは、人々が深くネストした設定を毎日編集し、周囲のエコシステムがすでにそれを要求しているときだ。Helm チャートを書いているなら、あなたは YAML を書いており、それでいい。

TOML — ツールのために作られた明示的な設定

TOML(Tom’s Obvious, Minimal Language、Tom Preston-Werner が作った)は、YAML ユーザーがこうあってほしいと願った設定形式になるよう設計された。読みやすく、それでいて推測がない、というものだ。その決定的な特徴は明示性にある。型にあいまいさがなく、port = 5432 は常に整数、name = "acme" は常に文字列であり、つまずくような形ベースの推論はない。TOML 構文は [section] ヘッダーを INI ファイルから借りており、これによって設定のトップレベルがひと目で追える。またインデント依存ではないので、空白が意味を変えることは決してない。TOML 1.0.0 の仕様は小さく安定しており、これは一つの美点だ。覚え違いする余地が少ない。

TOML の目玉となる機能は、ネイティブな日付・時刻型だ。これは JSON も素の YAML もきれいには扱えない。TOML には四種類ある。タイムゾーン付きのオフセット日時(1979-05-27T07:32:00Z)、タイムゾーンなしのローカル日時、ローカル日付(1979-05-27、暦日そのもの)、そしてローカル時刻(07:32:00)だ。つまり、デプロイ日付は、再パースが必要な文字列ではなく、本物の日付のまま保たれる。

TOML 構文の三つの要素が、仕事のほとんどをこなす。[section] ヘッダーはテーブルを開く。[tool.ruff] のようなドット付きヘッダーは、余分なインデントなしに一つのテーブルを別のテーブルの中にネストする。そしてインラインテーブル { version = "1.0", features = ["derive"] } は、小さなオブジェクトを一行に詰め込む。繰り返されるセクションには二重のヘッダー、すなわちテーブルの配列を使う。

[[servers]]
name = "alpha"
ip = "10.0.0.1"

[[servers]]
name = "beta"
ip = "10.0.0.2"

このブロックは、キー servers の下に二つのオブジェクトを持つ JSON 配列になる。フラットなリストとして読みやすく、それこそがたいていのツール設定に必要なものだ。

弱点は本物だが範囲は狭い。TOML には null 型がないので、値が存在しないことは、単にキーを省くことで表す。深いネストは冗長になる。繰り返されるネスト構造の各階層が、完全な [[path]] ヘッダーを繰り返すからで、YAML の同等物よりも騒がしくなる。そして TOML は JSON や YAML より若く、普及度も低いので、あらゆるツールがこれを話すわけではない。TOML が生きるのは、おおむねフラットで、ラベル付きのセクションがいくつかある設定であり、それはツール設定の圧倒的多数に当てはまる。

なぜ Rust と Python は TOML なのか?

TOML の台頭は、これを標準として採用した二つのエコシステムをたどる。Rust のパッケージマネージャー Cargo は、すべてのクレートで Cargo.toml を使うので、Rust 開発者は誰もが初日から TOML を読み書きする。Python がこれに続いた。PEP 518 がビルド要件を宣言するために pyproject.toml を導入し、PEP 621 が同じファイルの中でプロジェクトのメタデータ(名前、バージョン、依存関係、そして [tool.*] セクション)を標準化して、散在していた setup.pysetup.cfg、ツールごとの設定を置き換えた。この二つを越えて、Hugo、Netlify、Poetry、Foundry も、すべてデフォルトが TOML だ。共通するのは、貢献者が手で編集するツール設定であり、賢いことよりも明白であることから恩恵を受ける、という点だ。

直接対決 — 実際に噛みついてくる違い

機能比較の表はきれいにまとまる。バグはそうはいかない。ここに挙げるのは、実際に問題を引き起こす具体的な違いであり、それぞれに、どんなパーサーにも通せる小さな例を添える。

コメント

JSON にはコメント構文がまったくない。TOML と YAML はどちらも # を使って行末まででコメントにする。

# TOML: 先頭コメント
port = 5432  # 行末コメント
# YAML: まったく同じコメントスタイル
port: 5432   # 行末コメント

厳格な JSON に //# を貼り付けた瞬間、パースは失敗する。これは見た目だけの話ではない。コメントなしで人が保守する設定には、誰かの頭の中だけに存在する暗黙知が積み上がっていく。

データ型と日付

JSON の型は明示的だが乏しく、日付型がない。TOML の型は明示的で豊富だ。YAML の型は暗黙的で、上で述べたとおり、ときどき間違う。日付は最もはっきりした分かれ目だ。TOML は四種類すべてをネイティブに表現する。

odt = 1979-05-27T07:32:00Z   # オフセット日時(タイムゾーンあり)
ldt = 1979-05-27T07:32:00    # ローカル日時(タイムゾーンなし)
ld  = 1979-05-27             # ローカル日付(暦日)
lt  = 07:32:00               # ローカル時刻

その TOML を JSON に変換すると、各値は意味を保った文字列になる。ローカル日付は、偽りの真夜中タイムスタンプに水増しされることなく、"1979-05-27" のまま保たれる。私たちの TOML → JSON 変換ツールは、その日付の種類を正確に保つ。多くの素朴な変換ツールはここを間違える。一方 YAML は、パーサーとスキーマのバージョン次第で 1979-05-27 を日付として扱うこともあれば扱わないこともあり、それはまさに本番の設定では避けたいあいまいさだ。

ネストの深さ

設定のネストが深くなるほど、形式は食い違っていく。小さな Docker Compose 風のツリーを取り上げよう。

services:
  web:
    build:
      context: .
      args:
        NODE_ENV: production
    ports:
      - "8080:8080"

YAML は深さを純粋なインデントで表現し、コンパクトなままだ。同じ構造を TOML で書くと、各ヘッダーで完全なパスを書き出し、スカラー値を子テーブルより前に移すことを強いられる。

[services.web]
ports = ["8080:8080"]

[services.web.build]
context = "."

[services.web.build.args]
NODE_ENV = "production"

JSON はツリーをネストした波かっこで運ぶ。あいまいさはないが記号が多い。浅い設定では三つとも似た感覚だが、三、四階層を越えると、YAML は目に見えて簡潔になり、TOML は目に見えて繰り返しが増える。このたった一つの違いが、Kubernetes が YAML を選び、Cargo が TOML を選んだ理由を説明している。

インデント依存

空白を気にするのは YAML だけだ。JSON と TOML では、好きなようにインデントしても、まったくしなくても、意味は同じだ。YAML では、インデントが構造そのものであり、タブは不正なので、タブを挿入するエディタや、間違った深さに貼り付けられたブロックが、ドキュメントを静かに変えてしまうか、読み込みを拒否する。リスト項目が一つ多く空白でインデントされると、エラーもなく間違った親キーにくっついてしまうことがあり、これは目で見つけるにはいらだたしいバグだ。ファイルは相変わらずまともに見えるからだ。貢献者がまちまちのエディタや設定を使っているなら、それは YAML が課し、ほかの二つは課さない恒常的な税であり、大きな YAML 設定なら CI でリンターを走らせる強い理由になる。

複数行文字列

JSON は文字列の中にリテラルの改行を保持できず、\n としてエスケープする。YAML と TOML はどちらも本物の複数行文字列を持つ。

{ "note": "line one\nline two" }
note: |
  line one
  line two
note = """
line one
line two
"""

YAML の | は改行を保つ(> ブロックは代わりに改行を空白に折りたたむ)。TOML の """ も同様に振る舞い、開きの引用符の直後に続く改行を取り除く。埋め込みスクリプト、SQL、ヘルプテキストにとっては、これだけで形式が決まることもある。

末尾カンマと厳格さ

JSON は三つの中で最も厳格だ。配列の最後の要素の後ろの末尾カンマは構文エラーになる。

# 有効な TOML — 末尾のカンマは問題ない
ports = [
  8001,
  8002,
]

JSON で 8002 の後ろに同じ末尾カンマを置くとパースに失敗する。だからこそ、JSON の配列に一行足すことが、しばしばその上の行のカンマを直すことも意味する。TOML は末尾カンマを許し、YAML の一行一ダッシュのリスト構文はこの問題をまるごと回避する。厳格さは、機械間交換にとっては美徳、手編集にとっては煩わしさであり、これは同じトレードオフを反対側から見たものだ。これはまた、JSON5 と JSONC が JSON に限って取り除こうとした摩擦でもある。

大きな整数と 2^53 の天井

三つの形式はどれも、64 ビット整数をテキストとして書くことはできる。問題が始まるのは、その値が JavaScript を通過するときだ。ブラウザの JSON 数値は IEEE-754 の倍精度浮動小数点であり、整数を正確に表せるのは 2^53 − 1(9007199254740991)までだからだ。Snowflake ID やナノ秒タイムスタンプはそれより大きいので、JS ベースのツールを往復すると、値は丸められて壊れる。

snowflake = 1420070400000000000   # TOML テキストでは正確
{ "snowflake": "1420070400000000000" }

どの形式でも信頼できる解決策は、そうした値を引用符付きの文字列として保存し、数値パーサーがそれに一切触れないようにすることだ。これはどれか一つの形式の欠陥ではない。変換を行うランタイムの制約だ。私たちの変換ツールは、整数がその一線を越えるとき、静かに壊すのではなく警告する。

選び方 — 決定マトリクスとフローチャート

実際にどの設定形式を使うか決めるときは、質問を順にたどり、最初のはっきりした「はい」で止まればいい。

  1. そのファイルは主にプログラムが書き読みするか、あるいはエコシステムがすでに形式を義務づけているか。 はいなら JSON を使う。API のペイロードは JSON だ。package.json の隣にあるファイルは JSON だ。ツールに逆らってはいけない。
  2. 人間が、それを前提とするスタック(Kubernetes、CI、Ansible)の中で、深くネストした設定を毎日手で編集するか。 はいなら YAML を使い、Norway 問題をかわすために引用符付けの慣習を採り入れる。
  3. それはツールやアプリケーションの設定で、おおむねフラットでセクションがいくつかあり、習熟度の異なる貢献者が編集し、簡潔さよりも型付きで明白であることが勝るか。 はいなら TOML を使う。

二つの答えが並んだら、この軸マップで決着をつけよう。

要件最適理由
ファイル内のコメントTOML または YAMLJSON にはない
ネイティブな日付/時刻の値TOML四つの明示的な日付型
非常に深いネストYAMLインデントがコンパクトなまま
空白による予期せぬ挙動ゼロJSON または TOMLインデント依存ではない
エコシステムのファイルに縛られているJSONpackage.jsontsconfig.json
人間が編集、セクションは少数TOML明示的な型、INI に似たヘッダー
機械間の交換JSON普遍的、厳格、高速
型推論に決して推測させたくないJSON または TOMLYAML は暗黙的に推論する

ほとんどのプロジェクトは、結局二つ以上を使うことになる。あるリポジトリには、手では決して触らない JSON の package.json、Python ツール用の TOML の pyproject.toml.github の中の YAML ワークフロー、そしてこれらの文法のどれにも従わないローカルシークレット用の .env ファイルがあるかもしれない。その混在は普通のことであり、それこそが要点だ。各ファイルは、その編集者に合った形式の中で生きる。.env の層があなたの構成の一部なら、私たちの .env ファイル形式ガイドが、それが JSON 設定と並んでどこに収まるか、そして両者をどう変換するかを扱っている。

TOML、JSON、YAML の相互変換

これらの形式の間で変換することは、思っているよりも頻繁に起こる。CI のジョブが手書きの pyproject.toml を読み、依存関係ダッシュボードに渡すために JSON として必要とする。移行では、より厳格な型付けのためにアプリを YAML 設定から TOML へ移す。コードレビューは、空白に敏感な元のファイルよりも、二つのファイルの JSON 形式を diff したほうが楽だ。それぞれの方向に、貼り付ける前に知っておく価値のある落とし穴がある。

TOML から JSON へ。 主なリスクは日付だ。1979-05-27 のようなローカル日付は暦日のまま保たれるべきで、時刻とタイムゾーンをでっち上げた真夜中の UTC タイムスタンプになってはならない。コメントも失われる。JSON はそれを保持できないからだ。TOML → JSON 変換ツールは各日付の種類を忠実に保つので、往復してもロスレスなままだ。

JSON から TOML へ。 TOML は構造についてより厳格なので、二つのことが変換をはばむことがある。トップレベルはオブジェクトでなければならない。TOML ドキュメントは常にそのルートがテーブルだからで、むき出しの配列やスカラーには行き場がない。そして TOML には null がないので、null のオブジェクト値は取り除かれ(どのキーかを列挙する警告付きで)、配列内の null に至っては有効な TOML 表現がまったくない。JSON → TOML 変換ツールは、壊れた出力を生む代わりに、両方のケースを明示的に表に出す。

JSON と YAML、両方向。 ここで注意すべきは Norway 問題だ。引用符なしの NO0755 は、境界を越えるときに型が変わりうる。JSON → YAML 変換ツールYAML → JSON 変換ツールは引用符付けを処理するので、文字列は文字列のまま保たれる。

どんな変換の後でも、結果を検証する価値がある。出力を JSON フォーマッターに通せば、コミットしたり下流に送ったりする前に、JSON が整った形式で一貫してインデントされていることを確認できる。そして設定ファイルはシークレット(レジストリトークン、データベース認証情報、デプロイキー)を運ぶので、これらはすべて完全にあなたのブラウザ内で動く。何もアップロードされないので、プライベートレジストリのトークンを含む Cargo.toml や認証情報を含む values ファイルが、あなたのマシンから出ることは決してない。

FAQ

TOML は YAML より優れているのか?

どちらが普遍的に優れているということはない。TOML と YAML の選択は、結局のところ形で決まる。TOML は明示的な型とインデントの罠がないおかげで間違えにくく、だからおおむねフラットなツール設定では勝つ。YAML は深いネストをよりコンパクトに表現するので、Kubernetes のような大規模で層の多いインフラでは勝つ。

設定ファイルには JSON と YAML のどちらを使うべきか?

人間が編集する設定なら YAML を選ぶ。コメントを許し、すっきり読めるが、JSON はそうではない。プログラムが生成し消費する設定なら JSON を選ぶ。厳格で、高速で、普遍的だ。分かれ目は、編集するのが誰か、人間か機械か、だ。

JSON はなぜコメントを許さないのか?

JSON の作者 Douglas Crockford は、意図的にコメントを取り除いた。人々がコメントにパース用のディレクティブを埋め込み、パーサー間の相互運用性を壊すことを心配したのだ。JSON の形をしたファイルにコメントが必要なら、JSON5 か JSONC を使えばいい。中核の構造を変えることなく、コメントを取り戻せる。

YAML の Norway 問題とは何か?

YAML 1.1 が特定の引用符なしの語をブール値として扱うことだ。そのため country: NO は文字列 "NO" ではなく false になる。YESONOFF も同じように振る舞う。値を引用符で囲めば防げる。全容は上でリンクした専用のガイドを参照してほしい。

TOML はコメントをサポートしているか?

サポートしている。TOML はコメントに # を使い、独立した行でも値の後ろでも、YAML とまったく同じように使える。ただし、TOML を JSON に変換するとコメントは失われる点に注意してほしい。JSON にはコメントを保持する構文がないからだ。

TOML は JSON が表せるものすべてを表現できるか?

ほぼできる。JSON と TOML の差は小さいが実在する。TOML には null 型がないので、JSON の null は変換時に取り除かれるか拒否される。また TOML ドキュメントはトップレベルがテーブルでなければならないので、むき出しの JSON 配列やスカラーは、まずキーの下に包まれない限り変換できない。

YAML は JSON のスーパーセットか?

YAML 1.2 以降はそのとおりだ。有効な JSON ドキュメントはどれも有効な YAML でもあるので、YAML パーサーは JSON を直接読める。これは便利な事実だが、セキュリティ境界として頼ってはいけない。YAML パーサーは JSON にはない機能(アンカーなど)を加えるからだ。

最もパースが速い設定形式はどれか?

一般的に JSON が最も速く、あらゆる言語に最も成熟して最適化されたパーサーがある。YAML は、大きな仕様と暗黙の型付けのために、パースが最も遅く複雑だ。TOML はその中間に位置し、速度は YAML よりも JSON に近い。

タグ: toml json yaml configuration data-conversion