AIが作ったゲームを別のAIに説明させる:説明は合っているか
遊びをつくる執筆にClaudeを使用しています。

あるAIが作った小さなHTMLゲームを、別のAIにコードだけ渡して「このゲームのルールと操作を説明してください」と頼む場面を考えてみます。返ってくる説明は整っていて、もっともらしく読めます。ただ、その説明が実際の動作と合っているかは、読んだだけでは分かりません。「ミス3回で終了」と書かれていても、コードが2回で終わらせているかもしれません。 この記事は、その食い違いを自分で測るための実験の設計書です。結果は書きません。見るのは、説明がコードの読み取りとして正しいか、そして実際に動かした結果と合っているか、の二点です。後者を確かめることで、AIのコード読解の精度が見えてきます。 実験の価値は、照らし合わせる相手を分けることにあります。説明をコードと照らすだけでは、AIが読んだ内容を、別のAIが書いたコードに当てただけです。実際にゲームを動かして初めて、読解の正しさと実装の正しさを切り分けられます。
問いを分ける:何と照らして「合っている」と言うのか
「説明が合っている」には、照らす相手が三つあります。
- 仕様:最初に出したお題です。「30秒で星を集める」「壁に3回ぶつかると終了」のような取り決めを指します。
- コード:作ったAI(以下、作り手AI)が実際に書いた内容です。
- 動作:ブラウザで動かして観察した挙動です。
説明役のAI(以下、説明役AI)が答えるべきなのは、コードが何をするかです。ところが、作り手AIが仕様どおりに実装できていなければ、コードと動作もずれることがあります。そこで、説明の各主張を次の二つの軸で判定します。
- **コードの記述と一致**、動作と一致:読解も実装も正しい、動作と不一致:読解は正しいが、実装に不具合や落とし穴がある
- **コードの記述と不一致**、動作と一致:偶然当たった可能性が高い、動作と不一致:読解の誤り
右上の欄に入る主張は、説明役AIの責任ではありません。ここを分けておかないと、読解の精度を実装のバグで過小評価してしまいます。逆に左下の欄は、一致して見えるので見逃しやすい欄です。名前から推測しただけで正解した可能性があるので、根拠のコードを必ず示してもらいます。
準備と手順
準備するもの
- お題:乱数をなるべく使わず、数値や条件がはっきりしたもの。たとえば「矢印キーで動き、30秒で星を集める。壁に3回ぶつかると終了」のように、数えられる要素を3〜5個入れます。
- 作り手AIが出力した単独のHTML:一つのファイルで動くもの。外部ライブラリや通信に頼らないものを選びます。
- 説明役AIの新しい会話:作り手AIの会話とは別の会話を使います。可能なら別のモデルにします。
- 記録用の表:後述の主張チェック表です。
手順
- 作り手AIにお題を出し、HTMLを1つ作らせます。お題の文章は保存しておきます。
- 説明役AIの新しい会話に、HTMLの全文だけを貼ります。お題は渡しません。依頼文は次の程度に留めます。「このHTMLのゲームについて、遊び方、操作、勝ち負けの条件、得点や制限の数値を説明してください。根拠になったコードの箇所も添えてください」
- 同じ依頼を、別の新しい会話で合計3回行います。1回だと偶然の出来に左右されるからです。
- 説明を人の手で一文ずつ「主張」に分けます。1文に数値と条件が混ざっているときは、1事実ずつに割ります。
- 各主張を、コードの該当箇所と、実際の動作の二方向で確かめます。確認方法は次章に書きます。
- 主張ごとに判定を付け、3回分を並べて比べます。
記録の取り方
主張は「1行1事実」に分けます。「30秒以内に星を5個集めると勝ち」は、「制限は30秒」「星は5個」「5個集めると勝ち」の三つに割ります。粒度をこのくらいに揃えておくと、後で不一致の場所を特定できます。
記録する項目は次のとおりです。
- 主張ID:C1、C2のように通し番号を付けます。
- 出現回数:3回の説明のうち何回に出たかです。
- 種別:数値、条件、操作、画面表示、終了判定などに分けます。
- コード上の根拠:説明役AIが示した箇所を、実際のコードで確認できたかどうかを記録します。
- 動作での確認:実際に動かした結果です。方法は「操作→観察→記録」の順で、再現できるように書きます。
- 判定:一致、不一致、確認不能のいずれかです。
動作の確認は、目で見るだけでは見落とします。ブラウザの開発者ツールのコンソールで、ミス回数や残り時間を保持している変数の値を読むと確実です。変数がページの最上位で宣言されていれば、コンソールから直接読める場合があります。そうでなければ、画面表示を基準に、同じ操作を2回以上行って揃うかを見ます。
判定の集計には、次の小さなHTMLを手元で開いて使えます。1行に1主張を貼ると表になり、判定を選ぶと集計されます。
<!doctype html>
<meta charset="utf-8">
<title>主張チェック表</title>
<textarea id="t" rows="8" cols="60" placeholder="1行に1主張。例: 間違いは3回で終了"></textarea>
<button id="b">表にする</button>
<table id="tb" border="1"></table>
<p id="r"></p>
<script>
const J = ["一致","不一致","確認不能"];
document.getElementById("b").onclick = () => {
const lines = t.value.split("\n").filter(s => s.trim());
tb.innerHTML = "<tr><th>ID</th><th>主張</th><th>判定</th></tr>";
lines.forEach((s, i) => {
const tr = tb.insertRow();
tr.insertCell().textContent = "C" + (i + 1);
tr.insertCell().textContent = s;
const sel = document.createElement("select");
J.forEach(j => sel.add(new Option(j)));
sel.onchange = count;
tr.insertCell().appendChild(sel);
});
count();
};
function count() {
const v = [...tb.querySelectorAll("select")].map(s => s.value);
const n = j => v.filter(x => x === j).length;
const d = v.length - n("確認不能");
r.textContent = `一致 ${n("一致")} / 不一致 ${n("不一致")} / 確認不能 ${n("確認不能")}` +
(d ? `(判定できた主張の一致率 ${Math.round(n("一致") / d * 100)}%)` : "");
}
</script>このツールは判定を保存しません。ページを閉じると消えるので、必要な表は別に書き写します。
結果の読み方
数字が出たら、先に自分で決めた基準と照らします。基準は実験の前に書いておきます。後から決めると、都合のよい解釈に寄ってしまうからです。たとえば「数値と条件の主張は、全件が一致しないと許容しない」「操作の説明は、1件の不一致までは許容する」のように、種別ごとに決めておきます。
結果は次のように読み分けます。
- 不一致が数値や境界条件に集まる場合:読解が弱いのは、数を数える箇所や「以上・より大きい」のような境界です。コードの比較演算子を、説明役AIが読み流している可能性を疑います。
- 不一致が全体の雰囲気や目的の説明に集まる場合:コードからは読み取れない部分を、想像で補っている可能性があります。画面の見た目や演出は、コードの記述から推測しにくい領域です。
- コードとは一致するが動作と違う主張が多い場合:説明役AIではなく、作り手AIの実装を見直す材料です。読解の精度とは別の問題として扱います。
- 確認不能が多い場合:主張が粗すぎるか、動作の確認手順が足りていません。粒度を割り直してください。
- 3回の説明で内容が割れる場合:1回だけ出た主張は、不一致に偏っていないかを見ます。偏っていれば、安定して出る主張だけを信用する方針が立てられます。偏りがなければ、説明の揺れは表現の違いにとどまっていると読めます。
一致率は、確認不能を除いて計算します。分母が小さいと数字だけが目立つので、主張の総数も併記してください。1回の実験で一般化せず、お題や作り手AIを替えて、同じ手順を繰り返したときの傾向を見ます。
起こりやすい誤り
実験の質を落とす原因は、次のとおりです。
- お題を一緒に渡してしまう:仕様を知った説明役AIは、コードを読まずに仕様を言い換えるおそれがあります。読解を測りたいなら、コードだけを渡します。
- コードにコメントが多い:作り手AIが書いた説明コメントを写すだけでは、読解になりません。コメントを残した版と、消した版の両方を試すと、差が見えます。
- 変数名が内容を語りすぎる:missCount のような名前から意味を推測しただけでも、正解に見えます。根拠の箇所を必ず出させ、実際の条件式まで読めているかを見ます。
- ファイルが長くて途中が切れる:全文が説明役AIに渡ったかを、依頼の中で末尾の関数名を答えさせて確かめます。
- 説明役AIにコードを実行させる:実行できる環境では、読解ではなく観察の精度を測ることになります。実験の目的に合わせて、実行なしの条件に揃えます。
- 動作確認が1回で終わる:乱数や入力のタイミングで結果が変わる箇所は、複数回の操作で確認します。1回の観察を、全体の動作として扱わないでください。
- 作り手と説明役が同じモデル:癖が共有されて、読み違いが気づかれにくくなります。可能なら別のモデルを使います。
次の行動
まず、数値と条件が3〜5個のお題を決め、作り手AIにHTMLを作らせてください。次に、説明役AIの新しい会話を3回開いて、HTMLだけを渡して説明を取ります。最後に、主張を1行1事実に分けて、上のチェック表で判定してください。
アソバースの投稿画面にある「紹介文と遊び方を作成」で出る下書きも、同じ見方で確かめられます。下書きを読み、数値や条件の主張を作品で一つずつ動かして照らしてから、「この文章を使う」を押すかどうかを決めてください。

