新しく買ったノートパソコンは、最初の数か月はとても速く動きます。ところが、OSやプログラムを何度かアップデートすると、いつの間にか以前のパソコンのようにもたつき始めます。チップは年々速くなるのに、体感速度はなかなか良くなりません。この不思議な現象を一言で言い当てた言葉があります。それが「ヴィルトの法則(Wirth’s Law)」です。
ヴィルトの法則とは、簡単に言えば「ソフトウェアが遅くなる速さは、ハードウェアが速くなる速さよりも速い」という経験則を指します。ハードウェアがどれほど良くなっても、ソフトウェアがその分を先に食いつぶしてしまうため、ユーザーが感じる速度は足踏みするか、むしろ後退するという意味です。
本稿では、ヴィルトの法則の由来から、ソフトウェアが重くなる理由、今日私たちの身の回りで見られる例、そして軽いソフトウェアを作るための方法まで、順に見ていきます。

速くなったチップに追いつく重いソフトウェア
ヴィルトの法則はどこから来たのか?

この法則の名前は、スイスのコンピューター科学者ニクラウス・ヴィルト(Niklaus Wirth)に由来します。ヴィルトは1970年にプログラミング言語Pascalを発表し、1984年にはコンピューター科学のノーベル賞と呼ばれるチューリング賞を受賞した人物です。
(1) 「軽いソフトウェアを求める訴え」
ヴィルトは1995年、学術誌『Computer』に「軽いソフトウェアを求める訴え(A Plea for Lean Software)」という論文を寄せました。その中で彼は「ソフトウェアは、ハードウェアが速くなるよりも速く遅くなっている」という言葉を同僚マルティン・ライザー(Martin Reiser)の言葉として紹介し、この一文が後にヴィルトの法則と呼ばれるようになりました。
(2) 数字で見る肥大化したソフトウェア
ヴィルトは、わずか25年ほど前には対話型テキストエディターを8,000バイトで作ることができ、コンパイラーは32キロバイトに収めなければならなかったと書きました。ところがその子孫たちはメガバイト単位のメモリーを要求し、ハードウェアが千倍ほど速くならなければ使うことさえできなかっただろうと批判しました。
(3) ムーアの法則と対をなす観察
ムーアの法則(Moore’s Law)が半導体に載るトランジスタの数が着実に倍増していくという予測だとすれば、ヴィルトの法則は、そうして得られた性能がそのままユーザーには届かないという反対側の観察です。ヴィルトは1978年から1993年までにインテル80×86系プロセッサーの性能が335倍向上したと記しつつ、ソフトウェアの果てしない食欲が衰える気配は見えないと付け加えました。
ソフトウェアはなぜだんだん重くなるのか?

ヴィルトは、人々がソフトウェアの肥大化を簡単に受け入れてしまう理由として二つを挙げました。一つはハードウェアの性能があまりにも速く向上すること、もう一つは本当に必要な機能とあれば便利な機能を区別できない消費者の態度です。
(1) 機能の継ぎ足し(Feature Creep)
新しいバージョンを出すたびに機能を一つ二つと加えていくと、ほとんどの人がめったに使わない機能まで積み重なり、プログラムが重くなります。ヴィルトは、人々が複雑さを洗練と取り違えていると指摘しました。
(2) 幾重にも重なった層(Layers of Abstraction)
開発を楽にしてくれるツールやライブラリを何層も重ねると、作るのは速くなりますが、実行時に経なければならない段階もその分増えます。
(3) 速いハードウェアへの信頼
「どうせコンピューターは速くなるのだから、最適化は後でいい」という考えが広まると、効率を磨く作業が後回しにされます。ヴィルトが引用したもう一つの言葉のとおり、ソフトウェアは使えるメモリーをいっぱいに満たすまで膨らみます。
今日の私たちの身近にあるヴィルトの法則

ヴィルトの法則は、時代ごとに名前を変えながら繰り返されてきました。1990年代には「インテルが与えたものをマイクロソフトが奪っていく」というジョークがはやり、2009年のグーグルの開発者イベントでは、セルゲイ・ブリンが同じ現象を共同創業者ラリー・ペイジの名にちなんで「ペイジの法則」と呼んだこともあります。
- メッセンジャーアプリ(Messenger Apps):文字をやり取りすることは昔も今も同じですが、アプリ一つが数百メガバイトのメモリーを占めることは珍しくなくなりました。
- ウェブページ(Web Pages):記事を数段落読むのに、広告や追跡コード、動画プレーヤーまで一緒にダウンロードするため、画面の表示が遅くなります。
- 文書作成ソフト(Word Processors):文字を入力し、消し、移動するという基本の仕事は変わらないのに、インストール容量と起動時間はバージョンごとに増えてきました。ウィンドウやアイコンができたからといって、エディター本来の役目が変わったわけではないというのがヴィルトの指摘です。
- スマートフォンのアップデート(OS Updates):新しいOSが最新の機種に合わせて作られると、数年使った機種は同じことをしていても目に見えて遅くなります。
軽いソフトウェアを作る方法

ヴィルトは批判にとどまらず、自ら手本を作りました。彼は同僚ユルク・グートクネヒト(Jürg Gutknecht)とともに、1986年から1989年にかけてOberon(オベロン)というOSをわずか二人の力で作り上げ、同じ名前のプログラミング言語も設計しました。エディターとコンパイラーを含むOberonの中核部分は、200キロバイトにも満たないものでした。
(1) 本質に集中する
本当に必要な機能から決め、残りは必要な人だけが追加して使えるように分けておきます。
(2) 性能を継続的に測る
新しい機能を入れるたびに実行速度とメモリー使用量を測り、少しずつ重くなっていく流れに早く気づきます。
(3) 削る勇気
ヴィルトは、プログラミングで最大の満足は何かを取り除くことに成功したときに得られると語りました。使われていないコードを消すことも、機能を加えることと同じくらい重要です。
ヴィルトの法則は、ハードウェアの進歩がソフトウェアのぜい肉を覆い隠している間に、私たちが見落としがちなコストに気づかせてくれます。チップが速くなった分だけユーザーがより速い体験を享受するには、作る側が最初から効率と簡潔さを基準にしなければなりません。これは電力や機器の買い替えコストを減らすことにもつながっています。
足すより先に削ることを考えること、それが速くて長く使えるソフトウェア開発の第一歩です。