2020年7月24日金曜日

MailExtensionsとWebExtensions

Thunderbird 78.0がリリースされ、アドオンに関しての問い合わせが多くなってきました。その中で、レガシー(Overlay/Bootstrap)、MailExtensions、WebExtensionsと、いろんな言葉があり、混乱されている方が多いので、まとめてみます。

結論から言うと、Thunderbird 78で、WebExtensionsは動きます


■レガシーアドオン (Legacy Extension)

オーバーレイ(Overlay)タイプとブートストラップ(Bootstrapped)タイプがあります。

オーバーレイは、ThunderbirdのUIやコードを上書きする形で拡張するタイプで、Thunderbirdの初期からあるタイプです。自由度が高く何でもできるため、Firefox/Thunderbirdの強みになっていました。その反面、セキュリティ上のリスクやThunderbird本体の変更の影響をモロにうけるため、バージョンアップの都度、アドオンの修正が必要になり、また、アドオンへの影響を気にしてThunderbird本体側もドラスティックな変更ができない(と開発チームは言っている)といった弱点もありました。

ブートストラップは、オーバーレイから少し自由度を奪う代わりに、アドオンをインストールしてすぐに(再起動せずに)使えるようにしたタイプです。このタイプは、私は開発したことがないので、あんまり知りません。


■WebExtensions

すべての元凶です。Firefoxがこれまでのレガシーアドオンを捨て、Google Chromeのアドオンと互換性の高いフレームワークを開発し、Firefox 57でこれに完全移行しました。これで、Firefoxではレガシーアドオンは動作しなくなりました。WebExtensionsにはレガシーアドオンのような自由度はないので、同じ機能が実現できないアドオンも出てきました。また、ほぼ作り直しになるので、多くのアドオン作者が脱落しました。で、阿鼻叫喚になりました。


■Legacy WebExtensions

このへんから、ややこしくなります。

Thunderbirdのベースは、Firefoxと同じなので、Firefoxの変更の影響を受けます。そのため、ThunderbirdもFirefoxのWebExtensions移行のあおりを受けることになります。しかし、Thunderbirdチームは、レガシーアドオンは捨てずに、WebExtensionsのフレームワークの中で、レガシーアドオンを動かせるようにしました。これがLegacy WebExtensions(Legacy option)で、Thunderbird独自のものです。

以下の投稿で説明したのも、このやり方です。WebExtensionsの設定ファイルであるmanifest.jsonを作って、"legacy": {...} で、XUL/Bootstrapを有効化しています。
https://hogi-ja.blogspot.com/2019/09/thunderbird-68.html

これが入ったのが、Thunderbird 68です。設定ファイルを作り直す必要があるものの、最小限の作業でレガシーアドオンを移植できるため、アドオン作者もなんとか追従できました。

Thunderbird 78で動かなくなったのは、この"legay" :{...}設定です。WebExtensions自体が動かなくなったわけではありません。


■MailExtensions

WebExtensionsは、Firefoxのためのものなので、メールクライアント向けには、いろいろ機能が足りません。そこで、Thunderbird用に追加のAPIを開発したのがMailExtensionsです。Firefoxと共通で使えるもの(設定の保存など)は、WebExtensionsのものを使います。なので、Thunderbird 78以降のアドオンは、WebExtensionsのAPIも、MailExtensionsのAPIも両方使っています。

なので、WebExtensionsはThunderbirdでも動きます。もちろん、ブックマークなどFirefoxにしかないものは、Thunderbirdでは動きません。


■WebExtension Experiments (MailExtension Experiments)

Thunderbird 68で、Legacy optionを導入したものの、Thunderbirdチームだけで維持していくのは厳しく(たぶん)、Thunderbird 78で、結局WebExtensions/MailExtensionsに完全移行することになりました。なので、すべてのアドオンはWebExtensions/MailExtensions APIを使用したものに書き換える必要があり、ほぼフルスクラッチでやり直すことになりました。これが今の状況です。

ただ、ThunderbirdはWebExtension Experiments (MailExtension Experimentsと呼ぶことも)という仕組みを使えるようにしました。これは、従来のオーバーレイタイプでやっていた自由度の高い拡張を可能にする仕組みで、Firefoxではベータ版以降で無効化されているものです。これは、本来、WebExtensionsのAPIを開発するためのものだからです。

このExperimentsを使えば、Thunderbird 78でも、Thunderbird 68と同じことが実現できる可能性があります。WebExtensionsはブラウザ向けのものなので機能不十分、MailExtensionsもまだAPIが全然足りていない状況なので、ちょっとでも凝ったことをしようと思うとこれが必要になります。問題は、これをするには、レガシーアドオン(XUL/XPCOM)の知識も、Web/MailExtensionsの知識も必要、かつ、なかなかの大仕事ということです。私のような小さいアドオンの作者ならいいですが、大規模なものはとんでもない時間がかかると思います。


■まとめ

最後にまとめると、こんな感じです。これからアドオンを作ってみよう、見捨てられたアドオンを動かしてやろうという方は参考にしてください。


Thunderbird 68
Thunderbird 78
Firefox 78
レガシー(Overlay/Bootstrapped)
×
×
×
WebExtensions
Legacy WebExtensions
(Legacy option)
×
×
MailExtensions
×
WebExtension Experiments
×(※)
※ベータ/リリース版で使用不可。

0 件のコメント:

人気の投稿(過去7日間)