ディスカッション (11件)
本来の目的とは全く無関係な細かい作業に時間を奪われること、いわゆる「ヤクの毛刈り(Yak Shaving)」。本来なら避けたい非効率な状況ですが、実はそこにこそ技術的な楽しみや学びがあるのではないか?という考察です。
今のプログラミングコミュニティが真っ二つに分かれている理由って、まさにこれだと思うんだよね。プロセスの過程そのものを楽しむ派と、とにかくさっさと目的地にたどり着きたい派。
『マルコム in the Middle』のヤクのシーン、大好きなんだよね。
話はそれるけど、面白いエピソードがあるよ。
前の職場で、同僚たちが僕のことを指して「トーマシング(Thomasing)」[1]っていう造語を作ったんだ。「質問に対する説明があまりに徹底的で、詳細で、長々しすぎて、質問者自身が何を聞こうとしていたのか忘れてしまう」という行為のことなんだけど。
まあ、確かに自分の性格を端的に表してるなって思って、結構笑えたよ。
[1] もちろん悪気はなくて、結構仲のいいグループだったからね。みんなで冗談を言い合ってただけ。
「ヤクの毛刈り(Yak-shaving)」を否定することは、エンジニアを既存のパターンや慣習、あるいは抽象化された層の上に縛り付けることになり、優秀なエンジニアの創造性を制限してしまう。実際、エンジニアやチームの視野を狭めることにもつながると思う。近年、フレームワークやライブラリの複雑さが爆発的に増しているソフトウェアの世界では、今すぐ「毛を刈らなきゃいけないヤク」は常に出現し続けるはずだよ。
ずっと「ヤクの毛刈り」は好きだったけど、コストやトレードオフが伴うから避けてきたんだ。でも最近はAIのおかげで、コストもトレードオフも大幅に減ったから、やりまくってるよ。実際、自分でツールやフレームワークを作ることは、適切に行えばパフォーマンス面で大きな恩恵があるし、解こうとしている問題をより深く理解する助けにもなる。今ほど「ヤクの毛刈り」に最適なタイミングはないね。
Christopher Priestの『The Extremes』という本にすっかり魅了されて、その理由を書いたブログ記事を作ろうと思ったんだ。で、そこにGIFをいくつか入れたくなってね。特に『マトリックス』の「デジャヴ」のシーンを入れたかったんだけど、見つからなくて。それにGIFを作るための古いPhotoshopももう手元にない。結局、そこから3週間(と大量のトークン)を費やして、GIF生成専用のネイティブなmacOSアプリ(Xcode製)を作ってる始末だよ。肝心のブログ記事はまだ書けてない。
高校の頃、Qbasicでゲームを作り始めたんだ。その過程で、『Quake』みたいに実行中にコマンドを入力してゲームを改造できるコンソールが欲しくなってね。それがきっかけでQbasicでスクリプトエンジンを作ることになった。結論から言うと、もう30年近く「ヤクの毛刈り」という壮大な冒険に出っぱなしってわけ。ゲームは未完成だけど、CとLuaを組み合わせたゲームエンジン兼汎用プラットフォームは手に入れたよ。いまだにいじり続けていて終わりが見えない。でもまあ、楽しんでるからいいんだ!
このブログはJekyll、Hugo、Gatsbyのような静的サイトジェネレーターやフレームワークを使っていません。
なるほど、だから下にスクロールしてもブログタイトルが画面に残り続けて、テキストに重なっちゃうのか。背景が完全に透明だから記事の文字も隠れないんだけど、文字と混ざっちゃって目がチラついて気になる。これが他のブログだったらバグだと確信するけど、ここではわざとやってるのか、既製品のソフトではできないカスタマイズの結果なのか判断に迷うね。
今、仕事の合間にriver[1]をベースにしたウィンドウマネージャーを自作してて、「自分は何をしてるんだろう」って自問自答してるよ。これを読むべきだったのか、それとも一番読んじゃいけないものだったのかわからないな。楽しんでるっていうより、燃えるような好奇心に近い。「このヤクの毛を刈るのは馬鹿らしくて無駄だ、貴重な時間を無駄にするのはやめよう……でも、もし刈ったらどんな見た目になるんだろう?」っていうね。
あと、『Ren and Stimpy』とか、懐かしいな!
まさに僕のdotfilesって感じだ。
- 1Passに保存したAPIキーを使って、Lima上のVMでClaudeを呼び出すシェル関数を追加したい
- それにはClaudeのVMを定義するYAMLファイルをテンプレート化する必要があるし、VMとホスト間で状態を同期させる確実な方法も必要
- JinjaやStarlarkのようなテンプレートエンジンを使えばいいけど、それだけのために依存関係を増やすのはなぁ
- そもそも、将来的にPiやopencodeを使う可能性もあるし
- 結局、LimaのYAMLファイル内のテンプレート変数を置換して、クォーテーションの処理でエラーを吐かないBash関数を作るのに、認めたくないほど時間をかけてしまった
(ちなみに、そのClaude VM関数は無事に動くようになったし、かなり快適だよ!)