Mozillaのソフトウェアにおける拡張機能とは、Mozilla FirefoxやMozilla Thunderbirdなどで利用できるアドオンのうち、ソフトウェアに機能を追加したり、既存の機能を変更したりするものである。

## 概要

拡張機能はMozilla Foundation製のMozilla Firefox(Firefox for Mobile含む)やMozilla Thunderbirdのほか、これらと協調して有志により開発されているSeaMonkeyなどに対して主に設定や操作の機能強化を行うものである。また同じ仕組みを利用してテーマ(スキン)も提供することができる。また、拡張機能にはセキュリティ修正パッチとして作成されるものや英語版しか出ていないソフトウェアに対する日本語化パックとして配布されるものもある。

## 歴史

2015年以前のFirefoxでは、「寛容なアドオンモデル」が採用されていた。これは、XULやXPCOMといった技術によってFirefoxの内部にアクセスし、ユーザーインターフェイスを大きく変えてしまうような大きな柔軟性をもたらすものだった。しかしそれは、Firefoxの内部構造に依存しすぎており、Firefoxのバージョンアップによって使用できなくなったり、クラッシュやパフォーマンスの低下を起こしたりする可能性があった。さらに、Firefoxのマルチプロセス化(e10s)のような新技術の導入を阻害することも問題となっていた。

そこでMozillaは、2015年8月21日にFirefoxのアドオンをWebExtensionsに置き換えていく方針を明らかにした。WebExtensionsはBlinkのアドオンと互換性が高く、Blinkのものを簡単に移植できる。この移行には否定的な声も少なくなかったが、Mozillaは2017年11月14日リリースの「Firefox Quantum(Firefox 57)」ですべてのレガシーアドオンを廃止した。延長サポート版であるFirefox ESRはバージョン52まで対応していたが、2018年9月5日まででサポート終了となりESR 60以降はレガシーアドオンが廃止された。なお、Firefoxから派生したWaterfoxとPale Moonは、レガシーアドオンのサポートを続けている。

一方、Thunderbirdでは2018年3月リリースのThunderbird 59でもレガシーアドオンのサポートが継続されるが、コアエンジンの更新や仕様変更によって使用できなくなるものもありうる。Thunderbird 68 以降向けには MailExtensions(WebExtensionsに Thunderbird 向けの機能を追加したもの)を利用してアドオンを構築することが推奨 (should) とされている。2020年6月付近リリース予定の Thunderbird 78では MailExtensions でのレガシー機能サポートが廃止される予定。

## 技術

2015年にMozillaがアドオンをWebExtensionsに移行させることを発表する前には、XUL/XPCOMオーバーレイ、ブートストラップ型拡張機能、Add-on SDKを利用した開発方法が存在した。しかし、WebExtensionsが採用されるようになってからは、それらの技術を利用したアドオンは廃止されることになった。WebExtensionsはクロスブラウザで動作可能なアドオンを開発するための技術で、Google ChromeやOperaのextension APIと互換性があり、わずかな変更だけでFirefoxでも動作させることができる。WebExtensionsはJavaScript、HTML、CSSなどの開発者が使い慣れたWebベースの技術を使用して作成されている。Webページ上のJavaScriptと同じWeb APIを活用できるが、拡張機能は独自のJavaScript APIセットにもアクセスできる。

## インストールと管理

拡張機能を利用するにはユーザーが各自Mozilla Add-onsのような任意のサイトから配布されている拡張機能をダウンロードし、インストールすることが必要となる。インストールにはXPInstallモジュールを用いることでユーザーはインストールを許可するだけで自動的にインストールが完了するようになっている。

拡張機能はアドオンマネージャを用いて管理する。拡張機能にアップデートの提供元が記述されているとき、自動的にアップデートが無いかをチェックする。特にブラウザのバージョンアップをしたときは互換性チェックを再度行い、不合格である拡張機能は無効化される。アドオンマネージャから直接 Mozilla Add-ons に登録された拡張機能を検索し、インストールすることもできるようになっている。

拡張機能のインストールにはその拡張機能がインストールしたいブラウザに対応していることが条件であり、標準ではインストール直前にブラウザのバージョンチェックが行われる。ブラウザとの互換性チェックはその拡張機能で設定されたバージョンの範囲にインストールするブラウザのバージョンが含まれているかどうかで調べるため、公式には対応が謳われていない拡張機能でもその情報さえ弄れば動作してしまう場合もある。Firefox 5以降で採用されたラピッドリリースへの対応のため、Firefox 10以降相当のブラウザではアドオンの最高対応バージョンがFirefox 4以降であればそのブラウザに対応しているものとみなしてインストールされるようになった。

## 拡張機能が登場した背景

Firefoxの登場以前に開発されていたMozilla Suiteではソフトウエア本体に様々な機能追加を行ったため、開発が進むに従いソフトウェアの肥大化やバグの増加をもたらした。次世代ブラウザであるFirefoxやThunderbirdではこのような事態を避けるため、高い拡張性を残しながらもソフトウェアのサイズを小さいものにとどめる方法として、機能追加は拡張機能で行うよう方針が改められた。

## プラグインとの違い

拡張機能はブラウザそのものの機能を拡張するのに対し、プラグインはFlashのようなグラフィックフォーマットへの対応を強化するもので、ブラウザそのものの機能には影響を与えない。

### 窓の杜「プラグイン」問題

事の発端は2005年2月17日に掲載された窓の杜の『「Firefox」プラグイン特集』という記事である。編集部が“拡張機能”という言葉が一般に認識されにくい、IEなど他製品で言う“プラグイン”と同じものであるとして意識して欲しいなどの理由から、記事の中で“プラグイン”という表記を取った。(しかしIEの機能拡張プログラムは「アドオン」と呼ばれており、窓の杜もそれを肯定しているため既に主張が破綻しているとの指摘がある)。

しかしこの表記がユーザーの混乱を招くとして懸念され、Bugzilla-jpにはバグとして登録されるまで問題が発展した。

このことについて国内の拡張機能開発者Piroらは以下のような点が問題だと述べている。

- ユーザーが拡張機能を「プラグイン」として認識してしまうと検索などで拡張機能を探し出すことが困難となる。
- 用語の浸透度が逆転すると本来の「プラグイン」の情報が「プラグインとして認識された拡張機能」の情報に埋もれてしまい、本来の「プラグイン」を検索したいユーザーや開発者を翻弄させる。

この問題は1年近く議論されていたが、窓の杜の2006年3月23日の記事で編集部は「今後“プラグイン”と“拡張機能”を区別して表記する」と書いたため問題は終結した。

その後MozillaはFirefox 2.0のリリース以降ソフトウェアの画面や公式ページで拡張機能やテーマをまとめて「アドオン」としており、拡張機能は「アドオン」とも呼ばれるようになっている。

## 主な拡張機能の種類

- 機能を追加し、向上させるもの
  - Mozilla Suiteの機能と同等の働きをするもの - ChatZilla、Eメール、ニュースリーダーなど。
  - ブラウジング性能の向上 - Tab Mix Plusなど。
  - ブックマークなどのデータの同期 - 標準機能であるFirefox Syncに近い。
  - 検索プラグイン - Mozillaでは検索ツールなどと呼ぶ
  - ツールバー - 検索プラグインとは異なる。

  :   など

- 開発・デバッグツール
  - DOM Inspector - ウェブページや
  - Firebug
- ウェブページの見た目を変更するもの
  - Adblock Plus
  - AutoPagerize
  - NoScript
  - Stylish
  - uBlock Origin

  :   など

- 全く無意味であるもの
  - 中止ボタンがしいたけに見えて困る

  :   など。

## 他のブラウザにおける類似の機能

Google Chrome、Operaのextension APIは、WebExtensionsと互換性がある。また、WebExtensionsはMicrosoft Edgeでも動作する。