UNIX哲学記

ようこそいらっしゃいました。これはMatsuの考えをダンプする手記です。

UNIX哲学への扉

UNIX哲学への扉

2021/1/31

UNIX哲学について、いくつか記事を書き溜めている。
だが、それぞれが大変な力作になりそうで、公開に時間がかかりそうな見込みである。

これでは、このブログを始めた「アウトプットを高める」という目標が、短期的に見て達成できそうにも無い。
なので、とりあえず何か書いてみることとしたのが、この記事である。

ここでは、僕が感じている現代のUNIX哲学の持つ課題と、その哲学を学習するためのポインタを示していきたいと思う。
なお、読者は「ソフトウェア」「ITインフラ」の開発もしくは運用に携わる、多様なIT従事者を想定している。

UNIX哲学の持つ課題

まず、僕は誰彼構わず、UNIX哲学は至極であり、従わない者は技術者として慧眼が足りていない、という態度を貫いている。
これにより、大きな反発を食らうことも多々ある。 僕の"人望"のなせる技でもあるが、また同時に「哲学」という言葉が何か宗教的/妄信的な胡散臭さを持った印象を受ける(それが魅力ではあるが)ことも事実である。
前回の自己紹介での書いたが、僕がコードを嗜む程度にしか書けない「ネットワークエンジニア」であり、一度でも「ソフトウェア」を専業にした人には素人考えにも映るのだろう。

そもその、誰も、人から考え方を押し付けられたくは無いものである。
しかし、僕はまた、こうも思っている。

UNIX哲学がモダンな考え方だとは思っていない。ただし、モダンな考え方をする前に、古い考え方を学ばなければならない。」

UNIX哲学とは何か?を説明したWeb資源は既に存在するが、その多くはMike Gancarzの「UNIXという考え方」を示すものが多い。これが「聖典」のように扱われており、思い腰を上げて読んでみると、確かにわかりやすい「Tenet(教義)」が示されているが、いかんせん内容が古い。わかりやすい考え方と古い内容、さらにその後に読むもののポインタを示すものが無いのも宗教くさく思えてしまうという課題だと思うのだが、読者の皆様はどう感じるだろうか。

Wikipediaの「UNIX哲学」のページにも記載されているが、「UNIX哲学」とは一貫してUNIXに存在する考え方ではなく、Mike GancarzというX Window systemを開発していたおっさんが「UNIX Philosophy」としてまとめ、勝手に言っているだけのものなのである。

Wikipediaでは、他にも「UNIXの四半世紀」「The Art of UNIX Programming」という書籍が取り上げられている。

書籍で学ぶUNIX哲学

Mike Gancarz 「UNIXという考え方」

内容については、githubでまとめが作られている。

しかし、分厚くも無く、上手い翻訳で大変読みやすいため、購入しての一読をお勧めする。
※邦訳について、Kindleなど電子書籍は今の所ない。

UNIXという考え方 The UNIX philosophy · GitHub

UNIX哲学に言及しているウェブサイトは、下記のようなものがあるが、その全てが本書を紹介している。

『UNIXという考え方』新人エンジニアにオススメする技術書

プログラマ以外にも有用なUNIX哲学

プログラミングに対する考え方の80%ぐらい影響を受けた「UNIXという考え方」の素晴らしいまとめがあった

社内勉強会で「UNIXという考え方」を発表しました

なお、「UNIXという考え方」には続編となる、

Mike Gancarz「Linux and the Unix Philosophy」

が出版されているが、邦訳はまだされていない。原文で読んでいるが、元々の本にLinuxの発展を踏まえた、興味深い追補が多くなされている。その経緯で、OSSLinuxの開発の背景について現在学習しているところである。

次に、ちらほらと名前が見えるのが、The Art of UNIX Programming」であろう。

Eric S. Raymond 「The Art of UNIX Programming」

UNIX哲学の基本原則

この本はWikipediaにも記載されている通り、Gancarzの「UNIX Philosophy(UNIX哲学)」とは少し色が違う。「UNIX Principle(UNIX原則)」と一般的に呼ばれているものである。

実はNDAの関係であまり深く話すことができないのだが、僕はTraineeとして勤めていたアメリカの企業で「UNIXのグル」と出会った。僕は常々、Windowsを端末とするネットワークやテレコムシステムの運用に辟易していて、すべてシェルの上で事を成せば物事は上手く進むのではないかと思いつつ、それを自分で実装出来ずにいた(また、それができるような"単品の"OSSも無かった)。しかしその会社では、基本的にシェルの上で、ネットワークをすべて制御することが可能だったのだ。自分の考え方と合致した、この完成しているエコシステムがどのように作られているのかわからなかったが、UNIXの哲学に沿ったものだということは分かったので、日本から持ってきたGancarz 「UNIXという考え方」を開いたのだった。

ある日、全社集会があって、ネットワークエンジニアリングのVPの彼の資料を見たとき、「自動化のためのシステムは、サイロではなくプラットフォームを作ることに固執する」と書いてあった。飲み会の際にVPに近づき、「あれはUNIX Philosophyなのだろう」、とそのグルに伝えた時、彼は強く「違う、これはUNIX principleだ」と言われ、その真意が当時はわからなかったが、恐らく、あらゆる「ただ一つの本当の方法」という主張は信じるな。というUNIX原則にある「多様性のルール」を考えての、グルのこだわりだったのでは無いかと思っている。

「The Art of UNIX Programming」は頭に出てくる「zen」の話だけを読んでも、UNIXありきの洗脳的な本なのだが、言われてみるとその通りである話が多く、UNIXに関わる広い知識や考え方を得るには最適な本であろう。またUNIXの歴史やC、UNIXで用いられるツールセットについても説明があり、お腹がいっぱいになってしまう(更に疑問が湧いてくる)。ただし、一部眠くなってしまう章やAWKをこけおろしている節などあり、グルの考えることは気難しいなぁと味わい深い一面もあるが、それを差し置いても知識が深まる一冊である。

UNIXの文化に親しむ

さて、上記の二冊を読めば、UNIXの考え方に一通り触れることはできるが、そもそもパソコンに触れるようになった時には既にLinuxが有った我々の世代からすると、その文化や背景となる知識がそもそも乏しい。その場合、UNIXの文化を深く知る事で、理解の助けになるかもしれない。

藤田昭人 「Unix考古学」

この本は、どのようにUNIXが育ってきたか、前身であるMulticsから商用UNIXになり、BSDに至るかを綴った本である。その考え方に深く触れるものでは無いが、副読書として読めば、UNIXの歴史のロマンに触れることができるのでは無いだろうか。

もし、あなたがコンソールでプログラムを書いたり作業をしたことがないのであれば、次の本もおすすめである。

株式会社創夢 「はじめてUNIXで仕事をする人が読む本」

株式会社創夢というUNIX業界では有名な会社で、新人研修のテキストとして作られてきたものを下地に、本となったものである。素人向けの本なのだろう、と手を付ける事がなかったのだが、UNIXに慣れ親しんでても「知らなかった」「曖昧にしていた」事が多く書かれており、地固めに初学者以外にもお勧めできる書籍である。

Peter H. Salus 「UNIXの四半世紀」

実は、ここで挙げてみたものの通読した事がない。訳が微妙に思えるところがあり、積んでしまっている。古書であり、原文もまた古書になると思われ入手が面倒なこともあり、万人にお勧めできる本かと言われると微妙なところかもしれない。

Brian W. Kernighan, Rob Pike 「UNIXプログラミング環境」

実は、この本も通読できていない。シェルの操作に留まらず、システムコールyacc/make/lexなど幅広く、概略ではあるが実装のコードレベルで説明がある本なのだが、最近のCではなく前時代のCだったりして読むのにカロリーが必要となる。最初の方のみを読んで、あとはパラパラと読んだ程度なのだが、「The Art of UNIX Programming」を読んでいれば、被るところは多いのではないか、と引き続き本棚の肥やしになっているのが現状である。

青木峰郎 「ふつうのLinuxプログラミング」

学生時代に読んだ本なのだが(実は僕のUNIX哲学の本流はこの本なのではないかと思う)、標準入出力ストリームを使用したプログラミング技法について、モダンな環境で学ぶ事ができる。より実装よりの分野において、「UNIXプログラミング環境」の代わりとして読むのはアリだと考えるが、UNIXの考え方に触れられている訳ではないため、本題からは少しずれるかもしれない。

広がるIT文化の歴史への興味

前述したGancarz「Linux and the Unix Philosophy」や、「The Art of UNIX Programming」を読んでいると、フリーソフトウェア運動や、OSSの文化についてより深く知りたいと思うようになる。

Eric S. Raymond「伽藍とバザール

「The Art of UNIX Programming」と同じ作者の、言わずもしれた古典である。
昔読んだ覚えがあるのだが、当時は背景知識がなく、「Linux and the Unix Philosophy」を翻訳しながら読むに合わせて、また本棚から引っ張ってきている。

モダンなUNIXに対する考えを深めていくと、ソフトウェア開発に関わる分野では、「人月の神話」「プリンシプル オブ プログラミング」、Linuxに関わる分野では「それがぼくには楽しかったから」「リナックスの革命」など、ハッカーズムーヴメントを含めて知りたくなってきてしまい、歴史の沼に沈んでしまうので注意が必要である。

日本のUNIX哲学に関わる「界隈」

僕は、前述したアメリカの企業で、実際に「UNIX原則」(哲学ではなく原則としておこう)に従ったエコシステムを自身で体験し、その魅力に取り憑かれた。しかし、実際の開発手法に触れていない人は、僕の拙い文章力では魅力に(その短所も、であるが)気づく事ができないだろう。実際に現代の日本における「UNIX哲学」の実践に関わるムーヴメントをいくつか紹介し、その参考図書を示そうと思う。

キーワードは、USPである。

ユニケージ開発手法

ユニケージとは、USP(ユニバーサル・シェル・プログラミング)研究所が提唱する、コマンドとシェルスクリプトでソフトウェアを開発する手法である。
ユニケージの考え方の起源は、1970年代の関西の薬局チェーンにおけるシステムユーザを中心としたシステムの開発手法と、UNIX哲学の融合によるものだそうだ *1
USP研究所という会社は、元々ダイエーシステム開発をしていた方がスピンアウトで作った会社である。usp Tsukubaiという独自のコマンドセットを用いて、SQLを使わない・シェルスクリプトの相互呼び出しをしない等、UNIX哲学に基づいた独自の手法でエンタープライズ・システムを構築する。

USP研究所 「ユニケージ原論」

僕はまだ理論を示すこの本しか読んだことはないのだが(実践編は未だに積んでいる)、ユーザ企業の課題を踏まえ、如何にUNIX哲学をシステム開発に適用するか体系だっている非常に良い考え方に感じられる。
しかし、ユニケージを導入した東急ハンズがユニケージを「技術的負債」として取り扱っていたり、同じく導入した無印良品のシステムが長時間止まっていたりと、レピュテーションが下がってきていることも事実として存在する。これはユニケージの適用例が増えることにより偶発的に発生したものなのか、その実装・実践に課題があるのかを筆者は判断ができない。

POSIX原理主義

POSIX中心主義とも呼ばれる。ユニケージがuspと言われる独自のコマンドセットを開発しシステムを構築するのに対し、POSIX原理主義では「POSIX規格」に準拠したプログラミングを実施することで、POSIXに準拠したシステムにおいてソフトウェアのポータビリティが最大化されることを目的とした思想である。

リッチー大佐 「初めてのPOSIX原理主義」
松浦智之,USP研究所 Windows/Mac/UNIX すべてで20年動くプログラムはどう書くべきか

「初めてのPOSIX原理主義」に示されるその基本的な考え方は「ソフトウェアの非常食」であり、自由度は高くないもののソフトウェアエンジニアが最後に使用することのできる、プラットフォームに依存しない開発手法/考え方である。

僕は過去、とある企業でインターネット接続環境がなく、またローカルにプログラムを実装する事が出来ない商用UNIX環境や、Windowsサーバを含めた20以上のサービスのインフラ運用をしていた事がある。そういった立場のシステムにおいて、自動化や改善を考えると非常に賞賛できる考え方である。またその技法の実践についても、上記書籍で実例を挙げ紹介されている。
しかし、逆に言えば「究極の縛りプレイ」であり、万人受けするものではないことも事実である。
これは真理が全ての人に受け入れられるわけではなく、また非常食は常に食べるに相応しいものではあり得ないのではないか、というのが現段階での僕の感想である。

USP友の会

USP友の会という、日本唯一のシェルプログラミングコミュニティとして設立された、グルーコードたるシェルスクリプトを中心とした活動である。
https://ja.wikipedia.org/wiki/USP%E5%8F%8B%E3%81%AE%E4%BC%9A

その主な活動として、シェルスクリプトマガジンの刊行と、シェル芸勉強会という隔月の勉強会が大きく挙げられる。

「シェル芸」とは、

主にUNIXオペレーティングシステムにおいて「マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理を CLI端末へのコマンド入力 一撃で 終わらせること」(USP友の会会長・上田隆一による定義)である。 この技術を持つ人物を シェル芸人 という。

というワンライナーで全てを済ますという過激な発想であり、技術や考え方というよりは技法であり、直感的には「UNIX哲学」の考え方に則っているものではないと思われる。
しかし、

上田隆一,USP研究所 「シェルプログラミング実用テクニック」
上田隆一,後藤大地,USP研究所 「フルスクラッチから1日でCMSを作る_シェルスクリプト高速開発手法入門」

などの上田先生の書籍を読むとわかるのだが、UNIX哲学の考え方を理解した上で、人とコンピュータは相容れない。が、如何にわかりやすく、人がコンピュータを操作するか、という手段としてシェルスクリプトを使用するところに根底の考え方がある。

「そういうまだ混沌とした状況の中 、プログラミングを取り巻く環境は大きく 2つに分岐しているようです 。一方は積極的に補助輪を付けて誰でもプログラミングできるようにしようという立場 。もう一方は筆者の出身研究室のように 、まだ進化しきっていない人間の頭をなんとか教育で補完しようという立場です 。分岐というよりも相補的かもしれませんが 、この立場の違いは 、ときに決定的に相容れないことがあります 。」

これはUNIX哲学の考え方を踏まえつつ、敢えて超絶技巧として取り扱うことで、実践的な技法として昇華された一例なのではないかと考えるようになってきた。

ちなみにシェル芸勉強会の界隈からは、「難読化シェル芸」など新たなムーブメントも日々誕生しつつある。

kanata 「難読化シェル芸の世界」

UNIX哲学への扉

ここまで通しで書いみて、僕は今、横柄にUNIX哲学について語ろうと思っていた傲慢さと、これを続けていくことが出来るのか?という不安を感じている。
僕がUNIX哲学について理解している事を書き出す事が出来たのは良かった事だが、圧倒的に学ぶ時間が足りていないし、周辺知識についてもまだまだ分からない事が多い事が再確認できた。

しかし、IT産業に従事する、UNIX哲学に興味を持った方が、その扉を開けるのには十分な情報量をアウトプット出来たのではないかと考えている。

また、軽い気持ちで「夏への扉」にひっかけて「UNIX哲学への扉」とタイトルを付けたのだが、今は人事不省で冷凍睡眠にかけられる、ダン(夏への扉の主人公)のような感覚を味わっている。
UNIX哲学の先に開かれる未来が良いものなのか、それとも未来には役立たないものなのか、それは今後明らかになるだろう。

引き続き、僕とともにこの哲学(とも言えない哲学)の勉強に付き合っていただけると幸いである。

*1:情報処理研究学会研究報告:ユニケージ開発手法に基づくUnixファイルシステムとシェルを用いたデータベースの構築と操作