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時間の記録、完 ──

← ブログ一覧に戻る