新春特別企画

2016年のウェブブラウザ拡張機能

この記事を読むのに必要な時間:およそ 5 分

バラバラだった拡張機能の開発手法

Firefox,Chrome,そしてIEという主要なウェブブラウザを3つ取り上げましたが,それぞれの拡張機能の開発手法について,改めて表にまとめてみましょう。

表1 ウェブブラウザごとの拡張機能の対応状況

Firefox Chrome IE
機能名称 拡張機能 拡張機能 アドオン
使用技術 XML, JavaScript, CSS HTML, JavaScript, CSS C++, C#
導入方法 Add-on for Firefox Chromeウェブストア 自分でインストール
できること ほぼ何でも可能 APIの提供範囲 I/Fの提供範囲
公開数 非常に多い 非常に多い 非常に少ない

全く異なる経緯,構造,技術,そして思想でそれぞれ作られてきたウェブブラウザですので,その機能を拡張するための方法が異なることは,ある意味自然なことです。しかし,ウェブブラウザはもちろん「ウェブページを表示する」という共通的な機能を提供するアプリケーションであり,それを補佐してくれる「追加でほしいなと思う機能」も個々のウェブブラウザでそう違うものではありません。

少なくとも,FirefoxとChromeに関しては,似たような機能を提供する拡張機能がほぼ必ずどちらにもあります。ただし,それらの中身は全く異なる実装なのです。

2015年に起きた思いがけない動き

昨年,Chromeは順当な機能改善が進みましたが,その他のウェブブラウザでは非常に大きな発表や動きがありました。

Edgeが拡張機能の仕組みをサポート予定と発表

MicrosoftはIEとは全く別のウェブブラウザである「Edge」をWindows 10に合わせてリリースしました。ActiveXやVBScriptなど既存の資産はEdgeで動きません。IEは今後後方互換性を保持する理由のみで提供が行われます。つまり,IE側に新しい機能が提供されることはないと考えてよいでしょう。ユーザが利用するウェブブラウザも,IEからEdgeへと促されていくはずですので,IEのシェアは結構な割合で下がっていくことが予想されます。

Edgeという新しいウェブブラウザの登場だけでも大きなニュースなのですが,2015年4月29日に行われたMicrosoftの開発者向けイベントBUILDにて,将来Edgeに「HTMLやJavaScriptを使った拡張性がもたらされるだろう」ということが発表されました

図9 Welcoming Developers to Windows 10 - Windows Blog

画像

さらに,そのイベントのKeynoteの中で,Edge上で動作するいくつかの拡張機能のデモも行われました。特に具体的な言及はなかったのですが,複数のメディアは「少ない修正で,ChromeやFirefoxの拡張機能をEdgeに移植できるようになるだろう」と伝えています。

これらの記事によって,⁠EdgeはChrome互換のAPIを搭載するのでは?」という憶測が広がりました。

FirefoxがChromeと互換性を持つ仕様を正式に採用

Edgeに関する上記の発表が行われた約4ヶ月後の2015年8月21日,Mozilla Add-ons Blogにて,FirefoxのAdd-onsの仕組みを一新することがアナウンスされました

図10 The Future of Developing Firefox Add-ons

画像

このブログポストの内容は,Firefoxを今までメインで使用してきたユーザ,そしてユーザに向けて拡張機能を作ってきた開発者にとって,非常に大きな分岐点となる変更が書かれていました。要約すると,次の2点です。

  • Chrome拡張機能と互換性のある新しいAPI「WebExtensions」を採用すること。
  • XULおよびXPCOMを廃止する予定であること。

WebExtensionsという名称の新しいAPIは,実際にはChrome拡張機能のAPI仕様そのものです。Chrome向けの拡張機能を作ったことのある方であれば,WebExtensionsの解説ページを見れば,本当に全く一緒の仕様であることが把握できると思います。実際,API Referenceなどは,ChromeのAPI Referenceへのリンクになっています。

図11 WebExtensions

画像

Mozillaがなぜこのような大きな仕様変更をFirefoxに行うことになったのか,その理由は上記のブログポストで詳しく説明されていますが,ポイントは次のとおりです。

  • 現在のAdd-onsはFirefoxの非常に深い箇所まで入り込んでいるため,Firefoxのクラッシュの原因になることもあった。
  • 一定のセキュリティを確保するためには,現状のAdd-onsでは自由が効き過ぎる。
  • Firefoxのマルチプロセス化(Electrolysis)を行うためには,現状のAdd-onsの仕組みでは対応できない。

つまり,すべてのAdd-onsを動作させつつFirefox自体の進化を続けることは既に限界だった,という非常に辛い状況だったことが説明されています。

また,本当かどうかはわかりませんが,MicrosoftがEdgeの拡張機能に関する発表を行ったことが,Firefoxの上記の判断の理由になった,ということを言う人もいます。筆者の個人的な考えとしても,全く影響がなかったとは言えないのでは?と思っています。

Firefox 42 Developer Editionから,WebExtensionsを実際に試せるようになりました。Chromeと比べてサポートされているAPIはまだ少ないですが,Chrome拡張機能の多くを比較的少ない変更でFirefoxで動かせるようになっています。詳しくは,2015年11月15日に行われたFirefox Developers Conference 2015 in Tokyoというイベントで筆者が発表した際の資料動画でWebExtensionsに関する情報をまとめていますので,ぜひご覧になってください。

既存のFirefox拡張機能はどうなる?

WebExtensionsに対しては,Firefoxの拡張機能を今まで作ってきた開発者や,便利な拡張機能を使い続けてきたユーザによって,大きな反発が起きています。例えば,WebExtension API Ideasの投票第1位は「Drop webextensions」です。

図12 WebExtension API Ideas

画像

実際には,今までの拡張機能を引き続き動作させるための議論も行われています。MozillaのBill McClosky氏は自身のブログの中で,多くのユーザを抱えているいくつかの拡張機能をWebExtensions環境でも動作させるためにどうすれば良いか,そのアイディアを募集したいと書いています。投稿されたアイディアは,Mozillaの関係者によって整理され,WebExtensions/Futureにて追加APIの候補が掲載されています。

図13 WebExtensions/Future

画像

また,NoScriptという拡張機能の作者から,native.jsというXULなどを操作するための新規APIの提案がなされています。このような議論が進むことで,既存の拡張機能が引き続きFirefoxで動作するのではないかと期待されています。

著者プロフィール

田中洋一郎(たなかよういちろう)

Google Developer Expert(Chrome担当)。Mash up Award 3rd 3部門同時受賞。『開発者のためのChromeガイドブック(Google Expert Series)』を出版。

Blog:https://www.eisbahn.jp/yoichiro
Twitter:@yoichiro