← ブログに戻る

JSON vs TOML: 設定フォーマット比較

設定ファイルのためのJSONとTOMLフォーマットを比較。主な違い、変換方法、プロジェクトに応じた各フォーマットの使い分けを学びます。

Big JSON Team7 分で読めますcomparison
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

7 分読む

JSON vs TOML 概要

JSONとTOMLはどちらも人気のあるデータフォーマットですが、TOML(Tom's Obvious Minimal Language)は人間の可読性を重視して設計ファイル専用に設計されています。

クイック比較

| 機能 | JSON | TOML |

|------|------|------|

| 構文 | 中括弧 | INI風 |

| コメント | なし | あり |

| 可読性 | 良好 | 優秀 |

| 拡張子 | .json | .toml |

| 解析速度 | 高速 | 中程度 |

| 採用 | 普遍的 | 成長中 |

構文例

JSON設定

{

"database": {

"server": "192.168.1.1",

"ports": [8001, 8002, 8003],

"connection_max": 5000,

"enabled": true

},

"servers": {

"alpha": {

"ip": "10.0.0.1",

"dc": "eqdc10"

},

"beta": {

"ip": "10.0.0.2",

"dc": "eqdc10"

}

}

}

TOML設定

# データベース設定

[database]

server = "192.168.1.1"

ports = [8001 8002, 8003]

connection_max = 5000

enabled = true

# サーバー設定

[servers.alpha]

ip = "10.0.0.1"

dc = "eqdc10"

[servers.beta]

ip = "10.0.0.2"

dc = "eqdc10"

主な違い

コメント

JSON: ネイティブコメントサポートなし
{

"_comment": "コメントの回避策を使用",

"setting": "value"

}

TOML: 完全なコメントサポート
# これは適切なコメントです

setting = "value" # インラインコメントも機能します

可読性

TOMLは視覚的な雑然さを排除:

  • キーに中括弧や引用符が不要
  • 明確なセクションヘッダー
  • 自然なテーブル構文
  • ネストされた構造に最適

データ型

両方がサポート:

  • 文字列、整数、浮動小数点、ブール
  • 配列
  • ネストされた構造

TOMLの追加機能:

  • 日付と時刻(ネイティブ)
  • インラインテーブル

# TOMLネイティブの日時

created = 2026-02-14T10:30:00Z

# インラインテーブル

point = { x = 1, y = 2 }

JSONを使用する場合

  • Web API - 業界標準
  • データ交換 - 普遍的なサポート
  • JavaScript - ネイティブ解析
  • パフォーマンス - 高速な解析
  • ツール - より多くの検証ツールとフォーマッター
  • TOMLを使用する場合

  • 設定ファイル - より読みやすい
  • Rustプロジェクト - Cargo.toml標準
  • Pythonパッケージング - pyproject.toml
  • 人間による編集 - メンテナンスが容易
  • コメントが必要 - 設定内のドキュメント
  • 変換例

    TOMLからJSON(Python)

    import json
    

    import tomli # Python 3.11+にはtomlibが組み込まれています

    with open('config.toml', 'rb') as f:

    data = tomli.load(f)

    with open('config.json', 'w') as f:

    json.dump(data, f, indent=2)

    JSONからTOML(Python)

    import json
    

    import tomli_w

    with open('config.json') as f:

    data = json.load(f)

    with open('config.toml', 'wb') as f:

    tomli_w.dump(data, f)

    一般的なユースケース

    JSONの強み

    {
    

    "api_response": {

    "status": 200,

    "data": [

    {"id": 1, "name": "Item 1"},

    {"id": 2, "name": "Item 2"}

    ]

    }

    }

    TOMLの強み

    # アプリケーション設定
    

    [app]

    name = "MyApp"

    version = "1.0.0"

    debug = false

    [app.database]

    url = "postgresql://localhost/mydb"

    pool_size = 10

    [app.logging]

    level = "info"

    file = "/var/log/myapp.log"

    よくある落とし穴

    TOMLテーブルの順序

    # 間違い - 配列の後に[fruit]に追加できません
    

    [fruit]

    name = "apple"

    [[fruit.varieties]] # テーブルの配列

    name = "red"

    [fruit] # エラー!すでに定義されています

    color = "red"

    # 正しい - 最初にすべてのテーブルキーを定義

    [fruit]

    name = "apple"

    color = "red"

    [[fruit.varieties]]

    name = "red"

    決定ガイド

    次の場合にJSONを選択:
    • Web APIを構築
    • 最大の互換性が必要
    • パフォーマンスが重要
    • JavaScript/ブラウザーで作業
    • データをプログラムで生成

    次の場合にTOMLを選択:
    • 設定ファイルを書く
    • 人間の可読性が優先
    • コメントが不可欠
    • RustまたはPythonプロジェクトで作業
    • 設定にバージョン管理レビューが必要

    人気のツール

    JSONツール

    • jq(コマンドラインプロセッサー)
    • すべてのプログラミング言語
    • オンラインフォーマッターが至る所に

    TOMLツール

    • tomli/tomllib(Python)
    • toml crate(Rust)
    • TOML Language Support(VS Code)
    • オンラインTOMLバリデーター

    エコシステムの採用

    JSON: 普遍的(1999年〜)
    • すべてのWebブラウザー
    • すべての主要言語
    • REST API標準

    TOML: 成長中(2013年〜)
    • Rust: Cargo.toml
    • Python: pyproject.toml
    • Hugo静的サイトジェネレーター
    • 多くのCLIツール

    結論

    JSONはデータ交換とAPIで優位ですが、TOMLは設定ファイルで優れています。多くの最新プロジェクトは両方を使用:ランタイムデータにはJSON、人間が編集可能な設定にはTOML。ユースケースに基づいて選択:人間が頻繁に編集する場合はTOMLの可読性が勝ち、マシンが生成する場合はJSONの普遍性が無敵です。

    Share:

    関連記事

    Read in English