JavaScript
firefox
js
WebExtensions
firefox57+

自作FirefoxアドオンをWebExtensionsに書き直したのでポエム書く

More than 1 year has passed since last update.

Firefox Quantum

Firefoxは量子的な跳躍によって、古典的なアドオンが使えなくなりました。

自作Firefoxアドオン

タブのウィンドウ間の移動や切り替えを楽にしよう、というコンセプトのアドオンを作っています。
https://addons.mozilla.org/ja/firefox/addon/move-to-window/

欲しかったけど、なかったので。大した機能じゃないので作っちゃえってことで、以前に作りました。
なんと28ユーザもの方に使っていただいています(しかも、そのうち恐らく2人くらいは私)。

移行作業

大した規模じゃない割には、なんだかんだで時間かかりました。

自動的に移行できないか? APIの対応表ないか?

探した限り、楽な方法は見つかりませんでした。
APIも結構変わっていて、探し直しに近い状態です。

初めてから始める

諦めて、これ読みました。

初めての WebExtension
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Your_first_WebExtension
2 つめの WebExtension
https://developer.mozilla.org/ja/Add-ons/WebExtensions/Walkthrough

空っぽのディレクトリを作って、ここに書いてあるのをやりつつ、アイコンとか流用できそうなものは流用して、スクリプトやら何やらは、とりあえずコピペしながら手直しして、でやりました。
それができる規模の小さいアドオンだったのが幸いです。

私が作っていたのは、ボタンを押したらポップアップが出てくる(High Level APIのPanelと呼ばれていたもの)だったので、「初めての」は軽く流して「2つめの」を参考にしました。

一時的なインストールや、デバッグは、アドレスバーに about:debugging と打ち込んだら、それっぽいものが出てきます。以前より簡単ですね。

使いたいAPIは
https://developer.mozilla.org/ja/Add-ons/WebExtensions
を見ながら、泣きながら探しましょう。ないかもしれませんが、あると信じて探しましょう。
APIによっては、manifest.jsonの中にpermissionsの項目を追加しないとうまく動かないものもあります。

多くのAPIが、Promiseを返します。非同期処理とかいうやつです。
「javascript promise」でぐぐると、素晴らしい記事からポエムまで、多種多様な資料が出てきますが、とても雑に説明します。

something がPromiseだとします。
something は、もしかしたら、まだ処理中かもしれませんが、次の処理を書けます。
(既に処理が終わっているかもしれませんし、まだで、そのうち処理されるかもしれません)
慣れてないと気持ち悪いですが、気にせずに進めて大丈夫です。

とはいえ、 something が終わってからじゃないとできない処理や、 something の結果を使って行う処理だってあると思います。
そういうときは something.then(f) のように書きます。
something が無事終わったら、その結果が f(somethingの結果) のように呼び出されます。

f の部分は、ラムダ式でもいいです。

something.then((result) => {
  anything(result);
});

あとはがんばるだけですね。

最後にパッケージ化するプロセスが、zipに詰め込むだけ、という。
xpiだって所詮zipだったけど。もっとあからさまにzipになった。

感想

移植するのは大変ですね。

ていうか、Firefoxって、Chromeにシェア奪われながらも、古いアドオンで持ちこたえていた部分が大いにあると思うので、今回のやつで民族大移動が起こらないか心配ではあります。
いいのか悪いのかは難しいですが、数年前から放ったらかしのアドオンも多いのも事実で、それらの利用者もそこそこ多いのも確かです。
それらを切り捨ててええんかいな。

あと、移行期間!開発版とかベータ版じゃない正式版でWebExtensionが動くようになってから、どれくらい期間あった?
(作業にそんなにかかるわけじゃあるまいし、締切が3日だろうと1年だろうと、始めるのは2日前、みたいな感じなのかもしれないけどね!)

一応、API自体は使いやすくはなっていると思います。
また、作り始めるのも簡単になっていると思います。
要するに、作るための敷居は下がってます。

作りたいものができたら、もう一個くらい、何か作ってもいいかな、とか思いました。

今後どうなるかは分からないですが、Firefox界隈が盛り上がってくれたらうれしいな。