Webの未来とブラウザのこれからをデバイス連携から考えた

先日、ブラウザ技術について友人と話す機会があった。

いろいろ、本当にいろいろな話をしたのだが、ブラウザとデバイスの連携についての話でも盛り上がった。

Device APIと言われるような機能を始め、Gamepad APIなど、さまざまなデバイス系のAPIが提案され、実装も開始されている。これにより、従来はOSの上のアプリケーション、すなわちネイティブアプリケーションと呼ばれるものでしか可能でなかったこともブラウザを経由してWebアプリケーションで実現できるようになっている。

それは、デバイスの緯度経度をとることであったり、傾きを得ることであったり、電源状態を把握することであったりする。これらの機能とオフライン機能を組みわせることで、Webアプリケーションは従来の枠組みを越え、より一般のアプリケーションとして利用されていくようになるだろう。

ブラウザはより高機能になり、ブラウザがOSと呼べるような状況にもなりつつある。JavaScriptもWebアプリケーションの進化とともに、多くのことが要求されるようになる。

考え方によっては、これは従来のOSが持っていた役割をブラウザが持つことになると言えるのかもしれない。レイヤーが一段上がった部分で多くのことができるようになった、というのは事実だろう。

だが、ここでブラウザという世界で極小的にこの現象をとらえるのは間違いではないかと思う。

今、インターネットの世界で起きているのは、ブラウザを高機能にすることがゴールではない。Webアプリケーション、いや、クラウドアプリケーションと呼んだ方が良いのかもしれないが、クラウド全体で機能するアプリケーションを作ることである。

このようなコンテキストで考え、ブラウザはクラウドアプリケーションをより良くするために必要不可欠なフロントエンド部分と捉えるほうが良い。そうすると、それに必要なものは、快適なレンダリングスピードを実現することであり、オフラインなどでも利用できるストレージ技術を提供することであり、最適化された通信をクラウド側とともに実現することである*1がわかるであろう。

デバイスの連携をブラウザ技術として考えると、OSのが持っていたデバイス連携機能をいかにブラウザとして取り込むかが必要になる。だが、それが今日の状況で本当に最適なことかは議論の余地がある。マイクロソフトがWindowsのデバイスドライバを充実させるために、何をしたか考えると、それを再度、ブラウザで行うのが本当に良いかは考えたほうが良い。数バージョン前までは、Windowsにデバイスを接続するたびに、CDを要求されたりすることが多かったろう。運が悪いと、ブルースクリーンに泣かされることも多かったに違いない。現在では、単純なデバイスならばOSが装備する標準ドライバで事足りる*2し、クラッシュなどの最悪の自体に陥ることもほとんどない。これは、Windowsが数バージョンを経て、デバイスドライバの階層を整理したり、サードパーティと協力し、デバイスドライバの安定性に務めた結果だ。

これが実現できたのは、Windowsが共通プラットフォームとして位置づけられているからであるという側面も忘れてはいけない。

ブラウザで、さまざまな異なるデバイスの連携を図らなければいけないとしたらどうするのが良いか。1つは、マイクロソフトなり、OSベンダーが行ったのと同じことをブラウザで行うことだ。だが、それはブラウザという単体のコンポーネントを見ているに過ぎない。

もちろん、ブラウザでデバイスの直接サポートが必要なことも多くある。Gamepadがそうだし、WebCamなどもそうだ。レイテンシーが最重要視される部分では、ブラウザ自身が直接デバイスをサポートする必要がある。

だが、それ以外の場合、大きなクラウドアプリケーションの中でそのデバイスが接続されれば良い。すなわち、デバイスごとに直接ネット経由でクラウドアプリケーションに接続し、アプリケーションの構成要素になるという方法もでてくる。特に、疎結合されるような連携の場合には、このほうが柔軟性も高い。

先ほどのOSのレイヤーをブラウザが担うようになるのではないかとういメタファーで言うならば、OSのレイヤーを大きなクラウドアプリケーション全体で担うようになるとういことである。

もちろん、このような世界が簡単に実現されるわけではない。クラウドアプリケーションの持つコンテキスト、つまり異なるデバイスが1つのクラウドの要素であるということをいかに実現するか。それは認証であったり、セッション管理のようなものまで含む。そうなると、おそらくユーザーの手元にあるであろうデバイスを束ねる役目としてのブラウザへの期待は大きくなろう。結果的に、ブラウザがやはり頑張るしかないかもしれない。

だが、設計の段階では、近視眼的にならずに、ブラウザは大きなクラウドアプリケーションの構成要素の1つであり、デバイスもまたしかり、ということを忘れないでいるべきではないだろうか。結果的にブラウザへの期待が大きくなっても、大きな視点で見ることは決して無駄にはならないと思う。

*1:WebSocketなど

*2:後でネット経由で最適なドライバに置き換えることもできる