JSON vs TOML: 設定フォーマット比較
設定ファイルのためのJSONとTOMLフォーマットを比較。主な違い、変換方法、プロジェクトに応じた各フォーマットの使い分けを学びます。
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
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を使用する場合
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/ブラウザーで作業
- データをプログラムで生成
- 設定ファイルを書く
- 人間の可読性が優先
- コメントが不可欠
- RustまたはPythonプロジェクトで作業
- 設定にバージョン管理レビューが必要
人気のツール
JSONツール
- jq(コマンドラインプロセッサー)
- すべてのプログラミング言語
- オンラインフォーマッターが至る所に
TOMLツール
- tomli/tomllib(Python)
- toml crate(Rust)
- TOML Language Support(VS Code)
- オンラインTOMLバリデーター
エコシステムの採用
JSON: 普遍的(1999年〜)- すべてのWebブラウザー
- すべての主要言語
- REST API標準
- Rust: Cargo.toml
- Python: pyproject.toml
- Hugo静的サイトジェネレーター
- 多くのCLIツール
結論
JSONはデータ交換とAPIで優位ですが、TOMLは設定ファイルで優れています。多くの最新プロジェクトは両方を使用:ランタイムデータにはJSON、人間が編集可能な設定にはTOML。ユースケースに基づいて選択:人間が頻繁に編集する場合はTOMLの可読性が勝ち、マシンが生成する場合はJSONの普遍性が無敵です。