#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界隈が盛り上がってくれたらうれしいな。