TL;DR

1 つのことをうまくやる小さなプログラムを書き、それらを共通の入出力でつないで複雑な処理を組み立てる、というソフトウェア設計の指針。1970 年代の Unix の開発の実践から生まれた。

仕組み

Wikipedia によると、ダグラス・マキルロイらは 1978 年に、次のような考え方を示した。

  • 1 つのプログラムには 1 つの仕事をさせる。新しい機能を足して肥大化させず、新しいプログラムを作る
  • 各プログラムの出力が、別のプログラムの入力になることを前提にする
  • 早めに試作し、出来の悪い部分は捨てて作り直す
  • 手作業ではなくツールを使って手間を減らす

マキルロイはこれを「一つのことを行い、またそれをうまくやるプログラムを書け」と要約し、テキストストリーム(標準入出力)を共通のインタフェースとして使うことも挙げている。

ほかにも、いくつかのまとめ方がある。マイク・ガンカーズは、小さいものを良しとする、効率より移植性を優先する、データは単純なテキストファイルに保存する、すべてのプログラムをフィルタとして設計する、などの 9 つの定理にまとめた。エリック・レイモンドは、Unix 哲学を KISS 原則(Keep It Simple, Stupid)と要約し、モジュール化、明瞭さ、合成、単純さ、透明性などのルールを示した。

注意点

Wikipedia によると、Unix 哲学の中身には普遍的な合意がない。GNU プロジェクトのツールが Unix 哲学に沿っているのか、機能を詰め込みすぎているのかは意見が分かれている。cat -v や ls の整形機能も、Unix 哲学に照らすと別のフィルタに任せるべきだと批判されている。

関連

出典