radioc@?

レディオキャットハテナ

【読書メモ】UNIXという考え方

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

今年の夏休みの宿題として読もうと思ったものの休み中に読みきれず結局世の中的な夏休みも明けてしまった。

9つの定理

本書はUNIXの設計思想を9つの定理(実際にはプラスアルファとして10の小定理がある)として説明している。この一貫した思想でUNIXが何を重視し何を犠牲にしているかを理解することができる。また9つの定理のそれぞれは取るに足らないものであり、断片的に取り入れてもうまくいかないとされている。ある定理への批判は別の定理から反論されるように、9つの定理が相互に作用し合い、強化し合うことで、より広大で強力なものになるとしている。

このような設計思想はUNIXに限らずソフトウェア開発の設計においても重要な考え方であり、現代のソフトウェア開発にも取り入れられるものが多い。そのため原書が発売された1996年から20年が過ぎた現在でも多くの人に読まれ多くのエンジニアに影響を与えている。

スモール・イズ・ビューティフル

  • 分かりやすく理解しやすい
  • 保守が容易
  • 使用するシステムリソースが少なく効率が良い
  • プログラムが小さいことで他のツールと簡単に結合できる

1つのプログラムには1つのことをうまくやらせる

  • 比較的簡単に再利用できる
  • できることとできないことが明確
  • ソフトウェアは進化し明日には時代遅れになるかもしれないことを率直に受け入れられる

できるだけ早く試作する

  • 設計者の頭の中にあるイメージが早期に形となる
  • 試作を作ってみれば何がうまくいくか、何がうまくいかないかが分かる
  • 小さなプログラムを追加していけば費やす労力は最小限で済む
  • 第3システムへの歩みが早まる
    • 第1のシステム:特定のアイデアを元に少人数で開発され性能が良く革新的なシステム。
    • 第2のシステム:第1のシステムに多くの人々が集まり柔軟性や拡張性を加えたシステム。市場に受け入れられて広く浸透するが性能は下がる。
    • 第3のシステム:本当の専門家が第1のシステムと第2のシステムのバランスを取って作るシステム。オリジナルのコンセプトがそのまま残り常識となる。

効率より移植性を優先する

  • ソフトウェアは作るものではなく成長していくもの
  • 頻繁に現れる新しいアーキテクチャの長所をすぐに利用できる
  • 移植できるものは生き残る

数値データはASCIIフラットファイルに保存する

  • 移植性のあるデータは移植可能なアプリケーションに必須
  • データが最終的にどこで使われるかは分からない
  • 人の目でデータが読めることで第3のシステムへのプロセスが容易になる

ソフトウェアを梃子(てこ)として使う

  • プログラマの仕事の結果は誰のどのような仕事であれ複利計算で増大し大きな梃子の効果を発生させる
  • UNIXは梃子を使ったように個人の努力を増幅するのを助ける
  • 梃子の効果を利用するために独自技術症候群を避ける
  • 「実った稲穂は刈り取る」(世界に存在する偉大なソフトウェアの共有資産を活用する)

シェルスクリプトによって梃子の効果と移植性を高める

  • 梃子の効果を大きくするためにできるだけシェルスクリプトを使う
  • 高水準の抽象化を使う
  • 世界中の人々の仕事を合成し小さな努力で大きな成果を上げられる

過度の対話的インタフェースを避ける

  • いちいち応答を要求するようなプログラムは役に立たない
  • 拘束的プログラムは他のプログラムと結合するのが難しい
  • 拘束的ユーザーインターフェースはスケーラビリティに欠ける
  • ソフトウェアの梃子の効果を利用できない

すべてのプログラムをフィルタとして設計する

  • すべてのプログラムは何らかの形式のデータを入力とし何らかの形式のデータを出力する
  • データを作るのは人間でありプログラムではない
  • プログラムはデータを別の形式に変換する
  • UNIXstdin でデータを入力し stdout で出力、エラーや警告は stderr を使用する

おわりに

9つの定理のほかに、10の小定理というのもまとめられているがこれは以下のように説明されている(詳細は本書を参照)。

9つの定理に比べると必ずしも教義として受け入れられているものではないがUNIX文化の一翼を担っている。

改めてまとめてみると現在のアジャイルやリーン開発、マイクロサービスアーキテクチャなどの開発手法も9つの定理のいくつかと同じ思想を共有しているように思え、UNIXの設計思想が現在の開発手法にも大きく影響を与えていると感じる。

また、先日発売されたWEB+DB PRESS vol.100でも「TOPエンジニアを支える1冊」の中で一番最初にこの本が紹介されており、いまだに多くのエンジニアにとって重要な思想であることがわかる。

WEB+DB PRESS Vol.100

WEB+DB PRESS Vol.100