無い物は作れ Tukubai流コマンド自作文化 : 第1章 共通部品ではなく「道具」を作るということ

Open usp Tukubaiを紹介すると、多くの人があることに興味を示す。それは、Tukubaiに貫かれる「コマンドを自ら作っていく」という習慣だ。コマンドを作るということは、他のプログラミング言語で考えればifやforなどの予約語を追加するようなものかもしれない。そう考えると確かに興味深いが、Unixの世界ではそれが当初のやり方だった。コマンドを自作する文化。この素晴らしさを、あらためて伝えたい。

Open usp Tukubaiは、何のために生まれたか

2012年、ユニバーサル・シェル・プログラミング研究所Open usp Tukubaiと名付けたUnixシェル向けのコマンドセット(通称Tukubaiコマンド)をリリースした。

名称の一部となっている「Tukubai」は、このコマンドセットにつけた単なる名前ではない。オープンソースやオープンプラットフォームの「ソース」や「プラットフォーム」などと同様に、特定の概念を指し示す言葉となっている。この概念を端的に言い表す言葉が存在しなかったため、ユニバーサル・シェル・プログラミング研究所がコマンドセットのリリースに合わせてTukubaiという言葉を定義して使っている。

Tukubaiとは

Tukubaiとは、Unix哲学や"Software Tools" (B.W.Kernighan、P.J.Plauger著)等の作法を忠実に受け継ぎ、進化させたシステム構築法。同音である蹲(蹲踞とも記す)という道具が用いられる茶道の精神に通じるものがあることからこの名を付けた。
Tukubaiは一種の思想であり、その源流は、Unixを生み出した先人たちの哲学にある。そしてこの哲学を受け継ぎ、進化させ、ユニバーサル・シェル・プログラミング研究所なりに具現化したものがOpen usp Tukubaiだ。将来Tukubaiという語が一般化し、Tukubaiの思想に基づいてある人Xがコマンドセットをリリースするなら、それはOpen X Tukubaiと呼ぶべき存在になるかもしれない。
Tukubaiコマンドは、実はその表面的な姿(書式や仕様、種類)が重要なのではない。重要なのは、コマンドセット全体としてどんな役割を果たしているかである。そしてTukubaiコマンドが果たすべき役割とは、ソフトウェア開発における「道具」になることでにある。

「道具とは何か」を理解する

Tukubaiが指し示す「道具」は、共通部品とは明確に区別される。ここでいう「道具」は次の3つの性質を持っている必要がある。

  1. 単機能であって汎用性がある
  2. インターフェースが決まっているが、逆にそれさえ守っていれば他には一切の制約がない
  3. 同じものを発明する気を起こさせない

「作ってみればあって当たり前の存在」、「どこの誰もが使えるもの」などとも言える。これらの性質を満たしているものは、世の中のさまざまな分野において作業を効率的にこなすうえで有用だ。もちろん、ソフトウェアの世界においても例外ではない。

身近にある道具と呼ばれるものを色々思い浮かべてみてほしい。それらがこの3つの性質を満たしているかどうか考えてみれば、ここで言わんとしている「道具」がどういうものであるかが見えてくる。

身のまわりにある道具

たとえば西洋料理を食べる際に使うナイフやフォーク、スプーンなど、これらは道具だ。西洋料理を食べるときは誰もが使うし、同種のものを発明する気も起こらない。インターフェースについて考えてみても、どれも片手で持って使うようにできており、棒状の形で大きさや重さなどもだいたい似ている。

一方で共通部品的な物とは、複数の道具をくっつけてみたり、よくある道具の形をちょっとだけ変形してみたり、といった俗にいうアイデア商品の大部分のものといえる。それらは特定の作業には驚く程の利便性を発揮するが、汎用性が乏しいために歴史の一部となるほどには普及しない。そして似たようなものが再発明される傾向にある。

ソフトウェアはライブラリは道具にも近いが

ソフトウェアにも道具的なものと共通部品的なものがある。ある程度汎用性があり、再利用可能なコードを集めたものとされるライブラリは、その両方の側面を持っている。

たとえばMicrosoft Visual C++には通称MFCと呼ばれるクラスライブラリがある。これはC++によるWindowsプログラミングを容易にするためのものであり、数多くのクラスが用意されている。しかしそれらをすべてを把握して使いこなしている人は少数だろう。

その一方で、C言語の文字列変数の扱いづらさを補完するCStringのように、MFCを利用する人の大多数が利用するクラスもある。このような違いというのも、先に記した3つの性質の有無によるところが大きい。

ユーティリティやアプリケーションとの違い

類似の用語に、ユーティリティやアプリケーションといったものがあるが、これらもここで言う道具とは違う。ユーティリティはたとえば、バックアップソフトとかテキストエディタといった物を指すが、単機能とは限らないし、インターフェースも様々で、同様のものがいくらでも作られている。

アプリケーションはさらに複合的な機能を持つ物を指し、それ単体の使用で大きな目的を達成できる。これらももちろん有用なものだが、単体では目的を達成できない代わりに、組み合わせ次第でいかなる目的にも対応できる道具とは方向性の違うものだ。

Unixにおける道具とは

すでに述べたとおり、Tukubaiコマンドは道具としての役割を果たすべく作られたものである。そもそもUnixシェルで使われる標準コマンドには、先に記した3つの性質を満たす道具的なものが多い。

たとえばテキストフィルタに分類されるawk(1)、grep(1)、sed(1)、tr(1)などは道具的であるといえる。一方で、パスワードを設定するpasswd(1)コマンドやテキストエディタであるvi(1)といったコマンドは、道具というよりもユーティリティやアプリケーションといえる。

Unixのコマンドにも、道具的なものとユーティリティやアプリケーション的なものがある。そして、道具的と呼ぶべきUnixコマンドは、どれも共通した次の性質がある。

道具は組み合わせて使うことができるというのが、大きな特徴となる。このため、組み合わせて使えるようにすべく、前述したような仕様が生まれたといえる。Unixにおいて偉大な発明の1つであるパイプ(パイプライン)は、そのような背景から生まれている。

Unixシェルやシェルスクリプトは前述した作法を守るのに適した仕様になっている。道具たるコマンドを予約語のような感覚で呼び出せ、組み合わせることができる。こういった仕様は、Unix発明者達の思想の現れであって、「道具を使って問題を解決する」ということを示している。

USP MAGAZINE 2013 winter「【特集】無いものは作れ Tukubai流コマンド自作文化」より加筆修正後転載

usp Tukubaiユニバーサル・シェル・プログラミング研究所の登録商標。

Last modified: 2014-01-13 00:00:00