yak shaving で人生の問題の80%が説明できる問題

つい最近、 yak shaving （ヤクの毛を刈る）、という言葉を知りました (原典)。これは「一見無関係に見えるけど、真の問題を解くのに必要な問題を解くのに必要な（これが何段階も続く）問題を解くのに必要な活動」という意味の言葉です。

yak shaving は、ようするに「ある問題を解こうと思ったら別の問題が出てきて、それを解こうと思ったらさらに別の問題が出てきて…」ということが延々と続く状況を表しています。ちなみに、ヤクとは毛が長い、牛の一種です。

yak shaving は、以前に覚えた bikeshed と同じくらい便利そうな表現です。というもの、プログラムを書いていると yak shaving 的な状況がすぐに発生するためです。

たとえば、「Amazon のほしい物リストを CSV 形式に変換して Excel で読み込むプログラムがあったら便利かな」なんていう一見簡単そうなことをやろうとしても、次のような状況が発生するのは目に見えています。

「さーて、まずはほしい物リストのページをとってくるか」「うげ、SSLでログインが必要かよ」「えーと、SSLでページとってくるにはどうするんだっけ」「うわ、OpenSSL 入ってねー」「インストールインストール」「で、これ使って Basic 認証…、じゃねーし」「これPOSTで認証かよ、どうやるんだっけ、あー Cookie も使ってるのか」「こういうのってやるのなんかなかったけ」「Mechanize とかいうの使えばいいわけ。へーなるほど」「で、ようやくページゲット」「あれ、これ UTF-8 じゃないの? いまどき Shift_JISかよ...」「Shift_JIS を UTF-8 に変換するのどうやるんだっけ」「あー、なんかライブラリでできるのね。変換変換...」「うげー、全角の波線が半角チルダになっちまったよ。なんでやねん」「はあ、shift_jis と cp932 の変換テーブルは違うのか。さすが Wikipedia は役立つぜ、ところでジンバブエはどうなってるんだっけ」「なんかこの HTML ごちゃごちゃしてるなー。正規表現でうまくスクレイプできるんかな。って、メールアドレスの正規表現はこんなに長いのかよ。ああ、なんか他になかったっけ」「ナイスブログ発見、Scraper とかいうの使えばいいのか。やってみるかな」「で、これCSVにするのは、カンマいれればいいだけか」「と思ったら値段にカンマ入ってるし。余計なことするなよな、ようはダブルクオートすればいいのね」「と思ったら、今度は本のタイトルにダブルクオート入ってるし、勘弁してほしいし」「やれやれ、なんか CSV にまで RFC あるのかよ」「ってこれやっても Excel でやっぱ読めねーし。いってよしすぎる」「そういや、最近の Excel って XML 読み込めなかったっけ。どういうフォーマットだろう、こっちでいくかなー」「で、XMLの処理ってどうやるんだ。んー、 libxml とかいうのが必要なの？うげ、やっぱ入ってないし」「インストールインストール」「うわ、パッケージのバージョン古くてなんか動かない問題発生！」「自分でビルドするか。やな予感するなー」「うわ、やっぱビルドエラー！」「libtool 入れろってなんなのよ」「しかも libtool 入れてもコンパイルエラーで止まっちゃうし」「これって gcc のバージョンが古いってこと？」「gcc 入れるか」「ってサイト、ダウンしてるし」「そろそろブログでもチェックするかな、って、なんでこれが 600 ブックマーク超えてるの？」

実際のところ、プログラムを書き始めてから今にいたるまで、年がら年中こんなようなことをやっているわけで、my life is yak shaving という感じであります。

そう感じるのはめずらしくないようで、 Joi Ito 氏は "Acutally, my whole life is just one big yak shaving exercise." と言っています。なんだか yak shaving という言葉だけで人生の問題のほとんどを説明できるような気がしてきました。