最近、Firefox Nightly 44の起動時にセッションを復元するようにしておくと、起動直後にタブ内が真っ白になり、本体のメニューパネルも開けないという事態に遭遇した。アドオンマネージャからマルチプルタブハンドラを無効化すると症状が治まったので、しばらくそのままにしていたのだが、調べてみたところ、2015年10月7日(米国時間)にBug 589199の修正パッチがコミットされたのが原因だったようだ(なお、10月13日にRESOLVED FIXEDとなった)。
同バグの修正により、トップレベルにおけるletおよびconstの扱いは、ECMAScript 2015 Language Specification(通称ES6)の仕様に合わせる形で変更された。その結果、以下のような具体的な影響が出ている。
どのBugで変わったのかは分からないけど、constで宣言された変数がグローバルオブジェクトのプロパティにならなくなってて(これは前からか?)、別のスクリプト内のeval()内で再定義された関数からは参照できないという挙動になったような気がする。
— Piro/「シス管系女子」連載中 (@piro_or) 2015年10月10日
マルチプルタブハンドラだけでなく、ツリー型タブも動かなくなったわけだ。ちなみに、恒例行事になりつつあるが、はてなブックマーク拡張もアウトである。
マルチプルタブハンドラ、ツリー型タブ、テキストリンクなど、Piroさん作の拡張機能に関しては、Nightlyビルドでしのげる。ただし、xpinstall.signatures.requiredをfalseに変更してFirefox側のデジタル署名チェックを回避することが前提なので、Nightly/Auroraチャンネル限定である。
問題は、Thunderbirdの開発陣が"Great JS Breakage"と呼んで懸念する今回の修正が、どの程度の範囲にまで影響するかだ。標準仕様をサポートするものなので、Mozillaが撤回することはまずあり得ない。現時点で有名どころの拡張機能がいくつも引っかかっているところをみると、影響範囲は決して小さくないと考えるべきだろう。
しかも、折悪しくFirefox 44は拡張機能のデジタル署名が必須となる時期である。また、マルチプロセス化(e10s)のA/BテストがFirefox 43 Betaで行われる予定であることから、e10sがFirefox 44リリース版で有効化される可能性は高い。つまり、Firefox 44では、アドオン互換性に大きく影響する措置や修正が重なりそうなのだ。準備期間があるとはいえ、アドオン作者がさじを投げてしまわなければよいが……。
(15/10/15追記)
その後、Breaking changes in let and const in Firefox Nightly 44 | Mozilla Add-ons Blogが公開された。Bug 589199の修正内容について詳しく紹介するブログ記事であり、和訳が待たれる。
同記事によれば、上記修正によって動作しなくなるアドオンは多数にのぼるという。最新版を除くJPMを用いてビルドされたAdd-on SDKベースのアドオンはすべて影響を受けるが、Mozilla Add-ons(AMO)登録分はMozilla側で自動的にリビルドされる予定であるとのこと。この自動的に対処される分を除いても、なお多数のアドオンが動作しないのかは不明である。
Mozillaが、同記事において、SpiderMonkeyの非標準的なletとconstの仕様を改めたとして、アドオン開発者にテストと修正を呼びかけていることからすると、やはり今回の修正が撤回されることはなさそうだ。
(15/12/17追記)
e10sの開発が遅れており、リリース版において拡張機能がインストールされた状態でもe10sが有効化されるのは、Firefox 46以降の見込みだ。なのでアドオン互換性に影響するのは、本文で書いたES6のサポートと、拡張機能のデジタル署名必須化の2つということになる。