Firefoxで署名なしアドオンを使う
FirefoxとChromeではブラウザ拡張(Firefox用語だとアドオン)のインストール方法が異なる。ストアからインストールする場合はどちらも大差ないが、手元の開発中のブラウザ拡張をインストールする際は違いが大きいので注意する必要がある。
FirefoxとChromeにおいてブラウザ拡張をインストールする際の差異
主な差は、署名の必要性と永続性の2つ。
- 署名の必要性
- 永続性
このため、明らかに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.jsonとmanifest.json中で指定したjsファイルの2つを選択し、コンテキストメニューを開き、zipに圧縮したものを用意した*2。Install Add-on fromfile... で当該ファイルを選択すると、ブラウザ拡張をインストールできた。注意点として、manifest.jsonにbrowser_specific_settings.gecko.idが記載されている必要がある*3。web-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を起動したら使えたりしないだろうか。