「UNIXという考え方―その設計思想と哲学」という本を読んだ感想です。

Unix哲学とはなにか

Unix哲学とはなにか?そんな「Unixらしさ」という暗黙知を言葉で書こうとした本だ。

  1. スモール・イズ・ビューティフル
  2. 一つのプログラムには一つのことをうまくやらせる
  3. できるだけ早く試作を作成する
  4. 効率より移植性
  5. 数値データはASCIIフラットファイルに保存する
  6. ソフトウェアの挺子を有効に活用する
  7. シェルスクリプトを使うことで挺子の効果と移植性を高める
  8. 過度の対話的インタフェースを避ける
  9. すべてのプログラムをフィルタにする

細かい内容については、Web上でいろいろと書かれているので、リンクをまとめておく。

内容は、まずはUnixとはこのようなものだという定理を示し、それに対する体験談や具体例を上げながら説明されていく。エッセイのようだ。

Unixらしさについて

以下、名言だと思ったことに対する抜き出しと、自分の感想を述べる。

Small is beautiful

小さいことは素晴らしいということ。

小さいとわかりやすい、フィルタとして扱いやすい、移植性が高い・・・などなど。プログラムが小さいと、Unixにとっての美徳を十分に発揮できる。だから、美しい?ということ。

自分でシェルスクリプトを書くときも、なるべく小さな、単一の機能を持ち、フィルタとして動作するような、軽量スクリプトにするように心がけたい。

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

Unixでは、設定ファイルがテキスト形式。Windowsに慣れ親しんでた自分には、Linuxのこのようなテキスト設定ファイルの編集は驚いた。これは、移植性を考えてのことだったのかと、納得。

独自フォーマットは移植性が低い。テキスト形式は移植性が高い。

そして、テキストデータは扱いやすく、編集しやすい。データをフィルタやパイプを駆使して処理することを美徳とするUnixとしては、動かせないデータは死んだデータだ、とも書いてある。

対話的なシェルは、他のプログラムと結合することが難しいため、否定的に書かれている。対話的にデータを取得するのではなくて、設定ファイルにデータを書き込んで、それを処理することがよいこととされている。自分で書くシェルでもこの点は大いに参考になる。readコマンドはなるべく使わずに、テキストを介するようにしようとおもった。

よいプログラマはよいコードを書く。偉大なプログラマはよいコードを借りてくる。

Unixでは、小さなプログラムを組み合わせて利用すること好む。ソフトウェアの「梃子(てこ)」を利用して、なんでも自動化しようとすることが、Unixプログラマの美徳。

その組み合わせる対象のツールは、なんでも自分で作るのではなくて、すでにある過去の資産を利用しようということだ。むしろ、どのようにツールを組み合わせて目的を実現するか、ということに注力することを礼賛している。

なるほど、UnixやLinuxには、自分の知らないコマンドがまだまだたくさんある。自分で作成るスクリプトやCプログラムなんて、車輪の再発明かもしれない。自分で作成するプログラムはたしかに達成感があるけれども、時間がかかるし他人のプログラムよりも劣るかもれない。過去の資産を利用することを心がけよう。

全てのプログラムはフィルタとして振る舞うようにせよ

パイプ、シェル、そしてフィルタ。Unix哲学を理解するためには、この3つの単語が必須。

フィルタとは、データを変換するもの。すべてのプログラムはデータを処理するためのフィルタといえる。フィルタには、標準入力(stdin)と標準出力(stdout)がある。標準入力から入力されたデータをフィルタを介して変換し、標準出力に出力する。一つの形式から、別の形式に変換する。

パイプとは、標準出力を標準入力に変換するもの。パイプを介して、フィルタとフィルタを連続してつなげることができる。

シェルとは、フィルタやパイブをまとめたもの。シェルもフィルタといえる。

パイプやフィルタをより使いやすくするためには、対話的プログラムは悪だ、ということになる。データはテキスト形式で保存せよ、ということになる。そして、小さいことは美しいということになる。全ては、このパイプとフィルタのためにある。

改めて、自分がそのパイプとフィルタを使いこなせているかというと、使いこなせてないと思う。パイプとフィルタの理解が深まれば、いまよりずっと効率よく、物事がこなせるかもしれない。また、そのようにUnixのコマンドたちは設計されているのだ。

さいごに

この本には、今まで使ってたLinuxに対するそれらしさが言葉で書かれている。なので、ああそういうことかという発見が散らばっていた。

また、自分でシェルスクリプトを書くときの小さなヒントも得ることができた。

Linuxをよく使うひとならば必読な本かもしれない。そういってもいいような読後感だ。