[小ネタ] Chrome 機能拡張を Firefox で使うメモ

弊社しょいとが弊社社員のためにつくった Chrome 機能拡張の恩恵に預かりたかったので、 Firefox でも動かそうと頑張ったときのメモです。移植とかではなく、WebExtension の力を信じてそのまま動かしてみます。
2019.10.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、 Firefox 使ってますか!(挨拶

レガシーを大胆に脱ぎ捨てて大幅な速度向上を達成した Firefox Quantum が世に出て間もなく 2年が過ぎようとしています。このとき Firefox は機能拡張(Add-on)の機構として、 Chrome と同じ WebExtension API に全面移行しています。

ということは、
弊社社員のしょいとが作成した↓の機能拡張も、 Firefox で動くかもしれないということになります。

Developers.IOのブログ記事編集者を少し助けてくれるChrome拡張を作った話 | DevelopersIO

実際に試してみました!

なおこの話は、いちおう制作者ご本人も把握されているという前提ですすめます。Slack で Reacji もらったので多分あってるはず!

注意点

機能拡張パッケージの入手方法についてはここではふれません

気付くひとは簡単に気付くと思いますが、あんまり白い話でもないので一応ここでは触れないことにします。
正攻法としては、動かしたい機能拡張の作者に頼んで入手することだと思います。

再起動するたびに読み込み(インストール)が必要です

Firefox はローカルから読み込んだ機能拡張を「一時的なアドオン」として扱います。

パッケージ化とインストール - Mozilla | MDN

これは Firefox を再起動するたびに消えてしまうので、都度再インストールする必要があります。

再起動後にも残す方法はあるのですが、それはそれでちょっとめんどくさい(主観)なので、今はそのようにしています。

動かないこともある

Chrome 用につくられたものを強引に Firefox で動かそうとしているので当然ですね。
ここでは、そういったものを動くようにすることについては一切触れません。

手順

大きく下記の手順となります。

  1. 機能拡張のパッケージを入手する
  2. Firefox で読み込んでみる
  3. 動かなかったら泣く。動いたら喜ぶ。警告は見ないふりをする。
  4. 再読み込みのときのためにパッケージ化する

1. 機能拡張のパッケージを入手する

前述の通り、入手方法はここでは割愛します。

入手した機能拡張はZipなどで圧縮せず、まずはフォルダを作ってそのなかに展開しておいてください。
例えばですがこんな感じのディレクトリ構造になっていると思います。

~/shoito_extension/
├── LICENSE
├── README.md
├── _metadata/
├── docs/
├── icons/
│   ├── icon128.png
│   ├── icon16.png
│   ├── icon19.png
│   └── icon48.png
├── manifest.json
├── package.json
└── src/
    └── inject/
        └── inject.js

2. Firefox で読み込む

まずは Firefox で、下記の URL にアクセスします。

「一時的なアドオンを読み込み中…」というボタンがあるのでそれをクリックし、

表示されたファイルダイアログから、先ほど 1. で用意したフォルダの manifest.json を読み込んで下さい。
(といいつつ、ほんとうはその階層のファイルなら何でもいいので、お好みで README.md でも大丈夫です)

こんなかんじで表示されたら成功です!
ちゃんと「この WebExtension は一時的な ID です。」と表示されてますね。

警告がふたつ出ていますが、いずれも Google Play ストア用のパラメータが書いてあることが原因で、無視されてますのでそのままでも動作はしましたw

4. 再読み込みのときのためにパッケージ化する

というわけで 3. は飛ばして 4. です。

このままの状態だと、前述したように「Firefoxを再起動するたびに読み込み直さないとならない」わけです。

多少なりともその手順を楽にするために、機能拡張をZIPで固めておきます。フォルダ毎ではなく、必ず中身だけを圧縮するようにして下さい。Finder からでも可ですが、ターミナルから実行する場合には下記のようになります。

cd ~/shoito_extension/
zip -r ../shoito_extension.zip *

また、公式ドキュメントには「拡張子を .xpi にしろ」とありますが、現時点では .zip のままでも不都合はありません。

次回からは manifest.json ではなく、圧縮したZIPファイルを読み込むようにすればokです!

まとめ〜この後の展開

Chrome 用に作られた機能拡張も、ものによってはFirefoxでも使えるというご説明でした。

もちろんブラウザを再起動するたびに再読み込みなんてやってられないので、動作に問題がないと確認できたら署名をして XPI パッケージとするのが良いかと思います。

が、やっぱり人様が作ったものを自分が署名するのはナニカチガウ感がするので、正式にFirefoxに対応してもらえるよう制作者様に外堀から働きかけていきたいと思います。

皆様、よい Firefox ライフを!