【読書】Unixという考え方 ― その設計思想と哲学
きっかけはgithubのissue
この本を読むきっかけになったのは
emacs界隈ではデファクトであるmagitをvimに持ってきた
vimagitのとあるissueのやり取り。
そのissueとはAny plans to add blame command?
つまり、blameの実装予定はあるのか?という質問である。
その中でauthorは一つのことをうまくやるというUnixの哲学に基づき、その提案は棄却すると回答し、vim-fugitiveというプラグインの:Gblame
を案内した上で、won't fixとして片付けている。
僕にとってこれは少しカルチャーショックを受けると同時にUnixの哲学に絶大な好奇心を抱いた。
大学の頃にそんな話を授業で聞いたけど完全に忘れてしまっていた。Amazonで調べてみるとあるじゃないか。即ポチった。
プログラムとして何に集中すべきか
この本が繰り返し伝えることは、「一つのことをうまくやること」だった。まさにissueの回答そのもの。
プログラム(プロダクト)として何が素晴らしいのか?ということは、常々、少ないバイト数、速さ、省メモリなど様々な視点があるが、
Unixという哲学では「小さいこと」が美しいと定義付けている。
それはすべてを包括しており小さいことは
- 依存が少ない
- 使い方がシンプルになるので、使いやすい
- 小さいプログラムはプログラム自体が必要とするメモリへの展開が小さくて済む
- メンテナンスしやすい
- 組み合わせやすい
つまり、小さいものを組み合わせて大きいことをしようということだ。
Unixの|
(パイプ)がまさに「組み合わせで大きいことをしよう」表現している。
標準出力を次のプログラムに渡すことで、自分の好きな出力を得ることができる。
ファイルをcat
したら、grep
したいかもしれないし、sed
したいかもしれない。もしパイプという概念がなく、catがそれらを内包するしかなかったらどうなるだろう。
欲しい機能があっても、catに組み込まれない限り使えないので不便極まりない上に、installする上で依存するプログラムも大きくなるのでビルドにも時間がかかるだろう。
こう振り返ってみると、なんてよくできた哲学なんだ。。。と感銘他ならなかった。