0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データフォーマット徹底比較:JSON、XML、YAML、TOML の特徴と使い分け

Last updated at Posted at 2025-09-01

「どのデータフォーマットを使えばいいの?」

API設計、設定ファイル作成、データ交換など、開発者なら必ず直面するこの疑問。選択肢は多いけれど、それぞれに適した場面や特徴があることをご存知でしょうか?

現代の開発現場では、主に4つのデータフォーマットが活躍しています:

  • JSON - Web APIの定番
  • XML - 企業システムの老舗
  • YAML - 設定ファイルの新星
  • TOML - 型安全な現代的選択肢

この記事では、これらのフォーマットを実際のコード例とともに比較し、「いつ、どれを使うべきか」を明確にします。プロジェクトに最適なフォーマット選択ができるようになりましょう。

実践比較:同じ内容を4つのフォーマットで表現

エンジニアのプロフィールを例に、各フォーマットでの記述方法を見てみましょう。

JSON形式

{
  "name": "taramanji",
  "job_title": "バックエンドエンジニア",
  "age": 28,
  "email": "tarakokko3233@gmail.com",
  "skills": ["Python", "TensorFlow", "Docker", "AWS"],
  "certifications": ["AWS Solutions Architect", "Google Cloud ML Engineer"],
  "favorite_tools": {
    "ide": "VS Code",
    "ai_framework": "PyTorch",
    "deployment": "Kubernetes"
  },
  "github_repos": 47,
  "remote_work": true,
  "joined_date": "2022-03-15",
  "current_project": "チャットボット開発"
}

XML形式

<?xml version="1.0" encoding="UTF-8"?>
<engineer xmlns:skill="http://skills.tech.com">
  <name>taramanji</name>
  <job_title>バックエンドエンジニア</job_title>
  <age>28</age>
  <email type="business">tarakokko3233@gmail.com</email>
  <skill:technical_skills>
    <skill:skill level="expert">Python</skill:skill>
    <skill:skill level="advanced">TensorFlow</skill:skill>
    <skill:skill level="intermediate">Docker</skill:skill>
    <skill:skill level="advanced">AWS</skill:skill>
  </skill:technical_skills>
  <certifications>
    <certification>AWS Solutions Architect</certification>
    <certification>Google Cloud ML Engineer</certification>
  </certifications>
  <favorite_tools>
    <ide>VS Code</ide>
    <ai_framework>PyTorch</ai_framework>
    <deployment>Kubernetes</deployment>
  </favorite_tools>
  <github_repos count="47"/>
  <remote_work enabled="true"/>
  <joined_date>2022-03-15</joined_date>
  <current_project status="active">チャットボット開発</current_project>
</engineer>

YAML形式

# 🤖 バックエンドエンジニアプロフィール
name: taramanji
job_title: バックエンドエンジニア
age: 28
email: tarakokko3233@gmail.com

# 💻 技術スタック
skills:
  - Python        # メイン言語
  - TensorFlow    # 機械学習
  - Docker        # コンテナ化
  - AWS           # クラウド

certifications:
  - "AWS Solutions Architect"
  - "Google Cloud ML Engineer"

# 🛠️ お気に入りツール
favorite_tools:
  ide: VS Code
  ai_framework: PyTorch
  deployment: Kubernetes

# 📊 活動データ
github_repos: 47
remote_work: true
joined_date: 2022-03-15
current_project: チャットボット開発

# 🎯 今後の目標
goals: &career_goals
  - MLOpsの習得
  - 論文発表
  - OSS貢献

# 📋 プロジェクト履歴
projects:
  chatbot: &bot_project
    name: チャットボット開発
    tech_stack: [Python, FastAPI, OpenAI]
    status: active
  
  recommendation:
    <<: *bot_project
    name: レコメンドエンジン
    tech_stack: [Python, scikit-learn, Redis]
    status: completed

TOML形式

# 🤖 バックエンドエンジニアプロフィール
name = "taramanji"
job_title = "バックエンドエンジニア"
age = 28
email = "tarakokko3233@gmail.com"
skills = ["Python", "TensorFlow", "Docker", "AWS"]
certifications = ["AWS Solutions Architect", "Google Cloud ML Engineer"]
github_repos = 47
remote_work = true
joined_date = 2022-03-15
current_project = "チャットボット開発"

# 🛠️ お気に入りツール
[favorite_tools]
ide = "VS Code"
ai_framework = "PyTorch"
deployment = "Kubernetes"

# 📋 プロジェクト履歴
[[projects]]
name = "チャットボット開発"
tech_stack = ["Python", "FastAPI", "OpenAI"]
status = "active"
start_date = 2024-01-15

[[projects]]
name = "レコメンドエンジン"
tech_stack = ["Python", "scikit-learn", "Redis"]
status = "completed"
start_date = 2023-06-01
end_date = 2023-12-20

# 🎯 キャリア設定
[career]
current_level = "senior"
next_goal = "tech_lead"
learning_focus = ["MLOps", "Kubernetes", "論文執筆"]

# 📊 パフォーマンス指標
[metrics]
code_review_score = 4.8
team_satisfaction = 9.2
project_success_rate = 0.95

1. JSON (JavaScript Object Notation)

特徴

  • 軽量で読みやすいテキストベースのデータ交換フォーマット
  • JavaScriptのオブジェクト記法をベースとしているが、言語に依存しない
  • パース速度が速い
  • Web APIでの標準的なデータフォーマット

構文

{
  "name": "taramanji",
  "job_title": "バックエンドエンジニア",
  "age": 28,
  "email": "tarakokko3233@gmail.com",
  "skills": ["Python", "TensorFlow", "Docker", "AWS"],
  "certifications": ["AWS Solutions Architect", "Google Cloud ML Engineer"],
  "favorite_tools": {
    "ide": "VS Code",
    "ai_framework": "PyTorch",
    "deployment": "Kubernetes"
  },
  "github_repos": 47,
  "remote_work": true,
  "joined_date": "2022-03-15",
  "current_project": "チャットボット開発"
}

メリット

  • 軽量で転送効率が良い
  • ✅ ほぼ全てのプログラミング言語でサポート
  • パース速度が高速
  • Web標準として広く採用
  • ネストしたデータ構造を簡潔に表現

デメリット

  • コメントが書けない
  • データ型が限定的(文字列、数値、真偽値、null、配列、オブジェクトのみ)
  • 日付型がない
  • 多行文字列の扱いが不便

主な使用例

  • REST APIのレスポンス・リクエスト

  • 設定ファイル(package.json、tsconfig.json)

  • NoSQLデータベース(MongoDB)

  • Webhookペイロード(GitHub、Slack)

2. XML (eXtensible Markup Language)

特徴

  • マークアップ言語ベースの構造化データフォーマット
  • スキーマ検証(XSD)による厳密なデータ検証が可能
  • 名前空間によるタグの競合回避
  • 企業システムレガシーシステムで広く使用

構文

<?xml version="1.0" encoding="UTF-8"?>
<engineer xmlns:skill="http://skills.tech.com">
  <name>taramanji</name>
  <job_title>バックエンドエンジニア</job_title>
  <age>28</age>
  <email type="business">tarakokko3233@gmail.com</email>
  <skill:technical_skills>
    <skill:skill level="expert">Python</skill:skill>
    <skill:skill level="advanced">TensorFlow</skill:skill>
    <skill:skill level="intermediate">Docker</skill:skill>
    <skill:skill level="advanced">AWS</skill:skill>
  </skill:technical_skills>
  <certifications>
    <certification>AWS Solutions Architect</certification>
    <certification>Google Cloud ML Engineer</certification>
  </certifications>
  <favorite_tools>
    <ide>VS Code</ide>
    <ai_framework>PyTorch</ai_framework>
    <deployment>Kubernetes</deployment>
  </favorite_tools>
  <github_repos count="47"/>
  <remote_work enabled="true"/>
  <joined_date>2022-03-15</joined_date>
  <current_project status="active">チャットボット開発</current_project>
</engineer>

メリット

  • スキーマ検証による厳密なデータ検証
  • 名前空間による要素名の競合回避
  • 属性と要素の両方でデータ表現が可能
  • メタデータを豊富に含められる
  • XSLTによる変換処理が可能

デメリット

  • 冗長でファイルサイズが大きくなりがち
  • 記述が複雑で人間が読みにくい
  • パース処理が重い
  • 現代的な開発では使用頻度が減少

主な使用例

  • 企業間データ交換(B2B統合)
  • Spring Framework設定
  • Maven/Gradleの依存関係管理
  • RSS/Atomフィード
  • SOAP Web Services

3. YAML (YAML Ain't Markup Language)

特徴

  • 人間が読みやすいデータシリアライゼーション標準
  • インデントによる階層構造の表現
  • コメントの記述が可能
  • 多行文字列の自然な表現

構文

# 🤖 バックエンドエンジニアプロフィール
name: taramanji
job_title: バックエンドエンジニア
age: 28
email: tarakokko3233@gmail.com

# 💻 技術スタック
skills:
  - Python        # メイン言語
  - TensorFlow    # 機械学習
  - Docker        # コンテナ化
  - AWS           # クラウド

certifications:
  - "AWS Solutions Architect"
  - "Google Cloud ML Engineer"

# 🛠️ お気に入りツール
favorite_tools:
  ide: VS Code
  ai_framework: PyTorch
  deployment: Kubernetes

# 📊 活動データ
github_repos: 47
remote_work: true
joined_date: 2022-03-15
current_project: チャットボット開発

メリット

  • 非常に読みやすい(設定ファイルに最適)
  • コメントが書ける
  • 多行文字列の自然な表現
  • リッチなデータ型(日付、多行文字列等)
  • アンカーと参照による重複排除

デメリット

  • インデントミスによるエラーが起きやすい
  • パース速度がJSONより遅い
  • セキュリティリスク(任意のPythonオブジェクトの実行等)
  • タブとスペースの混在でエラーになる

主な使用例

  • GitHub Actionsワークフロー
  • Docker Composeのサービス定義
  • Kubernetesマニフェスト
  • Ansibleプレイブック
  • OpenAPI/Swagger仕様書

4. TOML (Tom's Obvious, Minimal Language)

特徴

  • 設定ファイルに特化したフォーマット
  • 明確で最小限の構文
  • 強い型付け
  • 明確なエラーメッセージ

構文

# 🤖 バックエンドエンジニアプロフィール
name = "佐藤あい"
job_title = "バックエンドエンジニア"
age = 28
email = "tarakokko3233@gmail.com"
skills = ["Python", "TensorFlow", "Docker", "AWS"]
certifications = ["AWS Solutions Architect", "Google Cloud ML Engineer"]
github_repos = 47
remote_work = true
joined_date = 2022-03-15
current_project = "チャットボット開発"

# 🛠️ お気に入りツール
[favorite_tools]
ide = "VS Code"
ai_framework = "PyTorch"
deployment = "Kubernetes"

メリット

  • 設定ファイルに最適化された設計
  • 型安全で曖昧さがない
  • コメントサポート
  • 明確なエラーメッセージ
  • 複雑なネスト構造も表現可能

デメリット

  • 比較的新しいフォーマットで採用事例が限定的
  • ライブラリサポートがJSONやYAMLより少ない
  • データ交換用途には向かない

主な使用例

  • Rustプロジェクト(Cargo.toml)
  • Pythonパッケージ設定(pyproject.toml)
  • アプリケーション設定ファイル
  • Hugo静的サイト設定
  • Poetry依存関係管理

フォーマット比較表

特徴 JSON XML YAML TOML
可読性
記述性
パース速度
ファイルサイズ
コメント
型安全性
ライブラリサポート
学習コスト

使い分けのガイドライン

JSON を選ぶべき場面

  • REST APIの設計
  • Web アプリケーションでの設定
  • JavaScript/TypeScriptプロジェクト
  • NoSQLデータベースへの保存
  • リアルタイム通信(WebSocket等)

XML を選ぶべき場面

  • 企業システムの開発
  • 厳密なスキーマ検証が必要
  • Spring Frameworkプロジェクト
  • Maven/Gradleビルド設定
  • 企業間データ交換(B2B)

YAML を選ぶべき場面

  • CI/CDパイプライン設定(GitHub Actions等)
  • Docker Composeのマルチコンテナ設定
  • Kubernetesのマニフェスト
  • 設定ファイル(複雑なもの)
  • 人間が頻繁に編集するファイル

TOML を選ぶべき場面

  • Rustプロジェクトの設定
  • 型安全性が重要なアプリケーション設定
  • モダンなツールの設定ファイル
  • 明確なエラー処理が必要

まとめ

現代の開発における各フォーマットの役割:

JSON: Web開発の標準

  • Web API、フロントエンド開発
  • 軽量で高速なデータ交換

XML: 企業システムの安定選択

  • Spring Boot、Maven/Gradle
  • 厳密なデータ検証が必要な場面

YAML: DevOpsの必須スキル

  • CI/CD、Docker、Kubernetes
  • 人間が読み書きしやすい設定

TOML: モダン言語の新定番

  • Rust、Python(Poetry)
  • 型安全で明確な設定ファイル

選択の指針:

  • API・データ交換 → JSON
  • DevOps・インフラ → YAML
  • 型安全な設定 → TOML
  • 企業システム → XML

プロジェクトの性質に合わせて最適なフォーマットを選びましょう。
この記事が皆さんのデータフォーマット選択の参考になれば幸いです。適切なフォーマットの選択がプロジェクトの成功に直結します。ぜひ実際のプロジェクトで試してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?