モダンなアーキテクチャに影響を与え続けるUnixの設計思想とは?

ソフトウェアの設計判断は多数存在しますが、大きな影響を与え続けているもの一つにUnixの哲学があります。本日は書籍『UNIXの考え方』で紹介されている定理の一つを紹介します。

定理2:一つのプログラムには一つのことをうまくやらせる

指針もなく機能の追加修正を続けていると、はじめは短かったコードも時間経過とともに混みいった醜いコードに変貌し、担当が抜けるとやがて誰も手が付けられない恐れや憎悪の対象となってしまいます。ここまでコードが悪化すると、市場からの予期しなかった重要な要望に対して俊敏に応えることは不可能になってしまいます。

そこで、本日ご紹介の定理です。一つのプログラムには、多数混ぜ込むのではなく、一つのことだけうまくやるように絞り込み、一つ一つの小さなプログラムを組み合わせて、達成したいこと実現するように作ります。

一つのプログラムには一つのことをうまくやらせる】は、Unixのコマンド単位だけはなくサービス単位、モジュール単位、クラス単位、メソッド単位とどのスケールでも当てはまります。


マイクロサービスアーキテクチャでは、巨大なモノリシックで複雑なアーキテクチャの代わりに、一つのサービスを対象ドメイン単位やデプロイ単位や技術単位やチーム構造単位で小さくシンプルに保ち、複数のサービスを組み合わせてやりたいことを実現するように分割統治します。

http://martinfowler.com/articles/microservices.html

JavaScriptの npm のモジュール分割の指針も 一つのモジュールに複数混ぜ込むのではなく小さく一つのことをうまくやるように分割し、他のモジュールと簡単に協調して動かせるようにしておくことを推奨しています。

This is the core of the Unix Philosophy: building small programs that do one thing, do it well, and compose easily with other programs.

https://www.npmjs.com/package/module-best-practices#module-basics


プログラミングしていると、達成したいことの実現手段は複数あり選択に迷う事がありますが「一つのプログラムには一つのことをうまくやらせる」を一つ判断軸に加えてはいかがでしょうか。