また、先月ちょっとだけ取り上げたShared Workersの今後について議論されるなど、思ったよりも動きのある12月でした。
Shared Workers復活!?
先月の記事にて、WebApps WGのF2FにてShared Workersが削除されることを取り上げました。これはShared Workersの実装が乏しく、2つ以上の実装という勧告への要件を満たせないという懸念を受けてのアクションです。
しかし12月に入り、FirefoxがShared Workersを有効にしました(Firefox 29より利用可能となります)。
これを受け、Shared Workersを削除する必要があるのかといった議論が、WebApps WGのメーリングリストで交わされています。議論の中で実はPrestoも実装していたという話も出てきて、こないだの話はなんだったのだろう感が否めません。
とはいえ、この議論が出てきたのはその実装状況が不明だった、テストスイートによる検証がなされていなかったなど、現状把握を誰も行っていなかったことに起因します。メーリングリストでは、その後各ベンダーの担当者にWeb Workersのテストスイートを実行するよう要請したことで、実装状況と相互運用性の状況がわかりつつあります。
議論を追うとテストケース自体への問題も指摘されており、Shared Workersが削除されるというよりもWeb Workers自体の問題に移行しているようです。
なお、Web Workersについてはいくつか機能追加の要望もあり、Level 2仕様への希望も出ました。CanvasのImageData
をWorkersで扱うインターフェースなどはすでにWHATWG HTMLで提案中ですが、synchronous message channelsなど別の機能も求められているようです。
冬休みに入ったためか議論が止まってしまい、今後は以前不透明です。とはいえ、実装が増えたことはShared Workersについて明るいニュースだったのではないでしょうか。
CSSOM Viewが更新 ― devicePixelRatio
、スムーズスクロール機能が追加
2013年12月17日付けで、CSS WGから新しいCSSOM Viewの草案が公開されました。
CSSOM ViewはCSS関連のオブジェクトモデルのうち、ブラウザやシステムに関わるプロパティを定義する仕様です。古くからあるclientWidth
やgetBoundingClientRect()
、比較的最近ではmatchMedia()
などが定義されています。
今回の草案の見どころは、window.devicePixelRatio
とスムーズスクロール関連の機能が定義されたことでしょうか。window.devicePixelRatio
プロパティはAppleが高解像度モードのためにWebKitに導入した独自拡張で、Retina Displayをはじめ高密度ディスプレイへの対応をする際に使われています(ちなみにこのプロパティ、iPhone 4で初めてRetina Displayが登場するよりもずっと前の2006年に実装されています)。他のベンダーも追従し、最近ではIE11でも実装されました。
今回のCSSOM Viewではブラウザのズームとピンチズームの概念も導入され、さらにdevicePixelRatio
がブラウザズームの影響を受けると定義されました。これはGecko, Blink, Tridentの挙動に沿ったものですがWebKitの実装はそうではなく、Appleはこの定義に反対しています(WebKitではブラウザのズームにも、画面解像度の変更においてもdevicePixelRatio
の値が変化しません)。
スムーズスクロール機能は現在、JavaScriptライブラリやスニペットを使って実装されていますが、タイマーを使ってちまちまscrollTo()
をするものであまり効率が良い感じがしません。
今回の草案では新たにscroll-behavior
プロパティというCSSプロパティが定義されました。scroll-behavior: smooth
と指定すれば、対応する実装がネイティブのスムーズスクロールを利用するよう支持できます。
ほかにも、新たなメソッドmoveTo()
、moveBy()
、resizeTo()
、resizeBy()
の導入や、resize
イベントとscroll
イベントが定義されたりなど盛りだくさんです。
続CSSOM View ― PPK氏によるDPR調査など
ブラウザの互換性調査などで有名なPeter-Paul Koch氏が、devicePixelRatioやズーム、screen関連のDOMプロパティについてコメントを寄せました。デスクトップのページズームはdevicePixelRatioに影響させるすべきでないなど、今の流れと正反対の意見を唱えており、ちょっとした議論になりました。
CSSOM Viewはもともとあまり互換性のなかったデスクトップブラウザ間の挙動を、なんとか合わせるために策定が始まりました。しかしviewportやデバイスピクセル比などモバイルからもたらされた概念が関わり、さらにはブラウザのバグなどもあり混沌としています。今回の議論は、そういった概念の整理に加え、現在出回っているモバイルブラウザの挙動と、プラットフォームとしてどうあるべきかという仕様の方向が異なっていることも背景にありそうです。
なお、デバイスピクセル比については、ほかにもresolution
媒体特性が返す小数点の位がとる幅について議論されています。
仕様の断片化にどう対処するか
Jens O. Meiert氏がHTML WG、CSS WG、WHATWGに、仕様の断片化についてアドバイスをしていました。
CSSはモジュール化というアプローチで策定されていますが、氏は以前より機能が増えすぎていることを問題視していました。また、CSSモジュールだけではなく、WHATWG仕様の一部やHTML仕様、SVGでもセレクタやプロパティが定義されてることに触れ、見通しの悪さも指摘しています。
HTMLについても、WHATWG HTMLとW3CのHTML5、それにHTML 5.1と細かなバリエーションがあります。氏は触れていませんが、拡張仕様やHTML仕様が参照するいくつかのDOM仕様も含めると、HTML関連仕様も数がかなり多くなりそうです。
Meiert氏は、実装する方においては都合がよいかもしれないが、開発者は複数の仕様の違いに戸惑うことを問題視しています。仕様の断片化についてはW3Cの勧告プロセスにあるのではないかと思いますが、たしかに仕様の分割が頻繁で、どの機能がどこにあるのかがわからなくなることしばしばと思います。
Custom Elementsのメソッド名が変更
いろんな「今年注目すべきWeb技術」的エントリで、ここ数年取り上げら続けているWeb Componentsですが、そのいち仕様であるCustom ElementsについてAppleよりコメントが寄せられました。Custom Elements仕様はWeb Componentsの独自の要素を定義するための仕組みを用意します。要素を定義するためのメソッドはこれまでdocument.register()
という名前でしたが、register
という単語1語の名前が汎用的すぎるといったコメントが寄せられました。
こういった名前に関する指摘は自転車小屋の議論に陥りやすく、W3Cで過去に起こった同様の議論でもあまりいい解決を見たことがありません。しかしながら、今回はApple, Mozilla, Googleなどベンダーの開発者からのフィードバックもあり、それなりに思慮深い話になった感じがします。
結果として、仕様はdocument.registerElement()
を使うことになりました。Chromeの実装も変更されています。
その他12月に公開されたWeb標準
- 12月3日付けで、CSS ShapesがCSS WGよりLast Callとして公開されました。大きな変更はTPACでのF2Fにて決定された構文の変更が仕様書に反映されたことでしょうか。
- 12月3日付けで、High Resolution Time Level 2の草案がWeb Performance WGより初公開にしてLast Callというすっとんだかたちで公開されました。Level 2での機能追加は今のところWeb Workersでのサポートとなっています。
- 12月5日付けで、CSS Object Modelの草案がCSS WGより公開されました。カスケードされた後のスタイルや利用されるスタイルといったスタイルを取得するインターフェースや、CSSOMとしてセーフな値にする
CSS.excape()
メソッドなどが新たに定義されています。 - 12月10日付けで、DOM Parsing and SerializationがWebApps WGよりLast Callとして公開されました。
innerHTML
やinsertAdjacentHTML()
を定義する仕様です。 - 12月12日付けで、Performance Timeline、User Timingが勧告されました。
- 12月17日付けで、Pointer LockがWebApps WGより勧告候補として公開されました。
- 12月17日付けで、Input Method Editor APIの草案がWebApps WGより公開されました。IMEの候補ウインドウを描画するAPIが削除されたほか、Microsoftが提案したイベントやインターフェースが追加されました。