なぜJSONがXMLに取って代わったか
Web APIのデータ形式がXML/SOAPからJSON/RESTへ移った本当の理由がわかる。軽さ・即パース・摩擦の少なさという勝因と、XMLが今も残る領域の見極めを持ち帰れる。
- JSONはDouglas Crockfordが2001年にJavaScriptのオブジェクト表記から見出した既存記法で、新発明ではない。ブラウザがネイティブに解釈でき、パーサやスキーマ抜きで即データ化できる摩擦の低さが決定打になった。
- 2000年前後のWeb APIはXML/SOAPが主流だったが、封筒・名前空間・WSDL・付随仕様の重厚さがWebとの相性で足枷になった。RESTとAjaxの普及で、素直にHTTP+JSONを返すAPIが実装・学習コストの両面で勝った。
- XMLは消えたわけではなく、混在文書・厳密なスキーマ検証・設定記述など構造の豊かさが要る領域で今も現役。教訓は適材適所と、開発者が触れる摩擦の少なさが標準を決めるという原則。
結論 — 勝ったのは「摩擦の少なさ」
JSONがXMLに取って代わった一言の理由は、Web API という現場で開発者が触れる摩擦が圧倒的に少なかったことです。JSONは新しく発明された形式ではなく、Douglas Crockford が2001年ごろ、既に存在した JavaScript のオブジェクト表記(オブジェクトリテラル)を「データ交換にそのまま使える」と見出し、名前を与えて公開したものです。ブラウザがネイティブに解釈でき、専用パーサもスキーマ定義もなしにテキストがそのままデータ構造になる——この即物的な軽さが、XML/SOAP の重厚な仕様体系に対して決定的に効きました。
JSONの構文は ECMAScript の一部であるオブジェクトリテラルとほぼ同じで、Crockford 自身「私は JSON を発明していない、既にあったものに気づいて名前を付けただけだ」という趣旨を繰り返し述べています。json.org の公開は2002年。標準化は後追いで RFC 4627(2006年)、次いで ECMA-404(2013年)、そして RFC 8259 と ECMA-404 第2版(いずれも2017年)が整えました。
当時の状況と競合 — XML/SOAPの重厚さ
2000年前後、システム間連携の本命は XML でした。XML 1.0 は W3C 勧告(1998年)で、あらゆる構造を厳密に表現でき、名前空間・スキーマ(XSD)・変換(XSLT)・問い合わせ(XPath/XQuery)と周辺仕様が充実していました。この上に築かれた RPC 規約が SOAP です。SOAP はもともと Microsoft 陣営(Dave Winer や Don Box らが関与)で1998年ごろに生まれ、W3C で SOAP 1.2 が勧告(2003年)となり、WSDL(インターフェース記述)や WS-* 系仕様群とともに「エンタープライズ Web サービス」の標準として推進されました。
問題は、この体系が Web ブラウザという実行環境と噛み合わなかった点です。SOAP は一件の呼び出しに必ず Envelope(封筒)と名前空間を要求し、型情報やヘッダで包みます。ブラウザ側では XML を DOM としてパースし、必要な値を XPath や手作業のツリー走査で取り出す必要がありました。同じデータを表すのに、XML/SOAP と JSON では手数がまるで違います。
| 観点 | XML / SOAP | JSON / REST |
|---|---|---|
| 同じデータの記述量 | 封筒・名前空間・終了タグで冗長 | キーと値のみで簡潔 |
| ブラウザでの取り込み | DOMパース後にツリー走査/XPath | ネイティブに構造化データ化 |
| 前提となる仕様 | XSD・WSDL・WS-* など多数 | 実質ゼロ(構文のみ) |
| 主な設計思想 | 厳密な型・契約・拡張性 | 軽量・素直・実装しやすさ |
| 得意な領域 | 混在文書・厳密検証・設定 | Web APIのデータ交換 |
同じ内容を並べると差は一目瞭然です。
<?xml version="1.0"?>
<user>
<id>42</id>
<name>Aki</name>
<admin>true</admin>
</user>
{ "id": 42, "name": "Aki", "admin": true }
XMLでは要素名を開始・終了タグで二度書き、属性かテキストかの設計判断も付きまといます。JSONは数値・真偽値・文字列・配列・オブジェクトという最小の型だけを持ち、{"id":42} がそのままメモリ上のオブジェクトになります。
決定打・経緯 — RESTとAjaxが流れを変えた
横にスクロール
勝敗を分けたのは、2000年代半ばに重なった2つの潮流です。ひとつは Roy Fielding が博士論文(2000年)で定式化した REST で、独自の RPC 封筒を被せず、HTTP のメソッドと URL をそのまま資源操作の語彙として使う考え方です。SOAP が HTTP を「単なる運搬路」として上位に独自プロトコルを積んだのに対し、REST は HTTP の設計自体に乗ることで付随仕様を不要にしました。
もうひとつが Ajax です。ブラウザから非同期通信する XMLHttpRequest はもともと Microsoft が Outlook Web Access 向けに IE5(1999年)で実装した部品で、Jesse James Garrett が2005年に「Ajax」と名付けて設計手法として広めました。名前に XML を含みますが、実際にサーバーから受け取って扱うのに最も相性が良かったのは JSON でした。理由は単純で、返ってきたテキストをブラウザがそのままオブジェクトに変換できたからです。
初期にはレスポンス文字列を eval() でオブジェクト化する手法が広まりましたが、任意コード実行の危険を伴いました。この弱点は Crockford らによる安全なパーサ(JSON.parse/JSON.stringify)の普及で解消され、後にブラウザ標準(ES5、2009年)へ組み込まれます。安全に即パースできる形式になったことが、JSON採用をさらに後押ししました。
こうして「HTTP でリソースを表現し、ボディに JSON を返す」素直な Web API が、実装コストと学習コストの両面で優位に立ちました。SOAP は WSDL からのコード生成ツールがある環境では強力でしたが、ツールに乏しいスクリプト言語やブラウザからは扱いにくく、公開 Web API の主役が JSON/REST へ移っていきました。GitHub や多くの SaaS が JSON API を既定とし、XML はオプション扱いへ後退します。
今への影響と教訓 — 適材適所
現在、公開 Web API・モバイル・SPA のデータ交換はほぼ JSON が既定です。JSONの上には JSON Schema(緩やかな検証)、JSON-LD(意味付け)、そして GraphQL のように別アプローチで REST を補う設計も育ちました。一方で XML は消えていません。長所である構造の豊かさが要る領域では今も最適です。
- 文書とデータが混在する用途(HTMLに近い文書、DOCX/XLSX などのオフィス文書内部、SVG)
- 厳密なスキーマ検証・電子署名・名前空間が要る契約的なデータ交換(一部の金融・行政・EDI)
- 設定・ビルド記述(一部のエコシステム。ただし近年は YAML/TOML/JSON も併存)
「新しい方が良い」ではなく「用途に対する摩擦が小さい方が勝つ」。JSONはWeb APIという文脈で摩擦が最小だったから広まり、XMLは混在文書や厳密検証という別の文脈で今も選ばれる。フォーマット選定は優劣比較ではなく適材適所で決めるのが実務の作法です。
REST/HTTPとしての資源設計はWeb、データ形式のパースや直列化の内部動作はプログラミング、API通信の下回りとなるHTTPの仕組みはネットワークを参照してください。
- JSONはCrockfordが2001年ごろJavaScriptのオブジェクト表記から見出した既存記法で、新発明ではない(json.org公開は2002年、RFC 4627は2006年)
- SOAPはEnvelope・名前空間・WSDL・WS-*を伴う重厚な体系。RESTはHTTP自体に乗り付随仕様を不要にした(Fielding, 2000年)
- 勝因はブラウザでネイティブに即パースできる摩擦の低さ。eval依存はJSON.parse(ES5, 2009年)で安全化された
- XMLは混在文書・厳密なスキーマ検証・設定記述など構造の豊かさが要る領域で現役。教訓は適材適所
一段で言うと
JSONは技術的にXMLを打ち負かしたというより、Web API という現場で開発者がぶつかる摩擦を最小化して勝ちました。ブラウザが即座にデータ化でき、余計な封筒も仕様も要らない——その素直さがRESTとAjaxの波に乗った。XMLは負けて消えたのではなく、混在文書や厳密検証という自分の得意分野に収まっただけです。標準を決めるのは仕様の格ではなく、日々それを書く人の摩擦の少なさ。これがこの交代劇の核心です。
なぜ?の記事ガイド
なぜJSONがXMLに取って代わったかを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
JSON
比較で見る軸
難易度: advanced / カテゴリ: なぜ? / タグ数: 6
導入後に効く点
2000年前後のWeb APIはXML/SOAPが主流だったが、封筒・名前空間・WSDL・付随仕様の重厚さがWebとの相性で足枷になった。RESTとAjaxの普及で、素直にHTTP+JSONを返すAPIが実装・学習コストの両面で勝った。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- なぜ?
- タグ数
- 6
判断チェックリスト
- 自社の用途が「JSON / XML」に近いか確認する。
- 強みである「JSONはDouglas Crockfordが2001年にJavaScriptのオブジェクト表記から見出した既存記法で、新発明ではない。ブラウザがネイティブに解釈でき、パーサやスキーマ抜きで即データ化できる摩擦の低さが決定打になった。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。