ソフトウェア治具

「ソフトウェア治具」という言葉をわたしが発明したわけではないのだけど、あえてこの言葉に定義を与えたいと思う。たぶん、他で使っているのとは違う意味になってしまうが、それはそれ。

最近ではオープンソースのツール、ライブラリ、フレームワークといったものがあふれているので、自分でツールを一からつくる必要はほとんどない。「作るより探せ」というのが一般的になっている。じっさい、ほしいと思うものはだいたい見つかる。

でも、それでいいのだろうか。それで満足していていいのだろうか?

人が作ったプログラムは、とても機能も性能も品質もいいものが多い(もちろんあまりよくないものもとっても多いけれど)。だけど、自分が求めるものと100%一致することは、それほど多くはない。ほとんどの場合、ひとつかふたつは不足を感じる部分があったり、気に入らなかったりするものだ。

そんなとき、真のプログラマーは自分で、100%自分の気に入るようなプログラムを作ってしまう。スクラッチからはじめて、たぶん人のソースを参考にしたりもしながら、36時間くらいぶっとおしでハッキングして完成してしまう。かっこいいなあ。

さて、真のプログラマーではない、わたしのような平凡なプログラマはどうしたらよいだろう。既存のプログラムをそのまま使う、というのでもいいが、どうせなら100%気に入るプログラムがほしい。自分で一から作るには時間もないし(プログラマーはみんな忙しいのだ)、体力的にも厳しいし(プログラマーはだいたいいつも疲れている)、なにもそこまですることではないだろう(プログラマーは自分の能力が足らないことに気づいていても、そうとは滅多に認めないのだ)。

100%ではないツールがある。100%の理想像がある。ツールを理想像に向けて近づけて、ピッタリと合わせてくれる道具があれば、どうだろう。それがソフトウェア治具だ。

もともと治具とは機械工作の世界で、工具が正しい位置を加工できる(穴開けや切断や切削だ)ように、材料を固定したり刃先を誘導したりするための道具のことを言う。自動車のドアをピッタリ固定するための枠(正しい48箇所にネジ穴を開けられるように)だったり、iPodの側面のきれいなカーブを出すための型だったり、でかい冷蔵庫を(工場内で)スムーズに移動できるような吊具だったりもする。機械工作以外の分野でも治具という言葉は使われていて、けっこう多彩な意味を持っているようだから、ソフトウェアの世界に持ち込んでも怒られはしないだろう。

治具というのは、作るものの形や加工の方法に合わせて作る。基本的に一点ものなのだ。穴あけの位置が5mm変わったら、たぶん治具は作り直さないといけない。再利用は難しいし、汎用的なものではそもそもあまり役に立たないのだ。こなすべき仕事があるときに、それを効率的にするために、専用の道具を準備する。それが治具だ。

「ソフトウェア治具」という言葉の定義も、この意味に添ったものにしたい。工具(ツールやライブラリやフレームワーク)を、理想とする形にピタッと合わせるためのもの、というのが狭い意味。もうちょっと範囲を広げて、こんなふうに定義してみた。

ソフトウェア治具とは、

  • 目的に合わせて専用に作る
  • 出来合いのプログラムを積極的に利用する
  • 目的の変化に合わせて気軽に自由に変更する
  • 本来の目的を達成する手助けになる

ような、(小さな)プログラムである。

これはもともと意図していたことだが、プログラマー達(運用現場でちょいスクリプトを書くような人も含む)がちょこちょこ書いて使い捨てるようなプログラム、そういったもののことである。そうしたプログラムは得てして、作るのはムダだから人のものを使えとか、きちんとドキュメントを書いて標準化せよとか、また設計しないでコーディングなんかしてやがる、なんていうふうに風当たりが強かったりする。ソフトウェア治具という言葉を持ち出したのは、そうした「使い捨て」プログラムの隠された価値や、仕事と人に与えるよい影響のことを考えたいためだ。オブジェクト倶楽部のクリスマスイベントで整理してお話しする予定です。