WHATWG版とW3C版がある仕様たち

2015年11月末にW3CからWeb Storage (Second Edition)の勧告案が出ました。この勧告案では、Latest Editor's Draftにhttps://w3c.github.io/webstorage/と書かれています。そのEditor's Draftを見ると、最新版はWHATWGのHTML Standardでメンテナンスされています、とだけ書いてあります。

The latest edits to Web Storage are maintained in https://html.spec.whatwg.org/multipage/webstorage.html.

現在、WHATWGHTML Standardに由来するW3C仕様の多くで、Editor's Draftにはこのような記載しかありません(PSA: Change the Latest Editor's Drafts of WebStorage, WebWorkers, WebMessaging, Server-Sent Events and WebSockets)。

なお、以降では、勧告をREC、勧告案をPR、勧告候補をCR、草案をWD、ワーキングループノートをNOTEと略して表記する場合があります。

W3C仕様 状態 Editor's DraftのURL Editor's Draftが参照しているURL
Web Storage PR https://w3c.github.io/webstorage/ https://html.spec.whatwg.org/multipage/webstorage.html
Web Workers WD https://html.spec.whatwg.org/multipage/workers.html
HTML5 Web Messaging REC https://w3c.github.io/webmessaging/ https://html.spec.whatwg.org/multipage/comms.html#web-messaginghttps://html.spec.whatwg.org/multipage/comms.html#channel-messaging
The Web Socket API CR https://w3c.github.io/websockets/ https://html.spec.whatwg.org/multipage/comms.html#network
Server-Sent Events REC https://w3c.github.io/eventsource/ https://html.spec.whatwg.org/multipage/comms.html#server-sent-events
Microdata API NOTE http://www.w3.org/html/wg/drafts/microdata/master/

WHATWG HTML Standardが更新されても、W3Cがその変更を取り込まなければ、両者の内容は離れていきます。メジャーなブラウザーベンダーはW3C版よりもWHATWG版を参照して実装していると言っていますので、ブラウザーの実装はW3C版からは離れていくでしょう。個人的には、メンテナンスされていないW3C版を参照する意味は薄いと考えています。

なお、W3C Web Platform Working GroupではW3C版Web WorkersをCRとして出すべきかどうかの意見を募っています。積極的な意見がなければW3CでのWeb Workersの標準化は打ち切られるかもしれません。

また、W3CMicrodataのEditor's DraftはWHATWG HTML Standardを参照していませんが、W3CでのMicrodataの標準化は2013年に打ち切られています。ちなみにMicrodataのEditor's Draftとして記載されているURLは現在404 Not Foundです。

この記事では他にもWHATWG版とW3C版がある仕様について、それぞれの状況を簡単に見てみたいと思います*1

Editor's DraftがWHATWG版な仕様たち

WHATWG版とW3C版がある仕様では、W3C版のEditor's DraftがWHATWG版を直接参照している仕様もあります。

W3C仕様  状態 Editor's DraftのURL
URL WD https://url.spec.whatwg.org/
Encoding CR https://encoding.spec.whatwg.org/

W3C版Encodingでは、W3C版はWHATWG版を変更しておらず、W3C版を出しているのは主に他のW3C勧告がこの仕様をnormativeに参照できるようにするため、と記載されています。

No changes have been made in the body of this document other than to align with W3C house styles. The primary reason that W3C is publishing this document is so that HTML5 and other specifications may normatively refer to a stable W3C Recommendation.

また、Encoding仕様に対するコメントは可能な限りWHATWGGitHubへ報告してほしいと記載されています。

If you wish to make comments regarding this document, please raise them as github issues against the latest editor's draft.

W3C版URLも同様の目的で作られたと認識しています(が、今のW3C HTMLはURLEncodingWHATWG URL Standardを参照しています)。

これらの仕様は素直にWHATWG版を参照するのが良いと考えています。

また、W3Cでの標準化が打ち切られて、代わりにWHATWG版を参照するよう明記されている仕様もあります。

W3C仕様  状態 See InsteadのURL
Fullscreen NOTE https://fullscreen.spec.whatwg.org/

W3C Streams APIも、アイディアがWHATWG Streamsにマージされており、現在のW3C Streams APIにはほとんど内容がありません。実際、W3C Streams APIには、これは古い仕様のスナップショットなので実装者とレビュアーはWHATWG Streamsを参照するように、という警告文が記載されています。

This is an older spec snapshot. Implementors and reviewers should instead read the latest specification, which is up to date with the latest changes and bug fixes.

W3C仕様  状態 latest specificationのURL
Streams API WD https://streams.spec.whatwg.org/

これらの仕様も素直にWHATWG版を参照するのが良いと考えています。

勧告になった仕様達

WHATWG版とW3C版のある仕様では、W3C版がW3C勧告となった仕様もいくつかあります。今度はこれらを見てましょう。

W3C仕様  状態 関連するWHATWG仕様のURL
Web Notifications REC https://notifications.spec.whatwg.org/
W3C DOM4 REC https://dom.spec.whatwg.org/
HTML Canvas 2D Context REC https://html.spec.whatwg.org/multipage/scripting.html#2dcontext

Web NotificationsはW3Cで標準化していたWorking Groupが活動を終了しており、W3Cで今後メンテナンスされるのかは疑問です。また、DOM4とHTML Canvas 2D ContextはW3CではWeb Platform Working Groupが今後担当していくことになりますが、現時点でははっきりした作業方針は出ていません。

一方、それぞれの元になったWHATWGの仕様は開発が続いており、既にW3C勧告と内容・機能に差がでています。

Notifications API Standard

Notifications API StandardW3CではWeb Notifications)は、W3CではWeb Notification Working Groupが標準化していました。過去形で書いたのは、Web Notification Working Groupは2015年10月にWeb Notificationsの勧告を公開して、活動を終了したためです。

しかし、WHATWG Notifications API Standardは現在も開発が続いています。そのことは、W3C Web Notificationsにも記載されています。

A specification for Notifications is also being developed at https://notifications.spec.whatwg.org/. Recent work there has focused on integrating notifications with Service Workers and other new features. That specification also deprecates the onshow and onclose events that are present in this specification, under the rationale that those events lack sufficient use cases.

W3Cの変更記録によるとW3C Web Notificationsがマージした最後のNotifications API Standardのコミットb2ee703(2015年1月)のようです。

b2ee703より後のNotifications API Standardの変更記録をみると、Service Workers用のAPIが追加されたり、通知にアクションボタンを登録できるようになったりしています。このアクションボタンはChrome 48でデフォルト有効になるそうです。

W3C Web Notificationsが今後メンテナンスされる可能性が薄いことを考えると、Notifications API Standardを参照した方が良いと考えています。

DOM Standard

DOM StandardW3CではDOM4)は

  • 散らばっていたDOM関連仕様を1つの仕様に統合
  • Mutation Eventsを廃止してMutation Observersを導入
  • 便利APIの追加

を行っていますが、WHATWG DOM StandardもW3C DOM4も便利API以外は基本的に同じです。

とはいえ、注意すべき点もあります。DOM Standardでは、仕様をシンプルにするために既存のDOM仕様にあったAPIを削除しています。そして、それはW3C DOM4でも同様に削除されています。ですが、やっぱり削除できなかったということでDOM Standardで復活しているAPIもあります。それらの中にはW3C DOM4では削除されたままのものもあります(NamedNodeMapDocument.createAttributeNSなど)。

さて、便利APIafterprependなど)はニーズに基づいて追加されていくものなので、今後もDOM Standardに追加されていくでしょう。ですので、APIの確認にはDOM Standardを参照することになると私は考えています。ただ、記載されているAPIが安定しているか、ブラウザーなどで使えるのか、といったことは現状のDOM Standardを見ただけではわかりません。HTML Standardのようにcaniuse.comのデータを表示しようという話もありますが、簡単ではないようです。今後もブラウザーなどで試したり、MDNなど他の情報源を当たる必要があるでしょう。

また、W3Cの変更記録によるとW3C DOMが取り込んだ(cherry pickした)最後のDOM Standardのコミット2579be4(2014年12月)です。その時点で、W3C DOM4はDOM Standardの一部を取り込んでいませんでしたし、2015年のDOM Standardの変更も取り込んでいません。2579be4より後のDOM Standardの変更を見るとDOM Standardは仕様生成ツールanolisからBikeshedに移行していることがわかります。W3C DOMはBikeshedに移行していないため、今後、DOM Standardの変更をcherry pickしてW3C DOMへ反映することは難しいように思います。

HTML Canvas 2D Context

最近、HTML Standardでは「ブラウザーが実装しているSVGは、SVG 1.1でもSVG Tiny 1.2でもなく、それらを混ぜたものだ」という現状が明文化されました。HTML Canvas 2D Contextも少しそれと似ているかもしれません。ブラウザーが実装しているHTML Canvas 2D ContextはWHATWG版ともW3C版とも言い難いものだからです。

W3C HTML Canvas 2D Contextは基本的にはWHATWG HTML StandardのCanvas 2D Contextのサブセットになっています。大きなところではW3C版にはPath2DDrawingStyleがありません。それらはHTML Canvas 2D Context, Level 2で、ということになっていましたが、Level 2はいったん標準化が打ち切られました。現在のLevel 2はNote(2015年9月)で、次の文章が書かれています。

Beware. This specification is no longer in active maintenance and the HTML Working Group does not intend to maintain it further.

さて、W3C HTML Canvas 2D ContextはWHATWG HTML StandardのCanvas 2D Contextのサブセットと書きましたが、古いバージョンと言った方が実態を表しているかもしれません。例えば、W3C HTML Canvas 2D Contextには楕円を描くメソッドellipse)が削除されていたり、globalCompositeOperationの定義が古いままです。なお、両者はいずれもEdgeの2015年11月プラットフォームアップデート(EdgeHTML 13)で既にサポートされています。

一方、HTML Standardには、長年記載されているものの、実装されたことがない機能もあります(TextMetricsの大部分、など)。また、HTML Standardでは今後、Workerの中でCanvas 2D Contextの描画ができるOffscreenCanvasなどの議論も進むと思います。そうなると、HTML Standardに記載されているものがブラウザーに実装されているかどうかは仕様だけを見てもわからない、という状況はまだ続きそうです。

XMLHttpRequest

WHATWG版とW3C版のある仕様には他にもXMLHttpRequestがあります。

XMLHttpRequestW3Cでは少なくとも3つのバリエーションがあります。

W3C仕様  w3.orgでのパス
XMLHttpRequest /TR/XMLHttpRequest1/
XMLHttpRequest Level 2 /TR/XMLHttpRequest2/
XMLHttpRequest Level 1 /TR/XMLHttpRequest/

このうち、W3C XMLHttpRequestW3C XMLHttpRequest Level 2は標準化が打ち切られています。XMLHttpRequest仕様のSpecification historyを見ると次のようです。

ということで、W3C XMLHttpRequestは現在NOTE(2012年1月)で次の文章が記載されています。

Beware. This specification was last published as a Candidate Recommendation, but it is no longer in active maintenance, contains known errors, and the Web Applications Working Group does not intend to maintain it further. See XMLHttpRequest for the Working Group's latest specification.

また、W3C XMLHttpRequest Level 2も現在Note(2014年11月)で次の文章が記載されています。

Work on this document has been discontinued and it should not be referenced or used as a basis for implementation. However, the Web Applications Working Group continues to work on XMLHttpRequest Level 1 and the WHATWG continues to work on XMLHttprequest.

残るW3C XMLHttpRequest Level 1ですが、Editor's Draftを見ると次の一文があります。

Snapshot specification for the XMLHttpRequest Living Standard

W3C XMLHttpRequest Level 1はWHATWGXMLHttpRequest Standardのスナップショット仕様、とのことです。とはいえ、W3C XMLHttpRequest Level 1はFetchができる前のWHATWG XMLHttpRequest Standardをもとにしており、現在のXMLHttpRequest Standardとは仕様の組み立て方が異なります。

もしかすると、今後W3CW3C版Fetchをつくり、W3C XMLHttpRequestも更新していくのかもしれませんが、現状ではW3C XMLHttpRequestを参照する意義は薄いと思います。

なお、W3Cでは独立した仕様になっているProgress EventsW3C勧告(2014年11月))はWHATWG版ではXMLHttpRequestに統合されています。

終わりに

この記事ではWHATWG版とW3C版がある仕様たちを見てきました。現時点では、W3C版の仕様がメンテナンスされているケースはあまりないため、W3C版を参照する意義は薄いと感じています。

また、WHATWG版からW3C版を切り出して安定化していくことは大変な作業だと感じました。この機能はまだ安定していないからW3C版の仕様からは取り除いておこう、というのはありがちですが、そのありがちな場合でも編集作業は大変です。WHATWG版が更新されたからといって変更をバンバン取り込んでいくと、取り除いていたはずの機能が復活していたり、別の場所で言及されていたり、ということが起きてしまいます。実際、W3C版の仕様には、存在しない機能に言及する文がある、ということが少なからず発生しています。このようにW3C版仕様の編集にはかなり労力が必要であり、かつ、当初思われていたほど上手くいかなかったのだと感じます。

2015年の下半期にWHATWG版が存在しているW3C仕様がNOTEになったりRECになったのは、W3Cとして(HTML Working GroupやWeb Applications Working Groupとして)いったん区切りをつけたかったからだと思います。

もっとも、区切りをつけたことはそんなに悪いことではないと思います。Web Platform Working Groupに限っても、ここで挙げたもの以外に20を超える仕様があります(PubStatus)。この記事では触れていないW3C HTMLもありますし、現実的には、W3CW3Cがリソースを割ける仕様の標準化を進めることになるのだろうと考えています。

*1:この記事ではW3C HTMLについては議論しません