ソフトウェアの肥大化

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

 背景 

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

この状況は現在では逆転している。リソースの単価が安くなり、素早い開発とマーケティングのためのより多くの機能が重視されるようになっているEric S. Raymond The Art of Unix Programming, Addison-Wesley Professional, 1st edition（2003年9月17日） On-line HTML version. 2007年6月16日閲覧。その原因の1つは、技術の進歩によって処理能力や記憶密度が何倍にもなり、相対的にコストが何分の1かになったためである（ムーアの法則参照）。そして、コンピュータがビジネスや生活のあらゆる場面に浸透したために、ソフトウェア産業は1970年代の何倍にも大きくなっている。

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

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

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

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

 例 
+ Microsoft Windowsのハードウェア推奨要件の変遷Windows バージョンプロセッサメモリハードディスクWindows 9525MHz8MB50MBWindows 9866MHz24MB140255MBWindows Me150MHz32MB320MBWindows 2000 Server133MHz64MB1GBWindows XP300MHz128MB1.5GBWindows Vista800MHz512MB15GBWindows 71000MHz1024MB16GBWindows 8Windows 10Windows 111000MHz64ビット2コア4096MB64GB
Microsoft Windowsは、肥大化を非難されてきた。例えば、Windows Vistaについて、マイクロソフトの技術者 Eric Trautは「多くの人がWindowsは肥大化したオペレーティングシステムだと思っているし、それは正しい見方だと認めざるを得ない」と述べ、さらに「その中核であるカーネルや基本コンポーネントは、実際には非常に効率化されている」と続けたinformationweek.com。PC World誌の元編集者 Ed Bottは、この見方に懐疑的である。すなわち、マイクロソフトのオペレーティングシステムは新しいものが登場するたびに肥大したと批判され続けており、今ではブロートウェアとは見なされないMS-DOSでさえそうだった点を指摘した。

Nero Burning ROMなどのCDやDVDのライティングソフトも肥大化を批判された。

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

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

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

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

ソフトウェアの肥大化の原因の1つとして「忍び寄る機能主義（creeping featurism）」"The Designer’s Notebook": "creeping featurism produces a bloated, complicated mess"Jamie Zawinskiのソフトウェア開発の法則「あらゆるプログラムは電子メールを読めるようになるまで拡大しようとする。そこまで拡張できないプログラムは、それができるプログラムに置換される」がある。これをbullet-point engineeringとも呼ぶ。肥大化を減らす方法としては、UNIX哲学の一つである「一つのことをうまくやるプログラムを書け」がある。この言葉は、一つの複雑化したソフトウェアを複数の単純な部品に分けて、それぞれをパイプやシェルスクリプト、または、別の形式のプロセス間通信を用いて接続すべきだということを意味している。

 脚注 

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