lacolaco's marginalia

ソフトウェアはソフトでなければならない

TSKaigi 2026「いつテストを書くか?」より。


ソフトウェアが「ソフト」であるとはどういうことか?

ソフトウェアに関わる仕事をしているならば、一度は気になったことがあるのではないか。ソフトウェアが「ソフト」であるとは、一体どういうことなのだろうか。

このことについて Robert C. Martin は著作の中で何度も言及している。

ソフトウェアは「ソフト」になるように考案されたのだ。マシンの振る舞いを簡単に変更する手段になることを目的としているからだ。マシンの振る舞いを簡単に変更したくないときは、「ハード」ウェアと呼んだ。
ー Robert C. Martin『Clean Architecture』角征典・髙木正弘訳、KADOKAWA、2018、p.42

ソフトウェアの最初の単語はソフトである。ソフトウェアにはソフトであることが求められる。 簡単に変更できることが求められる。簡単に変更したくないなら、ハードウェアと呼ぶべきだ。

ソフトウェアの存在意義を覚えておくことが重要だ。マシンの動作を簡単に変更するためにソフトウェアが発明された。ソフトウェアが簡単に変更できないなら、ソフトウェアの存在意義を妨害している。
ー Robert C. Martin『Clean Craftsmanship 規律、基準、倫理』角征典訳、KADOKAWA、2022、p.270

ソフトウェアと変更容易性

Martin の論に基づけば、ソフトウェアが「ソフト」であるとは、すなわち変更が容易であることである。変更容易性こそがソフトウェアにとっての欠けてはならない本質である。

逆に言えば、変更容易性を失い、変更が困難になったソフトウェアは「ソフト」ではなくなっている。この事態を、ソフトウェアの「ハード化」と呼ぶことにする。変更が困難になったソフトウェアは「ハード化」している。

「ハード化」とはすなわち、ソフトウェアとしての存在意義の喪失である。

Peter Naurの「プログラムの死」

ところで、この「ハード化」に似た事態について、Peter Naur は1985年時点で次のように述べていた。

プログラムを構築するということは、プログラマーチームのなかで、彼らによってそのプログラムの理論を構築することと同じである。…プログラムの死は、その理論を持つプログラマーチームが解散したときに訪れる。死んだプログラムも、コンピュータでの実行と有用な結果の産出を続けることはできる。死の実際の状態が見えるのは、プログラムの修正要求に対して知的に答えられなくなったときである。
― Peter Naur “Programming as Theory Building” (1985)

Naur にとっての「プログラムの死」とは、プログラムに対する修正要求に応えられなくなる事態を指す。これはまさに、そのプログラムの変更容易性が失われたということだ。

Naur自身も言うように、変更が困難になったからといって、そのプログラムが動かなくなるわけではない。あくまでも変更ができなくなっただけだ。ただし、間違いなくそのプログラムは、ソフトウェアとしての存在意義は失っている。

変更容易性は人間とソフトウェアの関係である

Naurの洞察からもわかることは、変更容易性はソフトウェアに内在的な特性ではないということだ。つまり、変更容易性はソフトウェアの構造だけで決まるものではない。絶対的に変更しやすいコード、変更しにくいコードというものはなく、そのソフトウェアを変更しようとする人間との関係が変更容易性を決める。

そもそも、容易・困難は人間が抱く感覚である。また、「どのような変更について」という前提なしに、変更容易性を評価することもできない。そのうえで、開発者の知識や経験によっても何が容易かということは左右される。

ソフトウェアの変更容易性について考えるうえでは、そのソフトウェアを変更する立場にある人間、開発者についても考える必要がある。

まとめ

  • ソフトウェアが「ソフト」であるとは、変更が容易であること
  • 変更容易性の喪失= ソフトウェアの「ハード」化
    • ソフトウェアとしての存在意義の喪失
    • Naurにとっての「プログラムの死」
  • 変更容易性は人間とソフトウェアの関係である