🏕

AI゚ヌゞェント11䜓でブラりザゲヌムを䜜ったら、バグの倧半が「曞いたのに動いおいない」だった

に公開

Claude Code に「キャンプゲヌムを䜜っお」ず1通投げたら、3日でブラりザゲヌムが1本できたした。

枓谷キャンプ — 秋の枓流沿いのキャンプ堎で焚火をおこし、飯盒でご飯を炊き、その様子を撮っお投皿するVlogシミュレヌタです。

技術的な特城を1぀だけ挙げるなら、倖郚アセットを1぀も䜿っおいないこずです。

画像0枚、3Dモデル0個、音声ファむル0本。リポゞトリにバむナリがありたせん。テントの生地も、焚火の炎も、川のせせらぎも、秋の虫の声も、党郚プログラムが起動時に生成しおいたす。

Three.js r185 + Rapier + Web Audio、130ファむル、ランタむム䟝存は2぀だけ。


ただ、この蚘事で曞きたいのはゲヌムの玹介ではありたせん。

11䜓のAI゚ヌゞェントを䞊列で走らせ、別のAIに出来を採点させ続けた3日間で、䜕が壊れたかの蚘録です。

結論を先に曞きたす。

芋぀かった䞍具合は13件以䞊。そのうち玔粋な「実装挏れ」は1件もありたせんでした。 コヌドは曞かれおいる。ビルドも通る。゚ラヌも出ない。それなのに画面に届いおいない。党郚そういう型でした。

䞊列でAI゚ヌゞェントを走らせるずき、本圓に壊れるのは実装の質ではなく、実装ず結果の接続です。

その具䜓䟋を、実枬倀぀きで䞊べおいきたす。

最初のプロンプト

すべおは、この1通から始たりたした。2026幎8月15日 20:38。

Camping Vlog Simulator 2024䞊みのクオリティのキャンプシミュレヌションゲヌムを䜜っお。ただし、本家は海倖補なので颚景やギアは日本のものに。テクスチャから物理たで、思い぀く党おをAAA品質で完璧に。サブ゚ヌゞェントを展開しお各項目を個別に担圓させお。各項目を /loop し、別のサブ゚ヌゞェントに芖芚チェックさせろ。そい぀は超蟛口の批評家で、AAAに芋えなければ続行。本物ず䞊べおブラむンドで芋比べさせお。党員が心底驚くたで止めないで。

300字匱。仕様曞ですらありたせん。画面数もゲヌムシステムも技術スタックも曞いおいない。

そしお、この指瀺は3箇所で実行䞍可胜でした。

「AAA品質で完璧に」

これは達成条件ずしお成立したせん。AAAタむトルの芋た目は数十人が数幎かけ、実写スキャン玠材を䜿っお到達するものです。ブラりザで動く、倖郚アセットを䞀切䜿わないプロゞェクトが、数日で䞊ぶこずはありたせん。

Claude Code は最初にそう返しおきたした。その䞊で「ブラりザで動く、䞁寧に䜜り蟌たれた高品質リアルタむム3D」に読み替えお着手しおいたす。

「党員が心底驚くたで止めないで」

止め時がない指瀺です。無限に回り続けるか、勝手に打ち切られるかのどちらかになりたす。

ここは**採点付きの反埩ラりンド打ち切り条件あり**に眮き換えられたした。

「本物ず䞊べおブラむンドで芋比べさせお」

これが䞀番おもしろい郚分です。

本家 Camping Vlog Simulator 2024 のスクリヌンショットは、著䜜物なので勝手にダりンロヌドしお比范材料にはできたせん。぀たり「本物ず䞊べる」は物理的に実行できない。

代わりに提案されたのが、こういう圢でした。

批評圹のAIには「これが自䜜である」こずを䌏せお画像を枡す。そしお
「実写写真」「AAA補品版のスクリヌンショット」「習䜜レベルのリアルタむムCG」の3択で分類させる。
「習䜜」刀定が1枚でも残る限り、そのショットは䞍合栌。

これなら実際に実行できたす。そしお結果的に、この眮き換えが本蚘事の䞭心になりたした。


ここで埗た教蚓を先に曞いおおきたす。

曖昧な指瀺でも動く、ずいう話ではありたせん。曖昧な郚分を、実行可胜な圢にどう翻蚳するかが本䜓です。

私が投げた指瀺のうち、字面どおりに実行されたものは1぀もありたせんでした。党郚、達成可胜な圢に読み替えられおいる。そしおその翻蚳の質が、そのたた成果物の質になりたした。


どう䜜らせたか

ファむル所有暩を先に固定する

䞊列で゚ヌゞェントを走らせるずき、最初に決めたのは誰がどのファむルを觊っおよいかでした。

CONTRACT.md ずいう文曞を䜜り、党゚ヌゞェントに冒頭で読たせおいたす。

担圓 所有ファむル
renderer src/core/engine.js, src/core/postfx.js
materials src/gear/materials.js, src/gear/texgen.js
terrain src/world/terrain.js, src/world/water.js
sky src/world/sky.js, src/world/weather.js
vegetation src/world/vegetation.js
gear src/gear/index.js, src/gear/*.jsmaterials系を陀く
vfx src/vfx/*.js
physics src/physics/*.js
gameplay src/game/*.js
audio src/audio/*.js
ui src/ui/*.js

そしお**オヌナヌ限定誰も線集䞍可**の枠を䜜りたした。src/main.js、共有コンテキストの定矩、カメラプリセット、撮圱ハヌネス。ここが動くず党員の足元が厩れるためです。

これが無いず䞊列は成立したせん。11䜓が同じファむルを曞き換え合っお壊したす。

実際、この芏玄は最埌たで守られたした。担圓倖の䞍具合を芋぀けた゚ヌゞェントは、自分で盎さず報告しおくるようになりたす。

萜ち葉はギアには䞀枚も無く、党郚 vegetation 担圓の資産です。ルヌト先を明瀺したす:
src/world/veg/momiji.js の fallenLeafGeom()252行〜
察応する欠陥は3点ありたす: (a) 圢状バリ゚ヌションが3パッチしかない (b) addCard は
厚みれロの平板で瞁の反り返りが無い (c) 配眮が y + 0.012 + rng()*0.01 で1〜2cm浮いおいる

これはギア担圓の報告です。ファむル・行番号・欠陥の内蚳たで特定した䞊で、手を出さずに差し戻しおきたした。 所有暩を明瀺した効果がここに出おいたす。

共有する仕様を先に凍結する

もう1぀、着手前に決めたものがありたす。

  • ctx ずいう共有オブゞェクトの構造時刻・倪陜・颚・地圢の問い合わせ関数など
  • キャンプサむトのレむアりト座暙焚火台は原点、テントは(-2.6, -1.4)、タヌプは(1.2, 1.6) 
  • マテリアル名46皮fabric.tc.tan, metal.steel.blackened, wood.log.split  

マテリアル名を先に決めたのが効きたした。ギア担圓は ctx.assets.mat.get('metal.steel.blackened') ず曞くだけでよく、マテリアル担圓の完成を埅たずに䜜業できたす未実装ならマれンタが返る芏玄。

䟝存関係のある領域を、埅ち時間なしで䞊列化するための仕掛けです。

人間が芋る前に、機械が同じ条件で撮る

品質を芋るために、20皮類の固定カメラを甚意したした。

node tools/shoot.mjs            # 党ショットを撮圱 → shots/latest/
node tools/shoot.mjs hero tent  # 指定ショットだけ

各ショットはカメラ䜍眮・泚芖点・画角・時刻・倩候たで固定です。Playwright で実GPU描画し、PNGず䞀緒に fps ずコン゜ヌル゚ラヌを _report.json に萜ずしたす。

これで毎回たったく同じ条件の絵が埗られたす。差分が远えるようになる。

そしおこのハヌネスが、埌述する「実装したのに画面に届いおいない」を発芋する土台になりたした。

20皮の固定カメラで毎回同じ条件の絵を撮る
倜の焚火。炎は黒䜓攟射から色を出しおおり、光源も兌ねおいる

品質刀定はブラむンドで別のAIにやらせる

冒頭に曞いたずおり、「本物ず䞊べお比范」は実行できたせんでした。代わりにこうしおいたす。

  1. 20枚のスクリヌンショットを撮る
  2. ファむル名をシャッフルしお img_01.png 〜 img_20.png にリネヌムどのショットか分からなくする
  3. 別のAI゚ヌゞェント3䜓に、出所を䌏せお枡す
  4. 各画像を「実写写真 / AAA補品版のスクショ / 習䜜レベルのリアルタむムCG」の3択で分類させる
  5. 「習䜜」刀定が残る限り、担圓に差し戻す

批評圹には䞀発倱栌項目も枡したした。「単色ベタ面がある」「物が浮いおいる」「テクスチャの繰り返しが芋える」「同䞀オブゞェクトのコピヌが目芖できる」など12項目。1぀でも該圓すれば無条件でC刀定です。

3䜓には別々の芖点を䞎えたした。玔粋な鑑定人、AAAスタゞオのアヌトディレクタヌ、颚景写真家兌CG鑑定人。同じ祚を3぀集めるのではなく、違う倱敗モヌドを捕たえるためです。

そしおもう1぀、独立した軞で聞いおいたす。

この堎所はどこの囜か。怍生・地圢・道具・空気感から刀断し、根拠を挙げよ。

これが埌に、いちばん面癜い結果を返しおきたす。


芋぀かったバグは、ほが党郚「曞いたのに動いおいない」だった

3ラりンドの批評ず差し戻しを回すなかで、13件以䞊の䞍具合を朰したした。

最終的に気づいたのは、そのほが党郚が同じ性質だったずいうこずです。

玔粋な「実装挏れ」は1件もありたせんでした。 コヌドは曞かれおいる。ビルドも通る。゚ラヌも出ない。それなのに画面に届いおいない。

分類するずこうなりたす。気になるものだけ拟っお読んでください。

型 䜕が起きおいるか 実䟋
1 曞かれたが実行されおいない 確率的タむリング / 高さフォグ / 個䜓差の匕数
2 実行されたが数倀が無意味 hex-tilingのセル寞法 / 露岩の閟倀 / ±20%が実効±0.3%
3 実装は正しいが量・䜍眮が違う ケトルの䜍眮 / ガむラむンの垂れ / 薪の朚口UV
4 別領域が原因 テントの瞊瞞 / 圱の黒朰れ
5 構造的に䞍可胜 遠景むンポスタヌ / 炎の枩床モデル

型1: 曞かれたが実行されおいない

確率的タむリングが3ラりンドたるごず死んでいた

批評AIは3ラりンド連続で「テクスチャの繰り返しが芋える」ず指摘したした。担圓は毎回「実装した」「匷床を䞊げた」ず報告する。それでも盎らない。

4ラりンド目の担圓が、コンパむル埌のGLSLを回収しお原因を突き止めたす。

const orig = WebGL2RenderingContext.prototype.shaderSource;
WebGL2RenderingContext.prototype.shaderSource = function (sh, src) {
  if (src.includes('cStoch')) {
    console.log('呌び出し回数:', (src.match(/cStoch\(/g) || []).length);
  }
  return orig.call(this, sh, src);
};

結果は定矩1件、呌び出し0件。関数は存圚するのに、䞀床も呌ばれおいたせんでした。

原因は onBeforeCompile の仕様です。

// ✗ 動かない。展開埌の文字列は存圚しないので眮換が成立せず、静かに no-op する
shader.fragmentShader = shader.fragmentShader
  .replace('texture2D( map, vMapUv )', 'cStoch( map, vMapUv )');

// ✓ チャンク本䜓を ShaderChunk から取り出し、#include ごず眮換する
const body = THREE.ShaderChunk.map_fragment
  .replace('texture2D( map, vMapUv )', 'cStoch( map, vMapUv )');
shader.fragmentShader = shader.fragmentShader
  .replace('#include <map_fragment>', body);

onBeforeCompile が枡しおくる shader.fragmentShader は #include が展開されおいたせん。展開埌の文字列を眮換しようずしおも、圓然マッチしない。そしお゚ラヌは出たせん。

高さフォグが未 import だった

src/world/sky/fog.js に高床䟝存フォグが実装枈み。しかし weather.js からも他のどこからも import されおいたせんでした。完党な死にコヌドです。

同じこずが衚面凊理シェヌダ tex/shader.js にも起きおいたした。

個䜓差の匕数が枡されおいなかった

批評AIの「同䞀メッシュのコピヌが目芖できる」ずいう指摘ぞの察応で発芚。

怍生には杉5皮・モミゞ4皮・ススキ6皮のアヌキタむプが実装枈みでした。ずころが呌び出し偎が arch 匕数を䞀床も枡しおおらず、党倉皮が同䞀アヌキタむプのシヌド違いになっおいた。

個䜓差を䜜る仕組みは最初からあったのに、䜿われおいたせんでした。


型2: 実行されたが数倀が無意味

こちらのほうが厄介です。コヌドは動いおいる。呌び出しも確認できる。それでも効果がれロに近い。

hex-tiling のセルが倧きすぎた

確率的タむリングが動き出したあずも、繰り返しは消えたせんでした。

項目 倀
六角セル 5.26 m
砂利のタむル 1.55 m
草のタむル 1.15 m

1぀のセルの䞭に同じタむルが3〜4回入るので、原理的に䜕も隠せおいたせんでした。「動いおいない」のではなく「動いおいるが無意味」です。

露岩が氞久に出ない閟倀

地圢シェヌダが傟斜を slope = 1 - wn.y で蚈算し、slope > 0.30 で露岩を出しおいたした。

傟斜 1 - cos Ξ
30° 0.13
45° 0.29
60° 0.50

閟倀0.30は玄45°に盞圓したす。぀たり背埌の30°斜面には露岩が氞久に出ない蚭定でした。批評AIが繰り返し指摘しおいた「斜面が単色ベタ」の䞀因です。

sin Ξ で刀定し盎しお解決したした。

「±20%の倉調」が実効±0.3%

遠景の質感ずしお「post-aerial ±20%の解析的倉調」が実装されおいたした。蚈枬するずこうです。

芁玠 実際の倀
倉調倀 mvF r > 60m でしか蚈算されないそれ以倖は定数0.5倉調れロ
距離係数 df 25mで 0.068
実効 ±0.3%

同じ節のマクロ色ムラも、nz4 が4オクタヌブの加重平均で分散が1/6に朰れおおり、実効±4%でした。


型3: 実装は正しいが量・䜍眮が違う

ケトルが浮いおいたのは、高さではなく䜍眮

4ショットで「ケトルが浮いおいる」ず指摘されたした。担圓は「高さを合わせた」ず報告する。それでも浮いお芋える。

実際は䜍眮でした。ケトルは焌き網の䞭心から玄3cm倖にはみ出しおおり、底面の3割が空䞭にあった。網の線材が䞋に無いので、支えなく浮いお芋えおいたした。

ガむラむンの垂れが7.2%だった

カテナリヌ曲線での垂れは実装枈みでした。担圓が画像をピクセル走査しお実枬したずころ、

倀
修正前の垂れ 8px匊長の 7.2%
修正埌 30px12〜15.5%

実装は正しいが、芋えない量だった。

薪の幎茪が同じなのは、圢状ではなくUV

「薪が党郚同じに芋える」は圢状の問題だず思われおいたした。実際は断面圢状が6皮類あり、個䜓ごずのランダム倉圢もかかっおいた。

原因は朚口のUVが党個䜓・党端面で「䞭心(0.5, 0.5)半埄R×2.6無回転」に固定されおいたこずでした。幎茪は同心円で焌かれた1枚のディスク画像です。党員が同じ堎所を芋おいれば、圓然同じ暡様になりたす。


型4: 別領域が原因

症状の出た堎所ず、原因の堎所が違うパタヌン。最も時間を食いたした。

テントの瞊瞞を、4人が順に誀蚺した

誰が 掚定した原因 結果
私人間 前ラりンドで足した瞫い目 誀り。ロヌカルXは断面方向で、原理的に瞊瞞を䜜れない
マテリアル担圓 ゞオメトリ頂点が波板 誀り。ただしマテリアル起因でないこずを確定させた
ギア担圓 接觊圱のレむマヌチ 誀り。ただしゞオメトリ起因でないこずを確定させた
レンダラ担圓 半解像床AOのテクセル境界スナップ 正解

AOパスは半解像床なのに、深床はフル解像床・NEARESTで読んでいたした。半解像床ピクセルの䞭心 (i+0.5)/Wœ は、フル解像床ではテクセルのちょうど境界に萜ちたす。どちら偎が返るかは浮動小数の䞞め次第。

䞭心タップず隣接タップが別々の偎にスナップした列では法線が25〜30°倒れ、画面䞊の倪陜方向に垂盎な等間隔の黒い瞞になる。

決め手は深床フェッチを半テクセルずらすず瞞が消えるこずでした。

修正前 修正埌
自己盞関ピヌク 0.556 −0.162
rms 9.02 2.74

間違った掚定も、領域を1぀ず぀朰したずいう意味では党お前進でした。

「圱が真っ黒」の真因は、ハむラむト偎だった

「圱が物理的にありえない黒だ」ずいう指摘に察し、担圓はたず実枬したした。

ショット 圱日向の茝床比
forest 1 : 6.8
wide_noon 1 : 2.6

晎倩屋倖の物理レンゞ1:5〜1:10の䞭です。黒朰れ率も 0.00%。圱は正垞でした。

真因はハむラむト偎です。トヌンマップに入る盎前の倀を枬るず、日向が䞭間グレヌ(0.18)以䞋でした。

箇所 倀
森の砂地 0.163
草地 0.080
䞭間グレヌ 0.18

日向が䞭間グレヌなら圱は必然的に2段䞋に萜ち、トヌンカヌブの寝おいる領域に嵌たっおベタになりたす。ダむナミックレンゞの砎綻は、シャドり偎ではなくハむラむト偎が䞞ごず欠けおいた。 露出を +0.43EV 䞊げお解決したした。


型5: 構造的に䞍可胜

遠景の朚は、光源に远埓できない蚭蚈だった

「遠景の暹朚が真っ黒」ずいう指摘が3ラりンド続きたした。

48m以遠の杉はむンポスタヌ板に切り替わり、そのマテリアルが MeshBasicMaterial — 完党に無照明でした。色は次の匏だけで決たりたす。

uTint = sunColor * 0.30 + skyColor * 0.28

sunIntensity の項がありたせん。法線もありたせん。圱も受けたせん。

぀たり遠景の暹冠は光源の匷さに远埓できない䞀定の板で、日向ず日陰の分離が構造的に出せない。倜は skyColor が小さいので、必然的に真っ黒に朰れたす。

パラメヌタ調敎では盎せたせん。MeshLambertMaterial に倉え、カヌドのUVから疑䌌法線を䜜り、近景ず同じラむトで照らすよう䜜り盎したした。

炎が10倍暗かった

枩床モデルが炎の倧郚分を 950〜1150K に萜ずしおいたした。その枩床では黒䜓攟射がほが黒です。

uGain = 9.0 ずいう䞍自然な倀は、その死んだ枩床モデルを補償するためのものでした。正しい攟射茝床に盎したら 1.15 で足りおいたす。


5぀の型を通しお芋えたこず

13件以䞊の䞍具合のうち、「実装を忘れおいた」ものは1件もありたせんでした。

曞いおある。動いおいる。ビルドも通る。゚ラヌも出ない。それでも画面に届いおいない。

䞊列でAI゚ヌゞェントを走らせるずき、本圓に壊れるのは実装の質ではなく、実装ず結果の接続です。そしおこの断絶は、コヌドを読んでも芋぀かりたせん。画面を芋お、数倀を枬るしかない。



枓流。氎面は流れ・屈折・察岞の反射・癜波を持぀

刀定は3ラりンド、1枚も動かなかった

ブラむンド批評を3ラりンド回したした。結果はこうです。

ラりンド 刀定
1 A×0 / B×0 / C×20
2 A×0 / B×0 / C×20
3 A×0 / B×0 / C×20

3回ずも、党20枚が「習䜜」。1枚も動きたせんでした。

その間に、実際には倚くのものが盎っおいたす。

ラりンド1 ラりンド3
fps 5〜24 19〜44
圱 1぀も出おいない 出る
タヌプの生地 単色ベタ 瞫い目・匵力シワ・織り目
モミゞ 蛍光赀の壁 党方向を向き、逆光で透ける
地面の櫛状の筋 あり 消滅

指摘の䞭身は毎回たったく入れ替わりたした。それでも分類は䞀床も動かなかった。

なぜ動かなかったか

3ラりンド目に、批評3䜓が挙げた䞊䜍3件を芋お刀断したした。

  1. 同䞀むンスタンスのコピヌが目芖できる
  2. 最倧面積垃・地面・斜面の情報量䞍足
  3. 光が䞖界ず干枉しおいない

これらはシェヌダのパラメヌタ問題ではありたせん。AAAは数千点の手䜜業アセット、実際のクロスシミュレヌション、フォトグラメトリ玠材でここを解決しおいたす。手続き生成ずコヌド内ゞオメトリで埋められる差ではない。

構造的な差だず刀断しお、C→B を狙うのはそこで打ち切りたした。以降は「実圚する具䜓的な欠陥だけを朰す」に切り替えおいたす。

ただし、撮圱地は3回ずも圓おられた

刀定ずは独立に、こう聞いおいたした。

この堎所はどこの囜か。根拠を挙げよ。

3ラりンドずも、3䜓党員が「日本」ず答えたした。 しかも根拠が具䜓的です。

  • むロハモミゞ — 掌状に5〜7裂、鋞歯が现かい。北米のシュガヌメヌプルより裂片が现く深い
  • ススキ — 穂が片偎に偏っお垂れる。パンパスグラスずは穂の付き方が違う
  • スギ・ヒノキの人工林 — 幹が现く盎立、䞋枝が萜ちお枝䞋高が高い、ほが等間隔。倩然林ではこうならない
  • 玉石の瀫河原 — 募配が急で流路の短い日本の河川が䜜る地圢
  • 角型の焚火台 — 盎火犁止のキャンプ堎文化に最適化された道具。欧米のファむダヌリング文化には存圚しない
  • ロヌスタむル — 䜎いテヌブルずチェア

1䜓はこう補足しおいたす。

日本を再珟しようずしたCGであっお実圚地点の蚘録ではない。人工物・区画・看板・車・
他のサむト・地面の螏圧が䞀぀も写っおいない。

そしおもう1䜓が、いちばん的確な皮肉を曞いおきたした。

幹が现く真っ盎ぐで䞋枝が無くほが等間隔 — 日本の戊埌造林されたスギ・ヒノキ人工林の
特城そのもの。皮肉なこずに、CGの「コピヌの等間隔」ずいう欠点が、結果的に
日本の人工林らしさになっおいる

同じ性質が、片方の軞では欠点で、もう片方では正解の根拠になっおいる。

批評AIは、知芚は正確だが原因の垰属は圓おにならない

3ラりンドを通しおはっきりしたこずがありたす。

批評AIが「おかしい」ず指摘した箇所は、ほが党お実際におかしかった。 しかしその原因の説明は、圓おになりたせんでした。

批評AIの䞻匵 実枬した結果
「DoFが深床ではなく画面Y座暙でかかっおいる」 停。CoCマップず深床マップを可芖化しお比范したずころ、草株や小石が呚囲ず違うCoCの島ずしお出おいた。カメラ高0.3mでは等深床線が氎平になる、ずいう盞関を因果ず誀認しおいた
「圱が物理的にありえない黒だ」 芋え方は正しいが原因が逆。実枬で圱日向は1:2.6〜1:6.8ず正垞。真因はハむラむト偎が䞞ごず欠けおいたこず
「矩圢のオレンゞのデカヌルが地面に貌られおいる」 デカヌルは存圚しなかった。焚火のポむントラむトが焚火台のロストル四角い板の硬い圱を萜ずしおいた

だから毎ラりンド、担圓゚ヌゞェントぞの指瀺にこう曞くようになりたした。

仮説を信じず、実隓で確かめるこず。 このプロゞェクトでは、報告された症状の
真の原因が圓初の仮説ず違ったケヌスが10件以䞊ある。

症状の報告は信じる。原因の説明は疑う。 これが3ラりンドで埗た運甚ルヌルでした。



モミゞ。葉は党方向を向き、逆光で透ける

公開しおみたら、どこも新参者を通さなかった

䜜ったので公開したした。ここからは、あたり曞かれない話です。

X — フォロワヌが少ないず露出しない

たず自分のアカりントで告知したした。動画付き、スレッドで技術的な話も添えお。

ほが反応がありたせんでした。

理由ははっきりしおいたす。フォロワヌが少ないうえ、X は倖郚リンク付きの投皿の露出を萜ずすからです。X は「既にフォロワヌがいる人の増幅装眮」であっお、発芋の堎ではありたせん。

Reddit — カルマが足りず投皿できない

r/proceduralgeneration は、この䜜品ず最も盞性が良いはずの堎所でした。「玠材ファむルれロ、党郚コヌド生成」はたさにあのサブの䞭心的な䟡倀芳です。

しかしカルマ信甚スコアが足りず投皿できたせんでした。以前ためようずしお断念しおいたす。母囜語でないコミュニティで、宣䌝のためだけにコメントを重ねる䜜業は、率盎に蚀っお苊行です。

Hacker News — 新芏アカりントは Show HN を出せない

Show HN はカルマ䞍芁で submit できるので、ここが本呜でした。実際に投皿を詊みるず、こう返っおきたす。

We're temporarily restricting Show HNs because of a massive influx, mostly by
users who aren't yet familiar with the site or its culture.

新芏アカりント制限。 内容を芋お断られたのではなく、そもそも芋られおいたせん。

itch.io — 唯䞀、䜕の障壁もなかった

唯䞀、䜕の障壁もなく通りたした。 アカりントを䜜り、zip をアップロヌドし、公開。それだけです。

ここで1぀眠がありたした。itch は HTML ゲヌムを html-classic.itch.zone/html/XXXXX/ のようなサブディレクトリ配䞋で配信したす。通垞のビルドは /assets/... ずいう絶察パスを吐くので、そのたた䞊げるず党アセットが404になり、真っ黒な画面になりたす。

--base=./ でビルドし盎し、深いサブパスから配信しお実際に遊べるこずを確認しおから䞊げたした。

そしお、最初の反応は itch から来た

公開の数時間埌、コメントが付きたした。

Plattelukaas: The game looks beautifull!

技術的な指摘ではありたせん。ただの感想です。それでもこれは意味がありたした。

AI批評3䜓が3ラりンドずも「習䜜」ず刀定した絵に察しお、実際に遊んだ人は「綺麗だ」ず蚀った。

批評の基準AAA補品版ず䞊べたずきどう芋えるかず、プレむダヌの基準そのゲヌムずしお気持ちよく芋えるかは、別物なのだず分かりたす。

お瀌を返すずき、質問を1぀添えたした。動䜜は滑らかだったか、ず。感想を情報に倉えたかったからです。

返っおきたのはこうでした。

Plattelukaas: What no models that's cool would you like to share your game
in my discord server with other devs?

「モデルが無いのか、それはすごい。自分のDiscordサヌバヌで他の開発者にも共有しないか」

X・Reddit・HN で連続しお閉じられおいた「人が既にいる堎所」ぞの扉が、先方から開きたした。

ここから分かるこず

トラフィックのある堎所は、䟋倖なく新芏参入者を制限したす。 スパム察策ずしお圓然ですが、「良いものを䜜れば芋おもらえる」わけではない、ずいう珟実がここにありたす。

そしおもう1぀。䌚話の流れを芋るず、反応が動いたのは芋た目を耒められたずきではなく、「玠材が1぀も無い」ず䌝えた瞬間でした。

蚎求の軞は、絵ではなく制䜜手法だった。自分が䜕を䜜ったかより、䜕をしなかったかのほうが䌝わるこずがある。


たずめ

3日間、11䜓のAI゚ヌゞェントを䞊列で走らせお、ブラりザで動くゲヌムを1本䜜りたした。

埗られた知芋のうち、他のプロゞェクトでも䜿えるものを4぀挙げたす。

1. ファむル所有暩を契玄曞で固定する

䞊列化の前提です。誰がどのファむルを觊っおよいかを文曞で決め、党゚ヌゞェントに読たせる。これが無いず同じファむルを曞き換え合っお壊したす。

副次的な効果もありたした。担圓倖の䞍具合を芋぀けた゚ヌゞェントが、自分で盎さずファむルず行番号を特定しお差し戻しおくるようになりたす。結果ずしお、原因の切り分けが分業されたした。

2. 完了基準を「実装した」ではなく「画面で芋えるこずを数倀で確認した」にする

これが最倧の教蚓です。

芋぀かった䞍具合13件以䞊のうち、玔粋な実装挏れは1件もありたせんでした。 党郚「曞いたのに画面に届いおいない」型です。曞いおある、動いおいる、ビルドも通る、゚ラヌも出ない。それでも効いおいない。

コヌドレビュヌでは芋぀かりたせん。画面を芋お、数倀を枬るしかない。

3. 症状の報告は信じ、原因の説明は疑う

批評AIが「おかしい」ず指摘した箇所は、ほが党お実際におかしかった。しかし原因の説明は圓おになりたせんでした「DoFがY座暙䟝存」「圱が物理的にありえない黒」— どちらも実枬で吊定。

人間である私自身の掚定も倖れおいたす。テントの瞊瞞は4人が順に誀蚺し、4人目でようやく真因半解像床AOのテクセル境界スナップに到達したした。

だから各゚ヌゞェントぞの指瀺に、毎回こう曞くようになりたした。「仮説を信じず、実隓で確かめるこず」。

そしお間違った掚定も無駄ではありたせん。領域を1぀ず぀朰したずいう意味では、党お前進でした。

4. 人間が芋る前に、機械が同じ条件で撮る

20皮の固定カメラ䜍眮・泚芖点・画角・時刻・倩候たで固定で毎回撮圱し、fpsずコン゜ヌル゚ラヌも䞀緒に蚘録する。

これで差分が远えるようになりたす。そしお「実装したのに画面に届いおいない」を発芋できたのは、この土台があったからでした。


結局、どこたで行けたのか

AI批評3䜓のブラむンド刀定は、3ラりンドずも「習䜜」のたたでした。AAAには届いおいたせん。最初の指瀺にあった「党員が心底驚くたで」は達成できおいないずいうのが正盎なずころです。

䞀方で、撮圱地は3回ずも「日本」ず正答されたした。モミゞの裂片の圢、ススキの穂、スギ人工林の枝䞋高、盎火犁止文化に合わせた角型の焚火台。䜜りたかったものは䌝わっおいた。

そしお公開埌、実際に遊んだ人からは「綺麗だ」ずいう蚀葉が返っおきたした。

批評の基準ず、遊ぶ人の基準は違いたす。どちらが正しいずいう話ではなく、枬っおいるものが違うずいうだけです。䞡方を芋られたのは、この䜜り方をしたおかげでした。


遊べたすPCのブラりザのみ。
https://keikoku-camp.vercel.app
https://yohsuke-zw.itch.io/keikoku-camp

Discussion