『UNIXという考え方』 Mike Gancarz 【感想・備忘録】
初稿:
- 15 min read -

『UNIXという考え方』の概要
OSを使いこなすためには、その背後にある「哲学」を理解することが必要です。本書では技術的詳細には立ち入らず、その代わりに、今まで文章で表されることが少なかったUNIXの考え方を、9つの「定理」にまとめて平易な言葉で明らかにしています。 定理1:スモール・イズ・ビューティフル 定理2:一つのプログラムには一つのことをうまくやらせる 定理3:できるだけ早く試作を作成する 定理4:効率より移植性 定理5:数値データはASCIIフラットファイルに保存する 定理6:ソフトウェアの挺子を有効に活用する 定理7:シェルスクリプトを使うことで挺子の効果と移植性を高める 定理8:過度の対話的インタフェースを避ける 定理9:すべてのプログラムをフィルタにする UNIXをUNIXらしく使いこなしたい、UNIXらしいプログラムを作りたい人のための一冊です。
— UNIXという考え方 | Ohmsha より引用
『UNIXという考え方』の特徴
- いわゆる「UNIX入門書」と異なり、UNIXの根底にある哲学を語る一冊
- 1994年に発表された書籍だが、現代にアジャストした内容に驚かされる
- 複雑さを増すシステムと向き合うための土台となる知識が学べる
読書感想
1994年に発表された古い書籍だが、30年以上経過した現在において色褪せない内容に驚かされた。つまり、普遍性のある内容であり、その変わらない部分にアンダーラインを引くことが本書を読む意義である。
本書は、UNIXというOSとしてのソフトウェアの根底にある哲学を語るものであり、いわゆる「UNIX入門書」とは異なる。著者は、技術的詳細には立ち入らず、その代わりに、今まで文章で表されることが少なかったUNIXの考え方を9つの「定理」にまとめて平易な言葉で明らかにしている。
以降は、個人的に、特に印象深い箇所を引用し、感想を述べていく。
試作の重要性
試作以前のアイデアは、これはこう動くはずだという憶測の域を出ない。この時点では、設計構想はほとんど理解されておらず、おそらく人によって解釈が異なっているだろう。プロジェクトの前進には、全員の合意が必要だ。試作は、具体的に目標を示すことで全員の合意を醸成する。 — P31より引用
人は実物を前にしないと理解できない。つまり合意に至ることが難しく、時間を浪費し、プロジェクトの進行を妨げる。
試作は、具体的に目標を示すことで全員の合意を醸成する。これは、システム開発のみならず、あらゆるプロジェクトにおいて重要な考え方である。試作を通じて、実際の動作を確認し、問題点を洗い出すことで、より良い方向に進むことができる。
システム開発の現場においてアジャイル開発が注目を集めている現状は、つまりそういうことだろう。
3つのシステム
人間には、三つのシステムしか作れない。いくら一所懸命にやっても、何時間、何か月、何年注ぎ込もうとも、結局は三つ止まりだ。人間には四つ目のシステムを作ることはできない。 — P32より引用
ここから始まる3つのシステムの話は、特に印象に残った。この3つのシステムは、大まかに言うと以下のようなものである。
- 第一のシステムは、成功の予測が最も難しい段階。リスクが高く、参加するメンバーは少ない。第二のシステム開発に発展するか誰にもわからない。
- 第二のシステムは、真っ新な状態を脱しており、リスクは低下している。初期の第一のシステムの成功に魅かれ集まったメンバーにより開発が進む。第一のシステムが無駄なく俊敏だったのに対し、第二のシステムは巨人のように動きが鈍い。
- 第三のシステムは、誰にとっても費やした労力に対して、最大の利便性をもたらすシステム。つまり、多くの人にとって「成功した」と言わしめるシステムである。
システム業界に限らず、私たちは「第三のシステム」的なものを目指す。いかに短期間・低コストで「第三のシステム」を実現するかに注力する。
なかには、初手で「第三のシステム」を目指す人もいる。著者は「第四のシステム」は存在しないと言っている。だが、そのようなハックが生み出したものが実は第四のシステムかもしれない。一見すると第三のシステムに見えるが、ハンドリングできない未知なるリスクを抱えている。
どうすれば「第三のシステム」を作れるのか?
では、どのようにすれば、第三のシステムを作れるのだろうか? 最初に他の二つのシステムを作るのだ。それ以外の方法はない。この順序を変えようとして何をやっても、それは本来一つずつですむはずの第一のシステムと第二のシステムをいくつも作ることにしかならないだろう。
これである。ハックは存在しない。直感を正しいと信じる傾向を持つ私たち人間は、初手で正解を出すことができない現実を受け入れる必要がある。
試験を行い、実験をくり返し、たとえ結果が直感に反しても受け入れる。現代科学のエッセンスの習得が第三のシステムを作る近道だと解釈した。
移植性と効率
効率を選択すれば移植性が劣るコードができ、移植性を選択すればときに効率がいま一つのソフトウェアができあがる。 — P49より引用
ここで移植性とは、現代で言うところのマルチプラットフォーム・クロスプラットフォームと捉えれば良いだろう。なぜ、効率がいま一つでも、移植性を選択するのか?
ハードウェアと切り離すことができないソフトウェアは、そのハードウェアが競争力を持ち続ける間しか価値を維持できない。ハードウェアの優位が失せると、ソフトウェアの価値も劇的に下落する。 — P52より引用
ソフトウェアとは、何らかのプラットフォーム上で動作するものである。そこに依存性があれば、そのプラットフォームの命運に左右される。
これは様々なことに当てはまる示唆深い内容である。
生物進化のように、環境は常に変化し、その変化に適応したものが生き残る。昨今の生成AI、開発言語の変遷など、1~2年も持たずに主役が入れ替わる。
自然界同様に、システム開発の世界もいかに環境依存を排除するかが鍵であることをあらためて認識させられた。
UNIXの長所
UNIXの長所の一つは、プログラム同士が効率的に対話することにある。 — P95より引用
シェルコマンドの一つひとつは別のプログラムである。それらが、パイプでつながりさまざまな処理を実現する。この精神はRESTful APIやマイクロサービスに通じるものがある。 シェルコマンドを念頭に置くことで、よい設計ができるのではないかと考えさせられた。
フィルタ
コンピュータの出現以来、書かれたすべてのプログラムはフィルタだ。 — P98より引用
一見すると何の話かと思うが、これはソフトウェアの本質を突く表現だ。かつ短く、わかりやすい。
プログラムはデータを作らない。人間がつくる 一般にはアプリケーションがデータを作ると信じられているが、実際のところ、アプリケーションにはデータを作る能力などない。データを作るには、創造力が必要だ。そして、オリジナルの情報源が必要だ。コンピュータは情報源を持たない。 — P99より引用
生成AIのように、どれだけ優れていようと、行っていることの本質はフィルタである。人間が作ったデータを元に、フィルタを通して新たなデータを生成する。そのデータは、あくまで人間が作ったデータを元にしている。
このことは、進化のスピードが加速する現代において、いまいちど冷静にコトの状況を見つめ直すきっかけとなった。
UNIXプログラムで最優先されるのは、ほかのプログラムとの通信であり対話だ。UNIXプログラムも最終的には人間と対話しなければならないが、それは重要性では二の次だ。 — P137より引用
逆説的に思うが、実のところ他のプログラムとの通信を優先したものが時代を越えて生き残る。 つい、人間目線でユーザビリティに意識がむいてしまう。だが、選択や設計を行う際、この考え方を忘れてはいけない。
著者・訳者について
著者について
Mike Gancarz はジョージア州アトランタでアプリケーションとプログラミングのコンサルタントをしている。Linux、Unix、Javaツールを使用し、彼のチームは金融サービス業界向けに受賞歴のある画像ソリューションを開発している。Unixアプリケーション設計のエキスパートであるマイクは、20年以上にわたってUnixアプローチを支持してきた。X Window Systemを誕生させたチームのメンバーとして、現在もLinux上で動作する最新のウィンドウ・マネージャに見られるユーザビリティ・コンセプトのパイオニアである。ニューハンプシャー州ナシュアにあるデジタル・イクイップメント・コーポレーションのUnixエンジニアリング・グループに勤務していたとき、マイクは64ビットAlphaプロセッサーへのUnixコマンドとユーティリティの移植を主導した。彼の最初の著書『The Unix Philosophy』(Digital Press、1995年)は、世界中で15,000部以上売れました。 — Amazonより引用
訳者について
芳尾 桂(よしお かつら) 1969年 福岡生まれ。 1992年 熊本大学大学院工学研究科卒。 雑誌の付録についていたDebian GNU/Linuxを古いPCにインストールしてみたことから、オープンソースの世界にのめりこむ。 本書を監訳することになったきっかけは、Debian Weekly Newsに良い書籍として紹介されていたこと。 — 本書より引用