
2026/06/16 23:26
ヤクシェービング(2019)は面白いことだ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Key Points List には具体的な物語的な詳細や、Summary には含まれていない「教育的価値に関する捻転(ターン)」が含まれているため、原文の範囲をより包括的に反映することを目的とした改良版の提供が推奨されます。
Improved Summary:
KO (2019) のブログ投稿は、既存のフレームワーク(Jekyll や Hugo など)の利用ではなく、カスタムの静的サイト生成器を作成する自身の個人的な旅路を語っており、「ヤクシェービング」という概念を体現しています。この用語は、MIT の PhD 学生である Carlin Vieri が『Ren & Stimpy Show』を観て考案されたものであり、「無駄で endless なタスク」について描かれたエピソードに言及しており、これがエンジニアがしばしば当初の目標から目を逸らしてしまう様子と一致します。このような行動は、通常、市販ツールの不満足さや技術的専門性を証明したいという願望から生じ、開発者が無関係なサブ課題の解決へと陥り、スコープの拡大(scope creep)および予算問題を引き起こします。文章では標準的なプロジェクトに対してはこの螺旋への警告が行われていますが、Donald Knuth は歴史的例外として挙げられており、彼が 10 年間かけたヤクシェービングセッションで TeX(および METAFONT などの関連ツール)を作成し、商用選択肢が失敗した際にも重要な問題を解決することに成功しました。著者は結論として、ヤクシェービングにはプロジェクトを逸脱させる重大なリスクを伴いますが、代替的な解決策が必要であるという認識を持っており、無限の資源を転用することなく、核心的な要件を満たすための方法を把握しさえすれば、新しいスキルの習得とユニークな課題の解決の有効な方法となり得ると述べています。
本文
組む喜び:ゼロから構築することのメリットとリスク
ヤクの毛剃り(Yak Shaving)とは
エンジニアやプロジェクトにおいて「ゼロから構築」を選ぶ行為は、ヤクの毛剃り(Yak Shaving)と呼ばれる現象です。これは、ある目的のために一連の関連タスクを行いつつ、結果として元の目的を忘れ、まったく別の何かに終止してしまう状態を指します。
有名なエピソード
- 斧とヤクの話
- 木を伐るための斧を手に入れたが、刃が钝っていた。
- 研ぐための石を探すために村へ向かうため、ヤクに乗った。
- ヤクの毛が長すぎて剃らなければならなかった。
- 車洗いの話(セス・ゴディン)
- 車を洗おうとしたが、ホースが壊れていたためホームデポへ向かうことに。
- タッパンシー大橋を渡るために E-ZPass を用意する必要があり、近所の「ボブ」に借りようとするが拒絶された。
- ボブの息子の枕を返さなければならないため、ヤクで毛を集めて中を詰め直す羽目になった。
結果として、車を洗うだけという単純な目的は、ヤクの毛を剃ることへと変わってしまいました。
言葉の由来
この用語自体の起源は、アニメ『レネとスチムピー』のエピソード「ヤクの毛剃りデー」にあります。
- アニメでは、汚れたオムツを壁に掛けたり、コールスローをブーツに入れたりして家を飾り、魔法のカヤックに乗った剃られたヤクが贈物を届けるストーリーです。
- 提案者であるカーリン・ヴィエリ氏は、ソフトウェアとは無関係なこの話を見て困惑しましたが、深夜の業務中に同僚に対し「僕はヤクの毛剃りをしているんだ」と表現し、次第に浸透していきました。
なぜエンジニアはゼロから構築するのか?
エンジニアや管理層が市販ソリューションを使わずに自作を選ぶ傾向には、以下のような理由があります。
- 個人: 市販製品への不満や、自らの技術力を示したいという動機
- 管理側: 既存ソリューションの機能に対する誤解や、要件適合性の不足
致命的なリスク:ゴールの喪失
プロジェクトには必ず予算と時間の制限があります。「ゼロから構築」を試みると以下のような状況に陥りやすくなります。
- やがてヤクの毛剃りの状態に入り、先が見えなくなる
- 当初の目的自体を放棄してしまう
適切な対応は以下の通りです。
- 要件の本質部分を満たす代替手段を見出す
- 作業範囲を可能な限り縮小する
「組むこと」の純粋な喜び
しかし、ヤクの毛剃りには仕方がなく面白い側面もあります。
エンジニアに惹かれるもの
- 存在しなかったものを自ら作る喜び
- 問題を見つけ解決することへの達成感
- 知識の連鎖をたどり仕組みを理解していく過程
フレデリック・P・ブルクスは『神話的なマン・マンス』で、プログラミングが楽しい理由として以下の点を挙げています。
- 物を作ることの純粋な喜び
- 他の人にとって役に立つものを作る喜び
- 複雑でパズル的なオブジェクトを造り上げる魅力
- 微細なサイクルで現れる組み合わさった動部品への愛着
- 絶え間ない学習の喜び
- 柔軟で扱いやすい表現媒体との協働の喜び
TeX:成功したヤクの毛剃りの例
TeX は、スタンフォード大学のドナルド・クヌース氏が開発した「タイセットシステム」の総称です。数式の入力が容易なため、社会科学や学術分野で広く利用されています。(現在はマクロを定義するLaTeX形式が主流です。)
美しい数学表記の実現
TeX システムにより、複雑な算式も美しくレイアウトされます。
-b \pm \sqrt{b^2 - 4ac} \over 2a
出力結果:
$$-\frac{b \pm \sqrt{b^2 - 4ac}}{2a}$$
開発の経緯
1976 年、クヌース氏は旧来のホットタイプ(熱型方式)が入手不可能なため、デジタルタイセットシステムの独自構築を決意しました。これを契機に以下のような巨大なプロジェクトが誕生しました。
- TeX: タイセット言語とコンパイラー
- プログラミング言語: SAIL 言語から独自のWEB言語へ書き換え
- リテレート・プログラミング: 文書とコードを混在させ、WEAVE と TANGL で抽出するパラダイム
- TeX フォント: コンピュータ・モーダンのデザイン
- METAFONT: ベクター图形を定義するための言語
- DVI 形式: デバイス非依存な出力の実現
ドナルド・クヌース氏は単なる本の執筆のために、プログラミング言語やアルゴリズム、文字体系まで創出しました。開発に約10 年かかりましたが、それは無駄ではありませんでした。
失敗するケースと学ぶ機会
もちろん、TeX のように極端に成功する事例は稀です。大半のヤクの毛剃りは失敗します。
やめられない理由と失敗パターン
- 投入した時間の損失: 「これだけの時間を使ったから」という心理で続ける
- 興味の喪失: 「結局今何をしていたんだ?」という疑問が湧く
- リソースの枯渇: 予算や時間が尽きて断念する
学習意欲を持つ方への教訓
しかし、学習意欲がある人にとっては、ヤクの毛剃りは驚くほど効果的です。
- 授業や課題自体よりも、その周囲にある知識への探求から得られる学びの方が大きい場合が多い
- ヤクを剃る過程自体が何かを教えてくれる
例えば、計算機システムを組み込むことを目的とすると、必然的に以下のような分野を学ぶ必要があります。
- ブール論理や論理回路
- コンピュータアーキテクチャ
- プログラミング言語
- オペレーティングシステム
ノアム・ニサンとシモン・ショッケン著『計算機システムの要素』は、このような流れに沿って解説しています。ゴールに到達しなくても、ヤクを剃る過程で何か学べたのであれば、それだけで十分価値があると言えるでしょう。
結論
いずれにせよ、「ヤクの毛剃りは面白いものです」。 ゼロから組むプロセス自体が、エンジニアとしての心を引き付け、新たな知識を生み出す宝庫なのです。