UNIX哲学は、
UNIXオペレーティングシステムの開発者たちの
経験に基づいて形成された、
ソフトウェア開発における一連の原則と文化的規範です。この哲学は、単一の定義を持つものではなく、複数の解釈が存在することに注意が必要です。
UNIX哲学の源流は、1970年代のベル研究所における
UNIX開発に遡ります。初期の
UNIX開発者たちは、シンプルで効率的な
ソフトウェアを構築することを目指しました。
1978年、ダグラス・マキルロイは、
UNIX哲学の基本的な原則を以下のように述べました。
各プログラムは一つのことをうまく行うこと。複雑な機能を一つのプログラムに追加するのではなく、新しい仕事には新しいプログラムを構築する。
すべてのプログラムの出力が、別のプログラムの入力になること。余計な情報を出力せず、標準化されたテキスト形式を使用する。
ソフトウェアを早期に、理想的には数週間で試せるように設計・構築すること。
プログラミング作業を軽減するためにツールを使うこと。
これらの原則は、その後の
UNIX文化を形成する上で重要な役割を果たしました。
1994年、ピーター・H・サラスは、これらの原則を以下のようにまとめました。
一つのことをうまくやるプログラムを書く
連携するプログラムを書く
テキストストリームを扱うプログラムを書く
UNIXの創始者であるケン・トンプソンとデニス・リッチーは、1974年の論文で、UNIXの設計において以下の点を考慮したと述べています。
プログラムの作成、テスト、実行が容易であること
対話的な使用を可能にすること
サイズ制約が設計をエレガントにすること
ロブ・パイクのプログラミング格言
UNIX哲学と密接な関係があるロブ・パイクは、プログラミングにおける以下の格言を提唱しています。
ルール1: プログラムのボトルネックは予測できない。計測するまで最適化してはならない。
ルール2: 計測するまでは速度調整をしてはならない。
ルール3: シンプルなアルゴリズムとデータ構造を使用する。
ルール4:
データ構造がすべてを決める。
これらの格言は、
ソフトウェア開発における実践的な知恵を表しており、
UNIX哲学の重要な側面を補完するものです。
マイク・ガンカーズのUNIX哲学
マイク・ガンカーズは、
UNIXの
経験に基づいて以下の9つの
UNIX哲学を提唱しました。
スモール・イズ・ビューティフル: 小さいプログラムは美しい。
各プログラムは一つのことをうまくやる: 各プログラムは特定のタスクに集中する。
できる限り早く試作する: 迅速なプロトタイピングを重視する。
移植性を優先する: 効率よりも移植性を重視する。
データをテキストファイルに格納する: シンプルなテキスト形式でデータを扱う。
ソフトウェアを梃子として利用する:
ソフトウェアの再利用を促進する。
シェルスクリプトを利用する: シェルスクリプトで複雑なタスクを自動化する。
過度の対話的インターフェースを避ける: コマンドラインインターフェースを重視する。
すべてのプログラムをフィルタとして設計する: プログラムをデータの変換器として設計する。
「より悪いことは、より良いことだ」
リチャード・P・ガブリエルは、UNIXの優位性の一つとして、「より悪いことは、より良いことだ」という哲学を挙げています。これは、インターフェースと実装のシンプルさを、完全性よりも重視するという考え方です。ただし、この思想には、システムコールなどの複雑なケースをどのように処理するかという問題も存在します。
エリック・S・レイモンドのUNIXプログラミングの技法
エリック・S・レイモンドは、UNIX哲学を「Keep it Simple, Stupid(KISS原則)」というエンジニアリング哲学として要約しました。彼は、UNIXの文化規範がどのように適用されているかを説明し、以下のルールを提示しました。
モジュール化のルール: シンプルな部品を組み合わせる。
明瞭さのルール: 明瞭さを優先する。
合成のルール: 他のプログラムと接続できるようにする。
分割のルール: ポリシーとメカニズムを分離する。
シンプルさのルール: シンプルさを追求する。
倹約のルール: 大きなプログラムを避ける。
透明性のルール: 透明性を重視する。
頑丈さのルール: 透明性とシンプルさから頑丈さが生まれる。
代表のルール: 知識をデータに織り込む。
最小限の驚きのルール: ユーザーの期待を裏切らない。
沈黙のルール: 余計な出力をしない。
修復のルール: 失敗時は速やかに知らせる。
経済のルール: プログラマの時間を優先する。
生成のルール: 手書きを避ける。
最適化のルール:
プロトタイプを先に作る。
多様性のルール:「ただ一つの正しい方法」は信じない。
拡張性のルール: 未来を見据えて設計する。
UNIX哲学は、その有効性と普遍性について議論の余地があります。
GNUプロジェクトのように、
UNIXの伝統的なツールを拡張する動きもあれば、
UNIX哲学の原則に忠実であるべきだとする意見もあります。
まとめ
UNIX哲学は、
ソフトウェア開発における重要な指針であり、シンプルさ、
モジュール性、効率性、そして連携を重視するこの思想は、現代の
ソフトウェア開発にも大きな影響を与えています。この哲学は、単一の定義を持つものではなく、複数の解釈が存在することを理解することが重要です。
引用
「UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである。」- デニス・リッチー
「
UNIXはユーザが愚かなことをするのを止めるために作られたのではない。小器用なことをするのも防いでくれるのだ。」 - ダグ・グウィン
「UNIXはユーザフレンドリーだ。誰彼構わずフレンドリーになるわけではないだけだ。」- スティーブン・キング
「
UNIXを理解しない人々は、それを不十分に再発明することになるだろう」 - ヘンリー・スペンサー