Firefox に乗り換えよう！ 〜拡張機能を移行する〜

# はじめに

## Firefox > Chromium

Chromium 系ブラウザ (Chrome, Edge など) では**2024年6月**から Manifest V2 拡張機能が**無効化**され[^1]、広告ブロックなどの拡張機能が使えなくなります。僕は長らく Chrome を愛用してきましたが、[uBlock Origin](https://addons.mozilla.org/ja/firefox/addon/ublock-origin/) やその他の拡張機能が使えなくなるのは耐えられないので、Firefox に移行することにしました。

最初は使えなくなるサイトや機能があるのではないかと不安でしたが、Firefox をはじくようなサイトは [User-Agent Switcher and Manager](https://addons.mozilla.org/ja/firefox/addon/user-agent-string-switcher/) で粛清できますし、Chrome 限定の機能といわれているページ全体翻訳や Google レンズも [TWP](https://addons.mozilla.org/ja/firefox/addon/traduzir-paginas-web/) や [Search on Google Lens](https://addons.mozilla.org/ja/firefox/addon/search-on-google-lens/) により解決できるので問題ありませんでした。むしろコンテナー[^2]という機能があるので手放せなくなっています。

特に [Floorp](https://floorp.app/ja/) という Firefox ベースのブラウザは、サイドパネルや userChrome.js[^3]、PWA といった追加機能が便利なのでメインとして使用しています。

## 拡張機能の移行

しかし、Chrome Web Store にしかない拡張機能が使えないことが不満点でした。その多くは Manifest V2 であり、2024年6月に Chrome Web Store から**削除**されてしまいます。そのため、削除される前に急いで拡張機能を移行させることにしました。

移行した拡張機能は、以下の3つです。

- [Comfortable Atcoder](https://chromewebstore.google.com/detail/comfortable-atcoder/ipmmkccdccnephfilbjdnmnfcbopbpaj?hl=ja)
- [AtCoder Color Mark](https://chromewebstore.google.com/detail/atcoder-color-mark/dogcmibkiolcdafifopmnghhlajpbmga?hl=ja)
- [uAutoPagerize](https://chromewebstore.google.com/detail/uautopagerize/kdplapeciagkkjoignnkfpbfkebcfbpb?hl=ja)

(uAutoPagerize については Firefox アドオンのバージョンがかなり古いので Chrome Web Store のものを移行することにしました。)

次からは、その移行手順を解説していきます。

# 手順

## ソースコードのダウンロード


https://nullnull.dev/blog/how-to-view-the-source-code-of-a-chrome-extension/

に従って Chrome Web Store からソースコードをダウンロードします。おすすめは [Extension source viewer](https://addons.mozilla.org/ja/firefox/addon/crxviewer/) を使う方法です。

そして `about:addons` の設定マークから「アドオンをデバッグ」を開き、「一時的なアドオンを読み込む...」をクリックしてダウンロードしたソースコードを読み込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/903434/e9ca462a-b7ff-ed28-2c54-8913eebec857.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/903434/6704b4b2-38f4-3d37-9f6c-35a468669e4e.png)

## manifest.json の修正

読み込み時に出たエラーをもとに `manifest.json` を修正していきます。

- `key`, `update_url`, `differential_fingerprint` を消す
- `background.service_worker` を `background.scripts` に置き換える
- `sandbox.pages` を `web_accessible_resouces` に入れる
- `option_ui.browser_style` を設定する

といったように修正します。

また、**必ず**次の id を指定する必要があります。id は適当に決めます。

```json
"browser_specific_settings": {
    "gecko": {
        "id": "addons@example.com"
    }
}
```

## ソースコードの修正

https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities

上のリンクを参考にしながら、devtool や「アドオンをデバッグ」の「調査」でエラーが出て動かない個所を修正します。ここが一番面倒です。
※ここで、Firefox の `host_permissions` はユーザーの許可が必要 [^4] なことが罠だったので注意する必要があります。

僕の場合は、
- `fetch` で相対パスを使えない (Comfortable Atcoder)
- `chrome.runtime.getBackgroundPage` はシークレットモードで使えない (Substital でのバグ)
-  Manifest V3 では、Background で `http` の `fetch` ができない (uAutoPagerize)

といった問題を直す必要がありました。(uAutoPagerize の問題はどうしても解決できなかったので、最終手段として Google Cloud Functions で `fetch` したものを経由するようにしました...)

## Firefox へのインストール

https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox?as=u&utm_source=inproduct

の最後に書かれているように、 `about:config` から `xpinstall.signatures.required` と `extensions.langpacks.signatures.required` を `false` に設定します。(**Firefox Developer Edition** や **Firefox Nightly** でないとできないようです。**Floorp** でもできました)
また、ついでに https://at.sachi-web.com/firefox_always_enable_addons.html に従ってすべてのサイトでアドオンが使えるようにしておくといいです。

その後、`about:addons` の設定マークの「ファイルからアドオンをインストール」でアドオンをインストールします。(id を指定しなかった場合、ここでアドオンが壊れていると言われます)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/903434/fa41c32c-5949-3037-7bf1-d59f2396b30a.png)

次のような表示になれば正しくインストールできています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/903434/e9573c40-ca3c-ff4d-9713-e9cce6988110.png)

# 終わりに

Firefox はいいです。Chromium の Manifest V2 完全廃止を機に、Firefox や Firefox 派生ブラウザに移行してみてはいかがでしょうか。(僕は [Floorp](https://floorp.app/ja/) をおすすめします。)

V2 拡張機能を移行するならなるべく早めにしたほうがよさそうです。

最後までご覧いただきありがとうございました。

[^1]: https://developer.chrome.com/docs/extensions/develop/migrate/mv2-deprecation-timeline?hl=ja より
[^2]: [Facebook Container](https://addons.mozilla.org/ja/firefox/addon/facebook-container/) などで個人情報を守れる
[^3]: Floorp 設定の「レガシーコンポーネントを有効にする」から使える。[Tab Mix Plus](https://tabmixplus.org/) などが便利
[^4]: https://discourse.mozilla.org/t/host-permissions-not-allowing-cors-requests/106959 より