機能拡張

機能拡張ではソフトウェアに機能を追加する様々な方法について記述する。
様々な呼称.
呼び方はソフトウェアによってまちまちであり、以下の例にある語を同一視するものもあるし、区別して考えるものもある。また、「拡張機能」などの名称に反して、主に誤操作を起こしやすい不要な機能を隠したり無効化したりする機能を持つものもある。
など
アドオン.
アドオン（アドインとも）は機能を追加するための小さなプログラム。プラグインと混同されやすいが、それは該当の章を参照。よく知られた例は#ブラウザにおける機能拡張であろう。Mozilla製品においてのアドオンは、拡張機能とテーマ、プラグインの総称である。アドオンの多くはバイナリ形式ではなくスクリプト言語で記述される。
マクロ.
一定の作業を自動化するためのものであるマクロ機能もアドオンと同様にそのソフトウェアに組み込まれたスクリプト言語で書かれるが、こちらは配布されるよりも個人的に作成し利用するケースも多い。
プラグイン.
外部のプログラムを読み込んで使うことができる仕組みを採用したソフトウェアにおける、その外部のプログラムのことをプラグインという。
プラグインは主にプログラムの形式（外部ライブラリ、バイナリ形式）で配布されるが、本体となるソフトウェアから呼び出して特定の処理を行わせるものであり、それ単体では動作できない。
パッチ.
パッチはデータそのものを書き換えるもので、更新前と更新後のデータを比較し、異なる部分（差分）のみをまとめたもの。プログラムもデータであるので、プログラムそのものを書き換えることで機能を追加する。こうすることで直接すべてのファイルを扱うよりも小さくできる。
大量のデータをやり取りするのに用いられるほか、ユーザーが非公式に機能を拡張するときにも使用されることがある。
コンピュータゲームでは、ユーザーによるパッチを特にMODと呼ぶ。公式に配布されるパッチは拡張パックと呼ばれる。
コンピュータゲームに詳しくない者であればプログラム上のバグやセキュリティホールを修正（更新）するための修正パッチ、ホットフィックス、更新ファイル、アップデートが身近な例であろう。Microsoft WindowsにおけるMicrosoft Updateがこれを行う代表例である。
拡張パック.
コンピュータゲーム以外の一般のソフトウェアに対しても拡張パックと呼ばれることもある。この場合はプログラム本体を変更するパッチを指すこともあるし、プログラムは直接変更しないで外部のプログラムを読み込むプラグインやアドオンを指す場合もある。
スキン.
ユーザインタフェースの外観表示を変更できるスキン（またはテーマ、ビジュアルスタイル）も、一種の機能拡張であるとみなせる。一概にスキンといっても変更可能な部分は見た目の色だけの場合やボタンなどの配置を操作できるもの、もしくは外観の変更だけでなくユーザーの作成した追加機能へアクセスする機構を提供できるものもある。
ブラウザにおける機能拡張.
機能拡張で有名なのはFirefoxであろう。
拡張機能は主にJavaScriptのようなWeb技術を応用した拡張であるのに対し、プラグインはAdobe Flashといった外部の外部ライブラリに依存したものとなる。また、アドオンよりも軽量なものにユーザースクリプトがあるが、こちらは処理系のアドオンを追加しなければ使用することができない。
2013年現在、Firefox以外にもSafariにおける「機能拡張」やGoogle Chromeの「拡張機能」、Operaの「アドオン」など、多くのブラウザが機能拡張に対応している。また、Google Chromeはユーザースクリプトにも標準で対応している。
Internet Explorerもこれらとは提供される機能が多少異なるもののアドオンへの対応があり、シェル拡張のように外部のソフトウェアをインストールする形で「アドオン」で提供されない部分への機能拡張が行えるようになっている。
ただしプラグインによる実行システムへの自由なアクセスを許可する場合、潜在的なセキュリティ脆弱性を持つことになる。HTML5やWebGLの標準化によってブラウザのマルチメディア対応が強化されたことにより、プラグイン方式で実現されるケースは減っている。