古い企業向けAPIとの連携やRSSフィードの処理をしたことがあれば、XMLに出会ったことがあるはずです。 モダンなWebで何かを構築したことがあれば、JSONの世界で生きているはずです。どちらのフォーマットも同じ根本的な問題—— 構造化データをテキストとして表現すること——を解決しますが、そのアプローチは大きく異なります。この記事では 実際の違いを詳しく解説し、informed な選択ができるようにします。

同じデータ、2つのフォーマット

具体的な例から始めましょう。JSONで表現したユーザーオブジェクトはこちらです:

json
{
  "user": {
    "id": 101,
    "name": "Bob",
    "email": "[email protected]",
    "roles": ["admin", "editor"],
    "active": true
  }
}

そして全く同じデータをXMLで表すとこうなります:

xml
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <id>101</id>
  <name>Bob</name>
  <email>[email protected]</email>
  <roles>
    <role>admin</role>
    <role>editor</role>
  </roles>
  <active>true</active>
</user>

JSONバージョンは62文字。XMLバージョンは198文字—— 同じデータで3倍の大きさです。小さなペイロードではさほど問題になりませんが、1日に何百万ものリクエストをさばく 高トラフィックのAPIでは、帯域幅はどんどん積み重なっていきます。

JSONが勝る点

  • 簡潔さ。 閉じタグが不要。繰り返しが少ない。ネットワーク上のペイロードが小さい。
  • JavaScriptのネイティブサポート。 JSON.parse()JSON.stringify()はすべてのJSランタイムに組み込まれています。外部ライブラリは不要です。
  • シンプルさ。 6つのデータ型とわずかなルール。JSON仕様全体を10分で読めます。
  • 配列のサポート。 JSONにはネイティブの配列があります。XMLでは<role> <role> <role>のように要素を繰り返すしかありません。
  • ツールサポート。 PostgreSQL、MongoDB、MySQLなどのモダンなデータベースはすべてJSONを第一級サポートしています。多くのロギングプラットフォームもJSONをネイティブにパースします。
  • 可読性。 開発者はJSONの方がスキャンしやすいと感じます。アングルブラケットや閉じタグによるノイズが少ないからです。

XMLがまだ勝る点

  • 属性とメタデータ。 XML要素は属性を持てます:<user id="101" active="true">。子要素を追加せずにデータにアノテーションを付けたい場合に便利です。
  • 名前空間。 XML名前空間により、1つのドキュメント内で複数の語彙を混在させることができます——XHTML、SVG、SOAP、Office Open XMLなどのフォーマットにとって重要です。
  • スキーマ検証。 XML Schema (XSD)は、データ型、パターン、カーディナリティを含む強力で標準化された検証を提供します。JSON Schemaも追いついてきていますが、XML Schemaには何十年ものツールサポートがあります。
  • ドキュメント中心のユースケース。 XMLはデータだけでなくドキュメントのために設計されました。XHTML、DocBook、DITAのようなフォーマットはXMLの上に構築されており、テキストとマークアップが混在するコンテンツに最適です。
  • XSLTによる変換。 XSLTを使えばXMLをHTML、別のXML、またはプレーンテキストに変換できます——パブリッシングパイプラインで強力なツールです。
  • コメント。 XMLはコメントをサポートします。JSONはしません。ある設定が存在する理由を説明したい設定ファイルでは、これは重要です。

パフォーマンス:本当に重要なのか?

ほとんどのアプリケーションでは、JSONとXMLのパース性能の差は無関係です。 差が生まれる場面——高頻度データフィード、IoTテレメトリ、リアルタイムシステム——ではJSONが 余裕で勝ちます。JSONパーサーはフォーマット自体がシンプルなため、より単純で高速です。 簡単なベンチマーク:Node.jsで1MBのJSONファイルをパースするのに通常10〜30msかかります。等価なXMLは SAXパーサーで2〜5倍遅く、DOMパーサーならさらに遅くなります。

パフォーマンスが本当に重要な場合、どちらのフォーマットも理想的ではありません—— Protocol BuffersMessagePackのようなバイナリフォーマットを選ぶでしょう。 ただし、一般的なWeb APIの作業には、JSONのパフォーマンスは十分すぎるほどです。

決断ガイド:どちらをいつ使うか

JSONを使う場面:

  • REST APIやGraphQL APIを構築するとき
  • 設定やセッティングを保存するとき(package.json、tsconfig.jsonなど)
  • JavaScript、TypeScript、Python、Ruby、Go——あらゆるモダンな言語で作業するとき
  • モダンなサードパーティAPIと通信するとき
  • MongoDB、Elasticsearch、またはPostgreSQL JSONBカラムにドキュメントを保存するとき

XMLを使う場面:

  • レガシーな企業システムと連携するとき(SAP、Salesforce SOAP APIなど)
  • ドキュメント形式を扱うとき:SVG、EPUB、Office Open XML(.docx、.xlsx)
  • XSLT変換を使うパブリッシングパイプライン
  • RSSやAtomフィード
  • 確立されたXML標準がある業界でデータ交換するとき(医療のHL7、金融のFpMLなど)
正直な答え: グリーンフィールドプロジェクトを始めるとき、外部システムからXMLもJSONも義務付けられていなければ、JSONを選んでください。チームの時間を毎週節約できます。XMLが正しい選択なのは、すでにXMLベースのエコシステム内で作業しているときです。

両フォーマット間での作業

2つの間で変換が必要になることもあるでしょう。レガシーXML APIを使いながらデータをJSONとして保存したい場合や、 JSONネイティブのバックエンドからXMLベースのサービスにデータを送る必要がある場合などです。 これらの変換には XML to JSON コンバーターまたは JSON to XML コンバーターが利用できます。 XMLレスポンスの確認には、XMLフォーマッターXMLバリデーターが便利です。

まとめ

JSONとXMLは同じ問題を解決しますが、それぞれ異なるコンテキストに対応しています。JSONはモダンな開発の 大多数において正しい選択です——よりシンプルで、より小さく、すべての言語でより良いネイティブサポートを持っています。 XMLはドキュメント中心や名前空間を意識したユースケースで真にユニークな強みを持っています。 良いニュースは、教条的になる必要はないということ——両フォーマットとも成熟しており、十分にサポートされていて、 長い間共存し続けるでしょう。トレードオフを理解し、仕事に適したツールを選んでください。