自称代表作
ブラウザ拡張開発のハマりどころ
手法が色々ある あった
-
WebExtensions が最新
- Firefox と Chrome で共通の API
- 以下の方法は古い
- jpm
- Add-on SDK
配布方法が謎い (Chrome)
-
Chrome Store に zip をアップロード
- 不要なファイルは含めないように 1
- 最初に5ドルかかる
- アップロードが止まったらキャンセルしてリトライすれば何とかなる
配布方法が謎い (Firefox)
-
addons.mozilla.org に xpi をアップロード
- All Platforms がいい 2
- 2択ある
- Listed
- Unlisted
Listed
- addons.mozilla.org で配布される
- 人力の審査がある
AMOに公開されるすべてのアドオンは、被雇用者とボランティアのチームによるコード審査とテストを受けます。アドオンは、様々な技術的ポリシーやコンテンツポリシーに合致することが求められます。そのため、アドオンの複雑さやその他の要因により、審査にかかる時間には数時間から数週間までの幅があります。 (https://developer.mozilla.org/ja/Add-ons/Distribution)
Unlisted
- 自力で配布する
- 審査は原則、最低限の自動審査のみ
- Mozilla による署名は必要
非公開のアドオンは多くの場合、自動的に審査され署名されます。アドオンが自動審査を通過しなかった場合には手動審査待ちのリストに加えられ、数日のうちに審査されます。その非公開アドオンがサイドローディング(一般的なWebからのインストールではなく、何らかのアプリケーションにバンドルされる形でのインストール方法)を必要とする場合、コード審査が必要となり、審査完了までには数週間を要するでしょう。 (https://developer.mozilla.org/ja/Add-ons/Distribution)
署名方法
web-ext sign --api-key=$AMO_JWT_ISSUER --api-secret=$AMO_JWT_SECRET
自動アップデートさせたい
- Chrome: 勝手にやってくれる
- Firefox:
- Listed: 勝手にやってくれる
- Unlisted: 自分で対応が必要
- manifest.json に xpi の URL を書く
- https://developer.mozilla.org/en-US/Add-ons/Updates
まとめ
- 佐久間まゆさん総選挙6位 (Cu1位) おめでとうございます!石川で会いましょう!
補足情報
jpm 時代に unlisted な xpi を自動アップデートに対応させる方法
WebExtensions な今と比べてややこしかったのでメモしておきます。
やることまとめ
-
package.json に以下の3項目を書く
- updateURL: Update Manifest (後述) の URL
- updateLink: 配布する xpi 自体の URL
- version: 配布する xpi の最新のバージョン番号
-
updateURL で指定した URL で、
jpm xpi
実行時に生成された update.rdf を公開 -
updateLink で指定した URL で、署名済み xpi 本体を公開
自動アップデートのメカニズム
Firefox のアドオンの自動アップデートは、下図のようなメカニズムで実現されています。(Mozilla より引用)
- xpi には install.rdf (通称 install manifest) が埋め込まれている
- install manifest には updateURL が記載されており、それを通じて update.rdf (通称 update manifest) を参照できる
- update manifest には、最新のバージョン番号と updateLink, すなわち最新の xpi 自体の URL が記載されている
- Firefox がアドオンの更新を確認したタイミングで、もし update manifest に書かれたバージョン番号がインストール済みのものより新しければ、updateLink を通じて最新の xpi を自動インストールする
jpm xpi
コマンドを実行すると、xpi ファイルと update.rdf ファイルが生成されますが、このとき package.json に書かれた updateURL と updateLink がそれぞれ使われて埋め込まれるという寸法です。あとは jpm sign
コマンドで xpi に署名して、今自分で書いた URL で xpi と update.rdf を公開すれば OK です。
なお、updateLink は https である必要があります。自分はこれを github を使ってやりくりしました。参考にしてみてください。
https://github.com/megane42/starlight-loading/blob/master/package.json