Sausage Erectos X バグが直らない。AIを替えた。学名を付けた。パンクを歌った。── Bobus sausage erectus 誕生までの168時間
座標系を間違え続けるAI。無限に伸びる台座。深夜のパンクロック。 ──これは、ソーセージを立たせるために全てを捧げた7日間の記録である。
Day 0(0h)── 端材が立ち上がった日
全ては、1枚のステンレス板から始まった。
レーザー加工機がパーツを切り出した後に残る「端材」。普通は捨てる。しかしその端材の中に、偶然、人型のシルエットが浮かんでいた。
「……立ってないか? こいつ」
ソーセージを串に刺して立たせるBBQスタンド。関節の角度まで自由にカスタマイズできる。ARでグリルの上にプレビューし、注文すると職人が1体ずつレーザーで切り出す。
馬鹿馬鹿しい。──だからこそ、作る価値がある。
技術スタックを決めた。Three.jsで3Dモデルを生成。Paper.jsで2D展開図を描く。それをDXFに変換してレーザー加工機に送る。
AIをペアプログラミングの相棒に据えた。当時のパートナーはGemini。
プロジェクト名:Sausage Erectos。
168時間のカウントダウンが始まった。
Day 1-2(0-48h)── 希望と幻想の蜜月期
プロンプト一発で動くプロトタイプ
「Three.jsで人型ピクトグラムを3D生成して。関節はドラッグで可動。Paper.jsで2D展開図を同時生成。」
AIの回答は驚くほど的確だった。骨格構造、ジョイントの親子関係、シーンの初期設定。数時間で「動く」プロトタイプが立ち上がった。
「AIペアプロ、最高じゃないか」
そう思った。この時までは。
最初の小さな違和感
フットボード(台座)に角丸を付ける。簡単な話だ。
「接続面は直角、外側は角丸にして」
AIがコードを書く。実行する。──逆だ。
「逆になってる。外側を角丸に」
「修正しました」──逆だ。
3回目。逆だ。
この時点では「まあ、こういうこともあるか」と思っていた。甘かった。
Day 3(48-72h)── 座標系の迷宮
2つの世界の「上」は違う
Paper.jsの世界では、Y軸は下を向く。HTMLのCanvasと同じだ。
Three.jsの世界では、Y軸は上を向く。Z軸が手前。数学の座標系だ。
Sausage Erectosは、この2つの世界を同時に扱う。同じ「フィギュアの肩の位置」を、2つの異なる座標系で正しく計算し続けなければならない。
そしてAIは、毎回この変換を間違える。
20回目の「修正しました」
角丸のバグは、20回を超えても直らなかった。
AIは確かにコードを変更している。しかし「Y軸の反転」を2回適用していた。反転の反転は元に戻る。数学的には正しい。結果としては何も変わっていない。
AIが「修正しました」と言うたびに、私の信頼は削れていった。
深夜1時。エディタの画面を見つめながら、私は初めて「これは無理かもしれない」と思った。
Day 4(72-96h)── 「もういい」
決裂
深夜3時。26回目の「修正しました」の後。
画面には、相変わらず角丸が逆になったフットボードが映っていた。
私はキーボードに手を置いた。そして、こう打ち込んだ。
「もういい。お前じゃ無理だ。Claudeで修正させる。移行用プロンプトを書け。」
AIに感情はない。だから傷つかない。しかし、数日間ペアを組んだ相手を切る判断は、たとえ相手がAIでも、確実に消耗する。
遺書としてのプロンプト
皮肉なことに、AIが最後にこなした仕事は「自分の後任への引き継ぎ書」だった。
プロジェクトの状態、既知のバグ、設計思想、座標系の注意点。全てを「移行用プロンプト」としてまとめさせた。
遺書を書かせるタスクが、そのAIが最も得意とする作業だった。
Claude Code、降臨
Claude Codeに移行した瞬間、座標系のバグは劇的に減った。同じ間違いを繰り返す頻度が激減した。
ツールに忠誠を誓うな。プロダクトに誓え。──この日、私が学んだ最も重要な教訓だ。
Day 5(96-120h)── 台座が空に逃げていく
無限ループの恐怖
座標系の問題が片付いた矢先、もっと恐ろしいバグが現れた。
フィギュアの腕を広げる。重心が右にズレる。台座が右に伸びてバランスを取ろうとする。台座が伸びたことで全体が重くなる。重心が再計算される。台座がさらに伸びる。
∞
フィギュアが文字通り上空に逃げていく。台座が画面の外まで伸びていく。
個々の計算ロジックは正しい。台座を伸ばす計算も正しい。重心の再計算も正しい。正しいロジックの組み合わせが、破綻を生む。
Payload CoM ── ブレイクスルー
解決策は、朝のシャワー中に降りてきた。
「台座を重心計算から外せばいい」
台座を含めた全体の重心ではなく、ピクトグラム本体だけの重心── Payload CoM(ペイロード重心)── で台座の長さを決める。
台座がどれだけ伸びても、Payload CoMは変わらない。なぜなら計算対象に含まれていないから。
一発で正しい長さが決まる。ループしない。
コードの変更はたった1行。引数から台座を外しただけ。しかしこの1行に辿り着くまでに、12時間の格闘があった。
同時に、初期設計の2枚のボード(青と赤)を、青い1枚だけに削ぎ落とした。複雑さが半分になった。バグの可能性も半分になった。
「足す」のではなく「引く」ことで解決する。
Day 6(120-144h)── 狂気のネーミング
「Bob Sausage」では物足りない
開発中、フィギュアは仮名「Bob Sausage」と呼ばれていた。
しかし、座標系の迷宮を抜け、無限ループを打ち破り、AIを乗り換えてまで完成させたプロダクトに、「ボブ」はあまりにも軽い。
転機は、カール・フォン・リンネの二名法を知った瞬間だった。
Bobus sausage erectus
全ての生物種に学名を付ける、ラテン語の分類法。Homo sapiens。Canis lupus。
──ならば、ソーセージスタンドにも学名を。
Bobus sausage erectus Specimen: 000 ♂ Est. 12 March 2026
属名Bobus(Bobのラテン語風活用)、種小名sausage erectus(直立するソーセージ)。
標本番号、性別記号、記載日。全てが自然史博物館の標本ラベルと同じフォーマット。
BBQのソーセージスタンドが、分類学の体系に刻まれた。
Meta APIの洗礼
ネーミングのハイの最中、SNS連携の実装で現実に引き戻された。
“Page access tokens cannot be generated”
Meta APIが「まず己(ユーザー)を証明せよ」と告げる。ページトークンを取るには、まずユーザートークン。ユーザートークンにはOAuth認証。OAuthにはコールバックURL。
APIキー1つに、4段階の手続き。
学名を与える方が、よほど簡単だった。
Day 7(144-168h)── 深夜のパンクロック
感情のガベージコレクション
最終日の深夜。全ての機能が動いていた。バグも潰した。デプロイも済んだ。
しかし、7日間の感情がメモリに溜まっていた。処理されていない怒り。解放されていない絶望。言語化されていない歓喜。
プログラマーの感情は、ガベージコレクションされない。手動で解放するしかない。
私は、歌った。
15秒のパンクロック
♪ なぜなんだ 青の奥は直角じゃないのか ♪ 赤の先端 丸くしたはずなのに ♪ 「直ってない」「逆である」画面に響く君の声 ♪ Y軸は下!Z軸は手前! ♪ 巡り巡る座標の迷宮!
15秒。168時間の全てが、15秒に凝縮された。
座標系の怒り。AIへの失望。Payload CoMの歓喜。学名の狂気。全部が、このパンクロックの中にある。
Epilogue ── 失敗の記念碑
168時間で起きたことを振り返る。
- 座標系を26回間違えた → 失敗
- 台座が無限に伸びた → 失敗
- AIに「もういい」と叫んだ → 失敗
- Meta APIに半日費やした → 失敗
しかし。
- Payload CoMという概念が生まれた → 失敗がなければ不可能だった
- 2枚のボードを1枚に削ぎ落とした → 失敗がなければ判断できなかった
- AIの使い分け戦略が確立した → 失敗がなければ気づかなかった
- 分類学の学名を持つBBQスタンドが誕生した → 狂気がなければ思いつかなかった
Sausage Erectosは、失敗の記念碑だ。
端材から生まれ、バグの上に立ち、パンクロックを産声に、この世界に直立した。
それでも立っている。
直立すること。それ自体が、意志の表明だ。
Bobus sausage erectus Specimen: 000 ♂ Est. 12 March 2026
── 168時間の記録、完 ──