Mozilla Flux

Mozilla関係の情報に特化したブログです。

Google Chromeの拡張機能が選んだ道

Google I/Oで、Google Chrome(以下Chrome)の拡張機能に関するプレゼンテーションが披露され、その資料がChromium Blogで公開された。そこには『ブラウザはどこまで自動でアップデートすべきか』で示した疑問への回答も一部述べられており、とても面白いスライドだ。

スライドによれば、Chromeの拡張機能は、HTML/CSS/JavaScriptを含むzip形式のアーカイブが本体で、そこに署名とマニフェストが加わる。CRXファイルと呼ばれるそのパッケージは、Mozilla Add-onsのようにGoogleがホストするらしい。ユーザーがCRXファイルをインストールした際、Chrome本体の再起動は不要だ。

拡張機能のアップデートに関しても、Chrome本体と同様、完全に自動で行われ、この際も本体の再起動は不要とされている。

拡張機能は、ツールバーやサイドバーなど、ChromeのユーザーインターフェイスをWebページのように扱い、開発者はWebページを書くようにして拡張機能を開発できるそうだ。それぞれの拡張機能には独立したプロセスが割り当てられ、ブラウザプロセスというサーバーを通じて、各タブのプロセスにアクセスする。また、将来のChromeと前方互換性があるという。

以上のような簡単なまとめを見るだけでも、かなり思い切った仕様であることがわかる。最近、Chromeは本体のメジャーアップデートを完全に自動の形で実施したばかりだが、アドオンに関しても同じ形式での自動アップデートを予定している。

ところで、前記『ブラウザはどこまで〜』で筆者が示した疑問は二つあった。本体と拡張機能の自動アップデートを前提としたうえで、1)本体の安定性と2)アドオンの互換性をどのように確保するかというものだ。

1)について、Googleは、拡張機能ごとに独立したプロセスを割り当てることにした。ある拡張機能のプログラムに問題があれば、そのプロセスの中でクラッシュが起きるかもしれないが、そのときは該当するプロセスを消滅させれば、他は影響を受けない。アドオンだけでなく、Webページが表示されているタブのプロセスからも切り離されているので、ページが巻き添えになることもない。

他方、2)については追加の発表を待つ必要がありそうだ。資料には「Forward compatible」とあり、これをそのまま受け取れば、たとえばバージョン3向けの拡張機能がバージョン2でも動くという話にしかならないからである。

Chromeは本体が自動的にアップデートされていくので、古いバージョンのユーザーはほとんどいない。したがって、最新バージョンをターゲットにした拡張機能が古いバージョンで動くことにさしたる意味はない。そうすると、Googleは実質的に後方互換性の話をしたのだろうか。つまり、バージョン2向けの拡張機能がバージョン3でも動くといった状況だ。

追加の発表を待つと言ったのは、そのあたりの説明が全くないからだ。ただ、後方互換性を確保できないと、本体のメジャーバージョンが自動で上がるとともに、拡張機能がまとめて使えなくなる事態に陥ってしまう。

ここで、ヒントになりそうなのがMozilla LabsのJetpackである。Jetpackは、APIの後方互換性を維持しつつ、新しいAPIを追加することでFirefox本体の機能強化にも対応する予定だ。JetpackがChromeの拡張機能を強く意識していることも考慮すると、Chromeが「APIは変更しない。ただ追加するのみ」というポリシーを採用している可能性は充分にある。

とはいえ、Jetpackにそれができるのは、エンジン部分が本体とFeatureの間に挟まっていて、しかもAPI群をシンプルに保つ方針だからで、ふつうに考えると、Chromeで同じことをすると、本体のAPI群がどんどん膨らんでいくことになる。バージョンアップしてもそれらをすべて機能させないといけないのだとすると、開発上の大きな制約になるように感じられる。

もう一点Googleからの説明がほしいのは、Chromeがどのくらい強力な拡張機能まで作成可能なのかである。拡張機能の開発のしやすさを売りにするのはいいとして、将来的に、本体のシステムと深く統合された拡張機能は作れるのだろうか。たとえば、FirefoxでいえばTab Mix PlusやAll-in-One Sidebarのような高機能のアドオンがChromeに移植できるようになれば、それらの作者はともかく、移植にチャレンジする人は出てくるだろう。そうした状況はChromeの支持を広げるうえで望ましいといえる。もちろん具体的なAPIは検討の段階なのだろうが、Jetpackがターゲットとなるアドオンを挙げているのを見るにつけ、Googleも同じことをすべきではないかと思う。

最後に、Chromeの拡張機能のデメリットらしきものを一つ挙げておこう。それは消費するリソースの多さだ。拡張機能のプロセスごとにリソースが割り振られ、しかも動作時には本体のプロセスを介した通信が必須。スピード面はChrome本体の処理能力の高さでカバーするとしても、メモリ消費量は多くなりそうである。