Firefoxで署名なしアドオンを使う

FirefoxChromeではブラウザ拡張(Firefox用語だとアドオン)のインストール方法が異なる。ストアからインストールする場合はどちらも大差ないが、手元の開発中のブラウザ拡張をインストールする際は違いが大きいので注意する必要がある。

FirefoxChromeにおいてブラウザ拡張をインストールする際の差異

主な差は、署名の必要性と永続性の2つ。

  • 署名の必要性
    • Firefoxではアドオンに署名がないとインストールできない
      • about:configからxpinstall.signatures.required=falseにすれば署名の検証を強制ではなく任意になる
        • 当然、署名を検証しなくなるので署名なしの危険なアドンもインストール可能になるので注意が必要だ
      • ただし、manifest.jsonbrowser_specific_settings.gecko.idの設定が必要だ
    • Chromeでは署名がなくともインストールできる
  • 永続性
    • Firefoxではマニフェストファイルを選択すればxpi(zip)ではないアドオンをインストールできるが、ブラウザを再起動すると削除される
      • マニフェストファイルの選択によるインストールは、about:debuggingのThis FirefoxからTemporary Extensionsから可能である
    • Chromeではフォルダを指定するとブラウザ拡張をインストールでき、ブラウザを再起動しても削除されない

このため、明らかにChromeの方がブラウザ拡張の開発が簡単である。ただし、Firefoxの施策も充分に理解できる。ブラウザ拡張はストア以外にもファイル(野良ブラウザ拡張)さえ入手できればインストールできる。その際、悪意あるブラウザ拡張か否かは利用者の判断に依存する。このため、判断力のない利用者が野良ブラウザ拡張をインストールすることで、意図せず、悪意あるブラウザ拡張をインストールしてしまう可能性がある。このため、Firefoxではアドオンのインストール条件をChromeよりも厳密に設定されている。

私の自宅での常用ブラウザはFirefoxである。このため、上記の制約により、端末上で開発し常用するためのブラウザ拡張をインストールするには、ブラウザを起動する度にブラウザ拡張をインストールし直す、または、署名を付与する必要がある。前者は手間が大きい。後者はAPI keyやAPI secretをMozillaから取得する必要がある。つまりどちらも手間がかかるのでやりたくない。

このため、Firefox Developer Editionを使うことにした。Firefox Developer Edition(以降Firefox DE)は開発者向けのバージョンという名前のとおり、署名なしのアドオンをインストールできる。また、マニフェストファイルを指定するインストール方法では永続性が問題だったが、署名なしxpiによりインストールは永続性を持つ。このため、問題をすべて解決できる*1

Firefox DEへのブラウザ拡張のインストール

Firefox DEにブラウザ拡張をインストールするには、about:addonsを開き、Extensions->Manage Extensions->wheel menu->Install Add-on from file...を選択する。自作のアドオンは、予めzipファイルを作成しておく。最低限必要なのはmanifest.jsonのみ。私の場合はmanifest.jsonmanifest.json中で指定したjsファイルの2つを選択し、コンテキストメニューを開き、zipに圧縮したものを用意した*2Install Add-on fromfile... で当該ファイルを選択すると、ブラウザ拡張をインストールできた。注意点として、manifest.jsonbrowser_specific_settings.gecko.idが記載されている必要がある*3web-extのページのPackaging your extensionの項を読むと、注意事項の欄で同様のことが指摘されている*4

Firefox DEに移行するにあたり、プロファイルを新規作成してブックマークやインストール済みアドオンを移行するのは手間である。このため、既存のFirefoxのプロファイルをFirefox DEと共用することとした。共用するには、Firefox DEでabout:profilesを開き、Firefoxで使用しているプロファイルを選択して「Set as default profile」を選択すれば良い*5

以上の手順により、Firefox(Firefox DEだが)に署名なしブラウザ拡張をインストールすることができた。Developer Editionを常用するのはやや抵抗があるが仕方ない。

*1:Chromeと同じ状況になっただけである。ただし、アドオンの修正後にzipする必要があるので、Chromeより手間がかかる

*2:Fireofx Developer Edition 110.0b3 (64-bit)とWindows 11 22H2 22621.1105で試した

*3:Manifest V3に限る。Manifest V2ではbrowser_specific_settings.gecko.idは必須ではないようだ。

*4:web-extじゃなくてもっと適切なページがある気がしている。なぜインストールできないのか理解できなくてweb-extの使い方まで調べて初めて気付いた。

*5:Firefox DEで使用した後にFirefoxを起動したらどうなるのか試していない。もしかしてFirefox DEで署名なしブラウザ拡張をインストールしてFirefoxを起動したら使えたりしないだろうか。