「シンプル」と「小さい」は違う

原題: Simple Is Not Small

なぜ重要か

「シンプルさ」の定義を再整理することで、ツール設計やアーキテクチャ選択の議論に具体的な基準を与える視点として注目される。

ソフトウェアアーキテクチャの観点から、「シンプルであること」と「小さいこと」は別概念だと主張するエッセイが2026年8月27日に公開された。著者はUnixパイプラインを例に挙げ、各コマンドが小さくても、それらを組み合わせた結果が必ずしもシンプル(疎結合)になるわけではないと論じている。

著者のjynは、コードカバレッジに関する社内デバッグに9か月を要した経験を踏まえ、「シンプルさの優先」が重要だと語った。しかし、その答えに自身が満足できなかったことが本エッセイの出発点となっている。

具体例として、ファイル内の単語頻度を集計する2種類のプログラムが比較されている。一方はUnixパイプライン(`cat`、`tr`、`sort`、`uniq`の組み合わせ)、もう一方はClojureによる実装だ。

ここで「出力を元のファイル順に並べ替える」という小さな変更を加えると、差異が明確になる。Clojureでは`word_seq`と`freq_map`の2変数を定義するだけで対応できる。一方のBashでは、複数の一時ファイル、難解な正規表現、`nl`・`join`・`sed`などのコマンドを組み合わせた複雑なスクリプトが必要になる。

著者はこの差異を説明するために、Rich Hickeyの講演「Simple Made Easy」を引用する。「simple(シンプル)」の語源は「sim-plex(一本の縒り)」であり、「com-plex(複数の縒りが絡み合った状態)」と対置される概念だ。著者はこの「complex」を「coupled(密結合)」と言い換えて議論を進める。

Unixパイプラインの各コマンドは確かに「小さい」が、コマンド間がテキストストリームという共通フォーマットに強く依存しているため、仕様変更への対応が困難になる。これは「密結合」であり、「シンプル」とは言えないというのが著者の主張だ。

一方でClojureの実装は記述量は多くなるものの、データ構造が明示的で、各処理の依存関係が疎であるため、変更に強い「シンプルな」設計になっている。著者は「大きい(large)こと」と「密結合(coupled)であること」も別概念として区別し、大きくても疎結合な設計こそが真のシンプルさだと論じている。

出典

jyn.dev — 元記事を読む →