ソフトウェアの肥大化

ソフトウェアの肥大化（英: software bloat）とは、コンピュータソフトウェア製品が新しいものほど大きくなり、システムリソース（ディスクスペース、CPU能力、メモリ量）をより多く使うようになる傾向をいう。そのようなソフトウェアをブロートウェア（英: bloatware）とも呼ぶ（英語では elephantware という呼称もある）。また、ブロートウェアという用語は、パーソナルコンピュータにプリインストールされている多数のソフトウェア（その多くはデモや試用版）を指すこともある。

背景 

1970年代ごろまで、ソフトウェア開発は記憶容量の厳しい制限との戦いでもあった。1バイトでも大きさを削り、1クロックでも処理を削って、プログラムが使用可能なリソースの中でより多くのことができるようにすることが重要だった。

この状況は現在では逆転している。リソースの単価が安くなり、素早い開発とマーケティングのためのより多くの機能が重視されるようになっている。その原因の1つは、技術の進歩によって処理能力や記憶密度が何倍にもなり、相対的にコストが何分の1かになったためである（ムーアの法則参照）。そして、コンピュータがビジネスや生活のあらゆる場面に浸透したために、ソフトウェア産業は1970年代の何倍にも大きくなっている。

ソフトウェア開発ツールや手法により、各種機能を実現するのにプログラム全体の修正が必要となり、そのソフトウェアの主要機能にまで影響を及ぼすような大掛かりなコードの結合が行われ、結果としてほとんど使わない機能まで追加されるといったことが起きている。さらに言えば、利用可能なリソースが増えたことで製品の効率の優先順位が低くなり、コードを容易に開発できるツールが使われるようになった。

ニクラウス・ヴィルトはこの状況をヴィルトの法則にまとめた。ヴィルトの法則とは、ハードウェアの高速化よりも急速にソフトウェアが低速化していく、というものである。

肥大化する理由 
ジョエル・スポルスキは2001年のエッセイ Strategy Letter IV: Bloatware and the 80/20 Mythで、80%のユーザーは機能の20%しか使わず（パレートの法則のバリエーション）、各ユーザーの使う機能はそれぞれ異なるとした。従って、機能が少ないソフトウェアは多くのユーザーによって役に立たないと見なされ、それらユーザーは肥大化したソフトウェアの宣伝文句にある機能群に自分の欲しかった機能を見つけ、そちらに流れる。スポルスキは Jamie Zawinski が Netscape について語った言葉を最後に引用している。

"Convenient though it would be if it were true, Mozilla is not big because it's full of useless crap. Mozilla is big because your needs are big. Your needs are big because the Internet is big. There are lots of small, lean web browsers out there that, incidentally, do almost nothing useful. But being a shining jewel of perfection was not a goal when we wrote Mozilla."

（訳）「もしそうなら話は単純だったのだろうが、Mozilla が大きいのは、そのほとんどが無駄なクソだからではない。Mozilla が大きいのはあなた方の要求が大きかったからだ。インターネットが大きいから、ニーズも大きい。世の中には小さいウェブブラウザはたくさんあって、便利なことはほとんど何もしない。でも、僕らが Mozilla を書いたとき、完璧な輝く宝石にするのが目標じゃなかった」

例 

Microsoft Windows は、肥大化を非難されてきた。例えば、最近の Windows Vista について、マイクロソフトの技術者 Eric Traut は「多くの人が Windows は肥大化したオペレーティングシステムだと思っているし、それは正しい見方だと認めざるを得ない」と述べ、さらに「その中核であるカーネルや基本コンポーネントは、実際には非常に効率化されている」と続けた。PC World 誌の元編集者 Ed Bott は、この見方に懐疑的である。すなわち、マイクロソフトのオペレーティングシステムは新しいものが登場するたびに肥大したと批判され続けており、今ではブロートウェアとは見なされない MS-DOS でさえそうだった点を指摘した。

Nero Burning ROM などの CD や DVD のライティングソフトも肥大化を批判されるようになってきた。言語サポート (NLS) のように、エンドユーザーに使い易いように調整されていない余分な機能が高速セットアップでデフォルトでインストールされることがある。NLSは、中国語、日本語、アラビア語のフォントをサポートするもので、そのためのレンダリングサポートとUnicodeデータの制御が含まれる。これらはそういった言語を使う予定がない人には無用である。

AVG 8 がリリースされたとき、以前のバージョンに比べて肥大化した点が非難された。

対策 
Mozilla FirefoxやMicrosoft Officeのようなアプリケーションでは、プラグインの形で追加機能をパッケージ化し、本体とは別にダウンロードして追加できるようになっている。プラグインはサードパーティが作成することもできる。プラグイン方式によって、プログラム本体の肥大化を抑えることも考えられる。

プラグイン・インタフェースと個々のプラグインを全てインストールすると、それらを本体に一体化した場合に比べてリソースを多く消費することになるのは明らかである。しかし、ユーザーが自分の必要なプラグインだけを選択してインストールすれば、必要な容量は削減される。

オープンソースソフトウェアは、プリプロセッサ・ディレクティブを使ってコンパイル時に必要な機能だけ選択することができる。これはプラグインよりも実装が容易だが、ユーザーがソースをコンパイルしなければならないという欠点がある。

ソフトウェアの肥大化の原因の1つとして「忍び寄る機能主義 (creeping featurism)」がある。これを bullet-point engineering とも呼ぶ。肥大化を減らす方法としては、UNIX哲学の一つである「一つのことをうまくやるプログラムを書け」がある。この言葉は、一つの複雑化したソフトウェアを複数の単純な部品に分けて、それぞれをパイプやシェルスクリプト、または、別の形式のプロセス間通信を用いて接続すべきだということを意味している。

脚注 

ソフトウェア品質
アンチパターン