Web ブラウザは Web に対する GUI シェルである

2年くらい前から個人的に色んな場で話しているんだけど、現状のWebブラウザには「HTML5 で導入された API 群に対して、ブラウザ側が適切なUIを提供できていない」という問題点がある。

これについて分かりやすい例を挙げると、cookieの管理ビューはあるのにDOM storage の管理ビューが無いこととか(この2年間でChromium先生は実装したけど)。

よくよく考えてみれば、だいたいのブラウザには現在保存している cookie をユーザーが閲覧するための機能があるのに、DOM storage や IndexedDB に何が保存されているのか、そもそもどこのドメインによって保存されているのかすらわからないというのは奇妙な話なんだ。何故なら、どれもユーザーのプライバシーに関連する情報の保存用途に使われるからだ。最近はトラッキングに関連する話題としてトラッキング cookie がやり玉に挙げられているけど、別に cookie じゃなくて localStorage にトラッキング用の識別 id を保存して使う事だってできる(ここら辺の細かい話については mala さんが数号前の WEB+DB PRESS だったか何かに詳しく書かれていたはずなので、そちらを読むと良いです)。ブラウザに保存されているローカルデータに限っても、ユーザーによる参照が容易な方が良いであろうことは明白だ。

別の話として、現在、Webブラウザ上で JavaScript から WifiBluetooth、端末の電源状態にアクセスするための API の策定が進んでいる。これはもう OS と変わらない。低レイヤーにもアクセスできるプラットフォームとして、ブラウザエンジンは進化してきている。

だけど、Web ブラウザはブラウザエンジンだけで構成されているわけじゃない。現に自分たちは Gecko じゃなくFirefoxというUIの被さったものを使っているし、WebKit ではなく Google Chrome というUIの被さったものを使っている。

つまり、Web ブラウザは、ブラウザエンジンによって抽象化された Web の広大なリソースを使うための GUI シェルなんだ。GUI シェルである以上、Web ブラウザはそれにふさわしい 機能を取り揃えて行く必要が出てくるんだ。ただWebを見るだけだったら、極端な話、エンジン直結の WebView でも全く問題はない。そこで、Webブラウザとブラウザエンジンを分つものを考えて行かなければいけないんだ。

もちろん、そこには「複数のページを切り替えるのはどうするのがよいか(ウィンドウマネージャはどうあるべきか)」といった方針の違いも出てくる。そうした方針の違いはあれども、クロスブラウザで互換性のある開発者向けの API を提供している以上、それに対する一定の解答をちゃんと実装していく必要があると僕は思っている。

そうした「WebのGUIシェル」という視点で再度 Webブラウザを見渡してみるとどうだろう。結構色んな物事が見えてくる。一大バズワードになった「HTML5」という時代を乗り越えて、開発者向けの API 仕様が充実し始めた今、何が足りないのか、何が必要なのかが見えてくる。

個人的にGUIシェルとして本当に上手にやってるなーと思うのは Chromium/Google Chrome。彼らは既に Cookie と同様に各種ローカルストレージが、どこのドメインから保存されているのかを閲覧できるビューを持っている。他にも、ページ閲覧時にページ側に許可するAPIパーミッションについて簡単に確認できる機能もあったりするOS XChromiumだと、DOM fullscreen 時にも上端からニョキっとタブバー・ツールバーを引っ張り出せたりするんで本当に芸が細かいと感じてる。Androidにすっかり食われて日陰者なイメージのあるChrome OSのGUIシェルの各OSへのportみたいな役割があるからだろうか、細かい設計思想に好みはあれども、全般的によく考えられている印象がある。

Chromium を褒めた一方、では他のブラウザはどうなのかという話については、正直どれもこれも似たり寄ったりだなーという印象。殆どは開発者ツールさえ使えば cookieDOM storage くらいは眺められるし。

とはいえ、それなりに Firefox にコミットしている身である以上、Firefox に関しても一応語らなければなるまいて。

率直に言って、 現状の FirefoxAPI に関連する UI という点では非常にマズい(こういうこと書くと嬉々として誤解したがる人がいるので釘を刺しておくと UI の実装状況についての話ね)。devtools の統合が進んでいるとはいえ、ローカルデータ関連の devtools の統合が遅れに遅れていて、Firebug などの外部アドオンを入れない限りは cookie 以外のローカルデータを GUI で閲覧する方法が皆無というのは最悪だと思う。そもそも UI 機能の多くが飲み込む際に消化不良起こして微妙なバグっぽいものが残ってる問題もあるんだけど。

Firefox の Web 関連の API の UI が微妙きわまりないというのは、問題の範囲としては大きくて、Web をTier 1 プラットフォームにすることを押し進めている Mozilla のメインプロダクトがこの体たらくというのはどう考えてもマズい。おまけに Do Not Track などを通じて、ユーザーのプライバシー権利の啓蒙みたいなことをやってるのに、肝心の Firefox でプライバシーに関連するデータが見れないのはどう考えても奇妙でやっぱりマズいと思う。

(devtoolsに限ればローカルデータのデバッガは一応プランとしてあったはずなんだけど先送りしてるのが現状だし、それ以外に関してはどういうプランなのかイマイチわからない)

(contributor 的にはそういう方面もやっていきたいんだけど、UI関係はネゴシエーションのコストがかかりすぎるので、実装以前に提案さえなかなかできていないのが現状)

そろそろ話を戻す。

とまあ、こんな辺りで本筋に話を戻すと、HTML5という謎ブームでWebプラットフォームが大盛り上がりしてるorしてたけど、その一方で具体的な実行環境である Web ブラウザの GUI については、あんまり注目されてないのはさすがにマズいんじゃないかなーと思った訳です。

デベロッパ的には自分のコードから触れる API の標準化に目がいきがちだけど、 その API を使った場合、実行環境であるブラウザはどのように動作するのか? その動作と上手く連携させて、もっと効果的にアプリケーションなりページなりを操作してもらうためにどうするのか?ということについて考えてみた方が良いんじゃないかという問題を提起したいと思います。

終わり