読者です 読者をやめる 読者になる 読者になる

ふろしき.js

Web + Mobile + UX + Performance Tech

さらばPointer Events!まだまだ落ち着かない、入力デバイスのWeb標準事情

人々にとってのコンピュータとはデスクトップのみを指す言葉ではなくなり、モバイルやペンといった様々なデバイスが人々の暮らしに関わるようになりました。こうした事情を鑑みて、Microsoftは「Pointer Events」というWeb標準の策定に力を入れていました。彼らは、どんな入力デバイスが備わっていても、共通の手段でそれを扱えることが、Web開発者の望みだと考えていたのです。

IE10ではベンダプレフィクス付き、IE11からはベンダプレフィクス無しで実装されました。そのことを受け、私も一年以上も前に「よし、そろそろだぜ」とブログでPointer Eventsを取り上げました。

ただ、今になってからそれを取り消します。Pointer Eventsは現時点では、あまりオススメできません。どうしても使いたいなら、クロスプラットフォーム面に細心の注意を払ってご利用下さい。

何が起きたのか?

Microsoftは、Appleの特許問題に負けず、Webに共通のスクリーン入力の手段を模索し続けました。その成果として、Pointer Eventsはついに2013年の5月に「勧告候補」というステータスとなりました。

f:id:furoshiki0223:20150206183945j:plain

ところが、Googleからは「Pointer EventsはWebの未来じゃない」という判断がされたようです。2015年2月のChromeでも実装されておらず、Firefoxも動作しません。勧告候補とは呼べないほどに、サポート状況は壊滅的です。もはや、IE独自機能と言っても過言ではない状況と言えます。

f:id:furoshiki0223:20150206185335j:plain

どうしてこうなったのか?

「当初の予定よりも、世の中が変わってしまった」というのが最大の要因です。人々はメインのコンピューターとして、デスクトップよりもモバイルを選択するようになりました。こうした状況を鑑みて、Googleは2014年頭から、BlinkはモバイルWebに力を入れると宣言しましたが、入力についてもその要求は大きく変化したようです。

以下のスライドは、GoogleのRick Byers氏が、2014年の6月に公開したプレゼンテーション「Touch events vs. Pointer events in Blink」中の一枚です。

f:id:furoshiki0223:20150206192958j:plain

彼らは、モバイルファーストであること、早くデフォルトの機能として落ち着くこと、そして、モバイルのネイティブアプリケーションのようにリッチであることを高いプライオリティとして持っており、こうした中でPointer EventはBlinkに合わなくなっていると述べています。また、Pointer Events相当のものが必要というのであれば、Polyfillに頼ればいいと考えているようです。

その後、2014年7月のW3CのMLにて、彼は次のように語っています。(※「Blink does not plan to implement pointer events」より一部を抜粋し意訳)

「これからも、Pointer Eventsのワーキンググループには関わり続ける予定だ。私たちが解決しようとしている問題は本質的に同じで、APIがどんな仕様であるかだ。少なくとも私たちは、すでに共通するタッチアクション用のAPIを持っている。様々な意見が入ることなく決断が行われることは望ましくない。Webプラットフォームが長期的に健全であるために、私たちは様々な技術的な意見を取り込み、ベストな方法を探るべきだろう。複数のブラウザベンダ間で協力しプラットフォームを進化させていくこと、Webの標準化を進めていくこと、これらに対して、Blinkチームはこれからも深く関わり続けていく。マイクロソフトが成し遂げたことは、本当に素晴らしいことだ。これからも、あなた方は我々とともに、現状のAPI設計の欠点を埋めていき、新しいイベントモデルを探っていけるはずだ。 」

"I plan to continue to participate in the working group, as the problems we're trying to solve are essentially the same regardless of the specific form of the API and we have at least the touch-action API in common. I hope it goes without saying that this decision reflects only a difference in technical opinion about what's best for the long-term health of the web platform. The blink team continues to be deeply committed to evolving the platform only through the collaboration of multiple browser vendors and the web standards process. We have deep respect for the work Microsoft has done here, and I'm optimistic that we will find a way together to leverage the advancements in input API design without the drawbacks of introducing a new event model."

【ここから下、2015/2/14に追記】
@kanreisa氏との議論もあり、「さらば!」と投げ出すだけだと辛いので、Pointer Eventsと「さらば!」しなくて良い方法を記述しました。@kanreisaさん、ありがとうございます!

Pointer Eventsに残された復活の道は?

jQuery FoundationのKris Borchers氏(@kborchers)に確認したのですが、2015年2月現在、状況は変わっていないようです。Blinkチームは、Pointer Eventsが世の中から適合されることを待っているという状況です。ようは、シェアの問題ということになるのでしょう。

f:id:furoshiki0223:20150215152710j:plain

したがって、人々がPointer Eventsを活用し、Pointer Eventsを必要とすれば、Blinkチームも実装に踏み切ることができるでしょう。そこで、Pointer Eventsがこれから復活するために必要な2つの道をご紹介します。

1. jQuery FoundationのPEPの普及

BlinkチームがPointer Eventsの実装計画を取りやめた後、Google(Polymerチーム)はjQuery Foundationへ、Pointer Events Polyfill(PEP)を寄贈しました。今もなお、Pointer EventsのPolyfillは維持し提供されており、フォールバックによりPointer Eventsの機能を活用することが可能です。

もし、このPolyfillライブラリの活用が広がれば、Blinkチームもそのニーズに答えようと実装に踏み切ってくれるでしょう。

2. ペンデバイスの普及

現在、ペンデバイスの入力を行うための専用のイベントが存在せず、Pointer Eventsを利用するしか道は残されていません。したがって、ペンデバイスが普及すれば、必然的にPointer Eventsが必要となり、Blinkも早急に実装することが求められるでしょう。

広告を非表示にする