Firefox アドオン開発の未来

[これは Mozilla Add-ons Blog の記事 The Future of Developing Firefox Add-ons の翻訳です]

Mozilla は今日、Firefox のアドオンへ今後行われるいくつかの重要な変更について皆さんにお知らせします。Firefox のアドオンエコシステムは長年にわたる漸進的かつ有機的な成長を通じて発展してきましたが、以下のような課題を踏まえ、ある程度の抜本的な変更を伴う Firefox の近代化作業が進んでいます。

  • ElectrolysisServo といった新技術の活用
  • スパイウェアやアドウェアからのユーザの保護
  • アドオン審査期間の短縮

これらの改善を可能にする方法をアドオン開発コミュニティの皆さんによく理解してもらえるよう、今日、以下 4 つの関連する変更をお伝えします。

  • Firefox に WebExtensions と呼ばれる新しい拡張機能 API の実装を進めています。これは Chrome や Opera が採用しているアドオンモデルとほぼ互換性があり、複数のブラウザを対象とした拡張機能の開発を容易にするものです。
  • Electrolysis というコードネームで開発されている、より安全で高速なマルチプロセス版 Firefox が近日公開となります。Firefox のアドオンがそれと互換性があるかどうか、開発者の皆さんに 動作確認 してもらう必要があります。
  • サードパーティー製拡張機能が、セキュリティやパフォーマンスを犠牲にしたり、ユーザをマルウェアにさらしたりすることなくカスタマイズ機能を提供できるよう、9 月 22 日リリースの Firefox 41 以降、すべての拡張機能に Mozilla による 検証と署名 が必須となります。
  • XPCOM や XUL を使ったアドオンについて、おおよその廃止予定スケジュールを決定しました。

Firefox のアドオン開発コミュニティのために、これらの変更は、より広範なクロスブラウザアドオン互換性といった利点をもたらしますが、一方で多くの既存アドオンの再開発が必要となります。Mozilla は大きな投資を行い、アドオンに携わり、アドオン開発者を支援するエンジニアやアドオン審査担当者、エバンジェリストのチーム拡大を図っています。このチームはコミュニティと協力して WebExtensions API を改良、完成させ、アドオン開発者が新 API とマルチプロセスへ対応するのを支援します。

開発者に Mozilla の計画について知ってもらい、皆さんにフィードバックを提供してもらう機会を作るため、これらの変更を今日すべてまとめて発表します。私たちはこの移行を極力スムーズなものにするため、できる限りのことに取り組んでいます。私たちは、Mozilla コミュニティとともに、Firefox アドオンの未来を作っていきます。

WebExtensions API の導入

これまでアドオン開発者からは、API のドキュメントを充実させ、より使いやすくして欲しいという声が聞かれてきました。また、多くの Firefox アドオン開発者が、似たような機能を持った Chrome、Safari あるいは Opera 向けの拡張機能も提供していることに気付きました。私たちはアドオン開発をもっと Web 開発のようにしたいと考えています。単独のコードが標準によって規定された挙動に基づいて複数のブラウザ上で動くべきであり、それに関する包括的なドキュメントが複数のベンダーから公開されることが望ましいと思います。

このような目的を達成するため、Mozilla では、WebExtensions と呼ばれる新しい Blink 互換の API を Firefox に実装しています。Chrome、Opera、あるいはおそらく将来的には Microsoft Edge 向けに書かれた拡張機能は、わずかな変更を加えるだけで Firefox でも WebExtension として動作します。この近代的な JavaScript 主体の API には、当初からマルチプロセスブラウザに対応し、悪さをするアドオンやマルウェアのようなリスクを軽減できるなど、多くの利点があります。

WebExtensions は他の Firefox アドオンと同じように振る舞います。Mozilla によって署名され、addons.mozilla.org (AMO) や開発者のサイトを通じて公開されます。この API により、拡張機能開発者は、各ブラウザ向けに最小限の変更と再パッケージを行うだけで、Firefox と Chrome 向けに同じ拡張機能を提供できるようになるはずです。

WebExtensions のプレビューリリースは、現在 Developer Edition となっている Firefox 42 で利用可能です。WebExtensions のテストを始める方法 に関する情報は Mozilla Wiki にあります。この API の少なくとも一部を標準化しようと、Mozilla は他のブラウザベンダーとの議論を始めました。WebExtensions に関するさらなる情報や詳細はこの Wiki に追加していきます。

マルチプロセス Firefox とアドオン

Web コンテンツの実行に OS の別プロセスが使用される Electrolysis プロジェクト の第 1 弾が Release チャンネルへ向けて進んでいます。後続のフェーズでは複数のコンテンツプロセスと改良されたサンドボックス機能が実装されます。レンダリングに異なるプロセスを使用することで、劇的なパフォーマンスとセキュリティの向上を Firefox にもたらすことのできる基礎が築かれますが、一部のアドオン、特にコンテンツに変更を加える拡張機能との互換性に影響があります。しかし、アドオンを引き続き動かせるようにするため、いくつもの対策が用意されています。

  • WebExtensions は Electrolysis と完全に互換性があります。API が成熟し Electrolysis が初期設定で有効になる頃には、これが Firefox 向け拡張機能の移植、開発方法の主流となるでしょう。
  • Jetpack SDK ベースのアドオンは、require(‘chrome’) やコンテンツプロセス内オブジェクトに触れる一部の低レベル API を使用していない限り、今後も動作します。
  • Electrolysis に未対応のアドオンは、シングルプロセスの Firefox にできる限り似せた特別な互換環境で実行されます。アドオンがコンテンツに触れる場合、そのアクセスは クロスプロセスオブジェクトラッパー (CPOWs) を通じて行われます。ただ、CPOWs はシングルプロセス Firefox における同等の DOM 操作と比べてはるかに遅く、ユーザ体験に悪影響をもたらしかねません。また、互換レイヤーは一部のアクセスに対応しておらず、その場合は例外が投げられます。

今後、アドオン開発者には、マルチプロセス Firefox への対応方針について考えてもらう必要があります。

Electrolysis の最終リリーススケジュールは、より多くのユーザによるテストを経て今後数か月以内に決定されます。スケジュールが延期もしくは変更される可能性はまだありますが、以下のような現行のリリース計画に合わせてアドオンを更新すべきだということを開発者の皆さんには理解して欲しいと思います。

  • 8 月 11 日 (Firefox 42 が Developer Edition へ移行)、Electrolysis は Developer Edition で初期設定有効となります (Nightly では既に有効となっています)。
  • 9 月 22 日 (Firefox 42 が Beta へ移行)、Electrolysis が Beta チャンネルで「オプトイン」機能としてユーザへ提供されます。
  • 11 月 3 日 (Firefox 43 が Beta へ移行)、Electrolysis が Beta で初期設定有効となる最初のバージョンです。この時点で、パフォーマンスや安定性に重大な問題を引き起こす Electrolysis 非互換のアドオンをブロックリストへ追加する作業を開始します。
  • 11 月 15 日 (Firefox 43 が Release へ移行)、Electrolysis が Release チャンネルで初期設定有効となる最初のバージョンです。これが現在予定されているリリース日となります。
  • Electrolysis が Release チャンネルで有効となってから半年後、CPOWs とその他の互換性機能が廃止予定となります。必要に応じてより詳しいスケジュールを公開しますが、Electrolysis の一般公開後半年から 1 年の間にそれらに依存しているアドオンは動作しなくなるということを開発者の皆さんは知っておいてください。

Electrolysis チームが、互換性テストのために人気のアドオン一覧を arewee10syet.com へ投稿しています。開発者の皆さんには、上記の手順に加えて、この一覧を参照し、自作のアドオンが Electrolysis 互換かどうかの情報を提供するよう推奨します。

デジタル署名

Mozilla では既に悪質なアドオンに対抗するためブロックリストの仕組みを採用していますが、一部のアドオンがこのブロックリストを回避する手段を講じていることから、ユーザをより確実に守るための追加措置が必要とされています。ブロックリストはまた対症療法的なものであり、危険なアドオンがインストールされてから、それが Mozilla によって特定、ブロックされるまでにユーザが何らかの被害を被る可能性がないとも限りません。Firefox 42 以降、アドオン開発者は拡張機能を公開する前に、それを一度 Mozilla へ提出して審査と署名を受ける必要があり、未署名のアドオンは Firefox 上でインストールも使用もできなくなります。署名に関する詳細は 別記事 を参照してください。

アドオンの審査過程は開発者にとって時に面倒なものであることは認識しています。審査は今のところほぼ人間による手作業であり、拡張機能が初めて提出されてからガイドラインに沿った完全審査を通過するまで数週間から数か月を要することもあります。WebExtensions の主な利点のひとつは、審査がより短期間で済むということです。一般的に、適切な WebExtension を開発するのはより簡単であり、また許可設定システムによって悪質なアドオンをより容易に判別できるようになります。

私たちの目標は審査過程の自動化を推進することで、それによって addons.mozilla.org (AMO) に登録された新しい WebExtensions の審査待ち時間は 5 日に、既存の WebExtensions の更新待ち時間は 1 日から 2 日に、それぞれ短縮される見込みです。署名のために提出された AMO 非掲載アドオンの待ち時間は今のところ 3 日以内となっています。また、有給スタッフとボランティアで構成されるアドオン審査チームの増強を進めており、自動検証ツールも随時改善しています。これらの取り組みによって、すべての拡張機能の審査待ち時間を近い将来に短縮します。

拡張機能の署名は Firefox 42 までは強制ではありませんが、Firefox 40 で既に関連機能は実装されており、ユーザはインストールされている拡張機能が Mozilla による検証済みかどうかを確認できるようになっています。Firefox Developer Edition のユーザは、8 月 14 日以降未署名のアドオンがブロックされていることに気付いたかもしれません。

アドオンの署名に関する今のところの完全なスケジュールは以下の通りです。

  • Firefox 40: 未署名の拡張機能についての警告がアドオンマネージャに表示されるようになりますが、すべての拡張機能は引き続き使用可能です。
  • Firefox 41: 未署名の拡張機能は初期設定で無効化されますが、署名の強制を無効化できる設定項目 (xpinstall.signatures.required) が提供されます。
  • Firefox 42 以降:
    • バージョン 42 以降の Beta および Release チャンネル (42 Beta は Firefox 41 と同時公開) では上記の設定項目が廃止され、未署名拡張機能のインストールと使用が不可能となります。
    • バージョン 42 以降の Nightly および Developer Edition では、署名の強制を無効化できる設定項目が残され、これにより未署名アドオンの開発や使用が可能となります。Release チャンネルを元にした無印版 Firefox も開発者向けに提供されます。この公開は Firefox 42 の Release チャンネルで (またおそらく Beta チャンネルでも) 予定されています。

XUL、XPCOM と寛容なアドオンモデルの廃止

XPCOM と XUL はいずれも Firefox で最も基礎的な技術です。JavaScript でブラウザの大部分を記述できることは Mozilla にとって大きな利点となってきました。Firefox が他のブラウザよりはるかにカスタマイズしやすいのもこれらのおかげです。しかし、それらの技術から自然発生的にできあがったアドオンモデルは極めて寛容です。既存のアドオンは Firefox の内部実装への完全なアクセスを得ることができますが、このモジュール性の欠如は多くの問題を引き起こしてきました。

寛容なアドオンモデルは、裏を返せば Mozilla が Firefox の基礎に変更を加える柔軟性が制限されるということです。Electrolysis によるアドオンへの影響はこの問題の重要な事例のひとつです。CPOWs のような技術によってアドオンの問題を回避することは可能ですが、CPOWs はこの取り組みの中でも莫大な投資であり、それでもまだ十分なパフォーマンスは得られず、やや信頼性に欠けるものです。

Firefox アドオンの動作を可能にする仕組みへの抜本的な変更なしに、Electrolysis、Servobrowser.html といった新技術を Firefox の一部として採用することは不可能です。

ブラウザとアドオンの密接な関係は、Firefox の開発に短期的な問題ももたらします。実際、Firefox の開発がアドオンとの非互換性によって遅れることも珍しいことではありません。最も極端な例では、Firefox のメソッド初期化方法へ行われた変更が、正規表現によって Firefox のコードを改変しているアドオンによる問題を引き起こしたこともありました。アドオンが API を予期せぬ方法で使っていた場合に Firefox がクラッシュすることもあります。

そのため Mozilla では、XUL や XPCOM、XBL に依存したアドオンの開発手法を将来的に廃止とすることを決定しました。まだ具体的なスケジュールは確定していませんが、おそらく今後 1 年から 1 年半の間に行われるでしょう。開発者が準備を始めフィードバックを提供できるよう、今のうちにこの変更を発表しておきます。新しい WebExtension API を使って作られたアドオンは今後も動作します。また、require(‘chrome’) や XUL 要素へのアクセスを提供する一部の低レベル API を除き、SDK アドオンにも引き続き対応します。

私たちが現在直面している大きな課題は、多くの Firefox アドオンが、現行の WebExtensions API や SDK のみで作り直すのはおそらく不可能だろうということです。今後 1 年かけて開発コミュニティからフィードバックを集め、最も人気のある Firefox 拡張機能が必要とする機能にできるだけ多く対応するため、API の開発と拡張を続ける予定です。

私たちは前進し続けます

ここで発表した方針には必然的に多くの妥協点が関わってきます。既に Chrome 拡張機能を提供している開発者は、同じコードを再利用できるという恩恵を受けられます。Firefox 限定のアドオンを作っている開発者は変更を求められます。その際の作業には相当な時間を割いてもらう必要がありますが、Firefox ユーザと開発者の双方にとって、最終的な結果はその努力に見合うものになると思います。

私たちはアドオン開発コミュニティへの取り組みを繰り返し行い、拡張機能の移植、新 API の設計、Firefox を素晴らしいものにする革新的なアドオンの作成などにおいて開発者の皆さんと協力していきたいと考えています。

今後数週間ないし数か月の間に追加情報の公開を続け、ここで発表したそれぞれの変更点をより詳しくまとめるとともに、Mozilla Developer NetworkIRC (#extdev チャンネル)、ニュースグループ といった従来のコミュニケーション窓口を通じてサポートを提供します。

更新: WebExtensions が何をどのようにしてもたらすのか、多くの人から質問が寄せられています。私たちが目指すところや、皆さんが意見を表明してこれらの取り組みに関わる方法について、Bill McCloskey が 追加のブログ記事 を書いています。自分たちが作り、使い、愛するアドオンがどのように Firefox の一部であり続けるのかということについて心配のある人には必読です。

4 件のコメント

  1. Pingback from 【今後はChrome拡張機能版のみ更新されます】当サイト提供Bookmarklet版ツールサポート終了のお知らせ | Toodledo Tips Blog on :

    […] Firefox アドオン開発の未来 | Mozilla Developer Street (modest) […]

  2. Pingback from 2015年8月24日のヘッドラインニュース | GarbWeeks on :

    […] Firefox アドオン開発の未来 | Mozilla Developer… […]

  3. Pingback from もじら組 on :

    […] *1 : https://www.mozilla.org/en-US/firefox/40.0.3/releasenotes/ *2 : https://blog.mozilla.org/addons/2015/08/21/the-future-of-developing-firefox-add-ons/ *3 : https://dev.mozilla.jp/2015/08/the-future-of-developing-firefox-add-ons/ […]

  4. LGA774 :

    正直言って、ここ1~2年の Firefox(と云うより Mozilla)、ユーザーやアドオン開発者の声に耳を傾けてやっているとは到底思えない変更が目立ちますね。

    初見では一瞬 Chrome と見間違う様な外見と操作性で、既存ユーザーやアドオン開発者を無視して Chrome ユーザーに媚を売っている様にしか見えない Australis。
    スピードの為に信頼性と多くのアドオンを斬り捨てようとしている Electrolysis。
    セキュリティの為と称してアドオンやユーザーを雁字搦めにして徹底管理し、”自己責任の下の自由”や”企業や開発者・ユーザーの事情”を全否定するアドオンの署名を巡る対応。
    ブラウザ本体にアドオン、多数のソフトの根幹をなす XUL の切り捨てと、Chrome 拡張との互換と云う Firefox ユーザーにとってはどうでも良く、アドオン開発者にとっては百害有って一利無しの WebExtensions。

    どれをとっても、本当にユーザーからの支持を得られているのか疑わしく、Mozilla の中の人によるゴリ押しで一連の変更が行われているのではないかと云う疑念が浮かぶと同時に、本当にこれで正しかったのか、本当にこの先大丈夫なのかと心配になって来ます。自分としても、正直言って最近のバージョンは(特に非 ESR の安定版は)使っていて嫌になって来ます。

    最近、こんな投稿を見つけました。
    http://forums.mozillazine.jp/viewtopic.php?t=15631&p=55904

    日本語訳らしいんですが、よくよく読んでみると心当たりが幾つも有り、今なら原作者の絶望と怒り、わかる気がします。