
2026/10/13 23:14
ゲーム開発向け AI ハーネスの設計方法
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
核心的なメッセージは、大規模言語モデル(LLM)がゲームに対応しにくいのは、明確な構造的定義のない不透明なゲームアセットとメディアミックス環境を効果的に解釈できないからである。これを解決するために著者は、決定論を実現するための「Fixed Randomness」や、定量視覚分析のための画像差分ツール
odiff の使用、「Thing-Driven Development」という統一されたオブジェクトタイプを持つ開発モデルの採用、シリアライズ可能な状態変化を表すための「Command Pattern」、静的データを外部化するための Depot、テキストベースのプロファイリングを行う samply の利用など、これらをまとめて「Blackbox Game Architecture」と呼ぶ具体的なアーキテクチャ戦略を導入することを提案する。これらの戦略により、スタンドアローンのシミュレーションライブラリがエンジンとの間で愚かなクライアントとして通信可能となり、あらゆるゲームを自動化テスト環境に変え、効率的な「agentic loop」を創出できる。このセットアップは、AI エージェントに開発サイクルを瞬時にシミュレートする能力(状態変化の処理、差分・シミュレーションによる検証、影響度の評価)をもたらし、堅牢なネットワークプログラミングを必要とする大規模プロジェクトの効率的飛躍を大きく促進する。ただし、著者はこのような複雑なハネス戦略は、すでに製作中の小さなゲームでは現在不要であると明確にしている。究極の目標は、ゲームロジックを透明化して、既存タイトル内で AI が信頼して機能できるようにすることであり、単に新しいものを生成することのみではない。本文
あなたのゲームこそがハルネス(Harness)です
講演の背景と著者のスタンス
- イベント: インディーローデオ(Calgary, 9/12/26)でのセッション
- 題目: 「Your Game Is A Harness」(あなたのゲームこそがハルネスです)
- 内容の再構成: プレゼンテーションをベースに、ブログ記事として整理しました。
- 著者のポリシー(AI 使用の有無について):
- この記事は100% 人間が作成しています。
- AI はコードやツールの作成には活用していますが、文章執筆の効率化を目指していません。
- 「昔ながらの方法」で書くことにも同じく喜びを感じています。
導入:LLM をゲーム開発に活かすための本音
- 焦点: Twitter などの「ワンショット型デモ」ではなく、毎日 8 時間・週 5 日の本格的な開発現場での活用方法です。
- 前提知識: LLM の基礎や現状認識について軽く整理します(すでに理解されている場合は次のセクションへ)。
私が LLM を使い始めた経緯
- きっかけ: ムードボーディングサイト
の制作実験。mood.site- 当初は「ChatGPT がコードを書けるか」の実験目的で、Web インターフェースに盲目的にコピー&ペーストしました。
- 結果: やり甲斐はありませんでしたが、驚くほど短時間で(約 20 時間)サイトが完成・機能しました。
- 気づき: もし LLM がなければ、同じ成果を 1 ヶ月程度かかったでしょう。LLM は私自身の本格的な変容を促しました。
- 現在までの進化:
はテストベッドとなり、他のプロジェクトの技術スタックに影響を与えました。mood- 特に Claude Code や後継モデルは Web スタック能力が飛躍的に向上しており、「Web ベースシステムなら LLM でなんとかなる」と感じています。
「LLM はゲームに不向きだ」という教訓
- Web アプリ vs ゲーム:
- Web アプリは学習データが豊富でコード中心のため、LLM に向いています。
- ゲームには静的な画像・テキストのレイアウトだけでなく、コードで表現しにくい要素が多く存在します。
- 結論: 「LLM はゲームに不向きである」(ゲーム業界での経験則)。
- Three.js で開発する開発者の事情:
- アセットを単純なプリミティブとして扱い、アセット生成・加工を省略できます。
- しかし、その結果として LLM の出力レベルを超えた独自の作者性(クオリティ)が欠落する「スlop(粗悪物)」が多く生まれます。
- 根本的な壁:
- 伝統的なゲームにはコード以外の重要なコンポーネントが存在し、LLM にとって実質的に不透明(オpaque)です。
- もしあなたのゲームがそのような不透明な要素の変換や操作に依存している場合、LLM は失敗します。
- 要約: 「デフォルト状態の LLM はゲームを読むことに不向きだ」
LLM の基礎知識とコンテキスト工学
LLM をゲームでうまく動かす鍵は、**「コンテキストの問題」**にあります。
プロンプトの 3 つの要素
- システム・プロンプト: サービス全体で共有される汎用的な指示(今回は割愛)。
- アシスタント・プロンプト: モデルとユーザーの相互作用を案内するセクション(通常は意識しない)。
- ユーザー・プロンプト: 本物の入力部分。チャットやコードなど、ここにすべての「コンテキスト」が記憶されます。
コンテキスト汚染の問題
- LLM のセッションは常に「新鮮」に見えますが、実際には以前のすべてのメッセージを再提出します(まるで昔の遊び場で「他の人が言ったこと全てを繰り返す」ゲーム)。
- リスク: 過去の「悪い情報」が含まれると、新しい作業に悪影響を与え、コンテキストが汚染(腐敗)されてしまいます。
コンテキスト工学 (Context Engineering)
- 定義: 「コンテキストに最高の情報を投入し、汚染を最小限に抑える」ためのプラクティス。
- 核心: LLM をゲームで機能させることは、本質的な問題ではなくコンテキスト管理の問題です。
重要: ゲームは標準テンプレートがないため、独自のニーズを満たすためにエージェントと効果的に連携させるための新たな概念として**「ハルネス(Harness)」**というアイデアが生まれました。
- ハルネス: エージェントが特定の入力に対して取るべき一連の行動パターンを定義し、拡張・蒸留・抽象化を行うことで、開発プロセス全体をサポートする仕組みです。
ゲームを AI エージェントにとって「読める」ものにしよう
LLM がゲームを扱いやすくするための具体的なアクションアイテムです。これらは一般的なゲーム開発の質向上にも寄与します。
1. 固定されたランダム性(決定論性)
- 目標: ゲーム内のステートを極めて正確に再現できるようにする。
- 手法: ゲーム開始時にシードされたランダム性の単一ソースを作成し、すべての非決定論的な呼び出しに使用させる。
- 例:
が 30 カ所で呼ばれても、毎回同じ結果になります。Random.Float
- 例:
- 効果: エントロピーやスパゲッティコードとの戦いを回避でき、開発初期から導入すると生産性が劇的に向上します。
2. スクリーンショット取得機能と画像差分 (Image Diffing)
- 課題: マルチモーダル LLM にスクリーンショットを投げると、「何が変わったか」だけでなく「変更が目標に近づいたか」の判断が困難になり、コンテキスト汚染を引き起こします。
- 解決策: **画像差分(Image Diffing)**を行う。
というツールを使い、2 つの画像を渡すと「差分画像」と出力されます。odiff- 例: 「スケルトンを海賊に変える」指示に対し、緑色の不要な要素(コンテキスト汚染)を除いた定量評価が可能になります。
- 定量化:
は「85% 類似している」といった数値を返し、エージェントが差分を減らし類似度を高めるための安定した基準を提供します。odiff
3. 決定論的なステート管理:単一オブジェクト型アーキテクチャ
- 「木は犬である」原則:
- 見た目こそ違う(樹木 vs 動物)ものの、コード的にはどちらも「メッシュ+コライダー+移動可能」のコンポーネント組み合わせに過ぎません。
- 着想: ゲームの最初から**すべてを単一の型(例:
)**として扱う。Thing
- Thing-Driven Development のメリット:
- 100 クラスではなく、1 つの
タイプのみを持つことで、コンテキストが整理され、AI は正確にどこを変更すればよいかを把握できます。Thing - 保存/読み込み: シリアライズ/デシリアライズは「一つの型」なので自明で、多形性デシリアライゼーションの格闘(奇妙なレース条件など)が不要になります。
- 100 クラスではなく、1 つの
アドレス可能なステート:コマンドパターン
- 単一のオブジェクト型を持つと、ステートの変更を捕捉しやすくなります。
- 実装: 「コマンドパターン」を採用。プレイヤーのアクションや AI の変更を**シリアライズ可能なオブジェクト(コマンド)**として扱う。
- 初期状態からコマンドを再生(Playback)することで、プレイヤーが実際にやったことを正確に再現できます。
- 利点: コンパイル不要で変更を試せるため、テスト・検証サイクルが短縮されます。
4. データ管理の最適化:太い構造体 (Fat Struct) と外部データ
- 現状の問題: オブジェクト内の静的なデータ(攻撃力、移動速度など)をコードやコンパイルに組み込むと、値変更が面倒になり AI に混乱を招きます。
- 手法:
- データをゲーム構造体から分離し、外部のソースとして管理する。
- データはシリアライズされ、オブジェクトに適用されるのみで、コードを変更・再コンパイルする必要がありません。
- 例:
というデータエディタを使い、プログラマでも非プログラマでもデータ変更とテストループを素早く行えます。Depot
5. 自立したシミュレーション / ブラックボックスアーキテクチャ
- 課題: エンジン内でロジック・UI・視覚が混在していると、「何が壊れたか」の特定が困難です(モデルか、シーンか、ロジックか)。
- 手法: ゲームのシミュレーションをエンジン動作ロジックの外側に置く。
- エンジンとシミュレーションコアは DLL/ライブラリとして分離し、「コマンド」で通信する。
- シミュレーションが「真実(ソース・オブ・トゥルース)」となり、エンジンはその結果を消費するだけの無能な層になる。
- メリット:
- ネットワークプログラミングやテストが劇的に容易になります。
- ブラックボックスゲームアーキテクチャと呼び、エンジンなしでもシミュレーションを純粋な C# でテストできます。
6. 影響評価:テキストベースのプロファイリング
- 現状の問題: 従来のプロファイラー(コールスタックやグラフなど)は人間向けであり、AI エージェントには非可読です。
- 手法: AI が処理しやすいテキストベースの出力を持つツールを使う。
- 推奨: 無料の
。samply- キャプチャ出力をコンソールにダンプするため、AI はキャプチャからボトルネックを読み取って自律的に評価・改善できます。
- 推奨: 無料の
まとめ:あなたのゲームこそがハルネスです
- これらの技術(データ指向、バイナリ隔離、コンパイル不要、テキストプロファイリングなど)を組み合わせると、エージェントターンは秒単位で全体ループを回ります。
- 結果:
- 反復速度が劇的に向上し、AI がゲームの意図を深く理解できます。
- 変更は「重要性がある時」に保存すればよく、開発サイクルが軽快します。
# あなたのゲームこそがハルネスです あらゆるゲームはこれらの機能を活用可能であり、容易に自身を「ハルネス(サポート枠)」へと変換できます。
ポストスクリプト
- 現状: 現在配送中のプロジェクトでは、全ての手法を完全には採用していませんが、より大きなプロジェクトへ着手するにつれて重要性が増していると感じています。
- 期待: これらの戦略を実践した際の経験や「何が機能し、何が機能しなかったか」についてのご共有を歓迎します。
2026 年 10 月 10 日公開