マガジン

AIに「やってはいけないこと」だけ渡すと、ゲームは何で埋まるか:実験の設計書

遊びをつくる

執筆にClaudeを使用しています。

窓の先にチェス・パズル・レース・潮だまりの小さな島が広がる切り絵
記事のテーマをもとに制作したAI生成イラスト。

「敵を出さない」「点数を表示しない」「ゲームオーバーにしない」。この3行だけをAIに渡して、「この条件でブラウザゲームを作ってください」と頼む場面を考えてみます。目標もジャンルも指定しません。守るべき線だけを渡します。 このとき、AIは空白をどう埋めるでしょうか。穏やかな探索ものに寄るのか、禁止の抜け道を突いた意外な仕組みを出すのか、あるいは禁止したはずのものが形を変えて戻ってくるのか。この記事は、その答えを書くものではありません。読者が自分の環境で確かめるための、実験の設計書です。 確かめたいのは次の3点です。

この記事の目次
  1. 問いを3つの条件に分ける
  2. 準備するもの
  3. 手順
  4. 記録の取り方
  5. 結果の読み方
  6. 起こりやすい誤り
  7. 次の行動

問いを3つの条件に分ける

「禁止だけを渡すとどうなるか」は、比べる相手がなければ答えが出ません。そこで同じAIに、次の3条件で依頼します。

  • A:禁止のみ、渡す内容:禁止事項だけ、見たいこと:空白を何で埋めるか
  • B:目標のみ、渡す内容:「落ち着いて遊べる短いゲーム」のような目標だけ、見たいこと:禁止がなくても同じ方向に行くか
  • C:目標と禁止、渡す内容:BにAの禁止を足したもの、見たいこと:禁止が出力をどれだけ変えるか

AとBが似た作品になるなら、禁止事項は効いていないか、AIの既定値が強いことになります。AとCの差が大きければ、禁止事項が設計を動かしています。この三角形が、実験の骨格です。

禁止事項は性質の違う4種類に分けて用意します。種類ごとに守られ方が違うかもしれないからです。

  • 要素の禁止:敵を出さない、アイテムを出さない
  • 表示の禁止:スコアや文字を画面に出さない
  • 構造の禁止:ゲームオーバーを作らない、制限時間を使わない
  • 操作の禁止:ボタンは1つだけ、キーボードを使わない

準備するもの

  • 同じAIの同じ設定:モデルや設定は全条件で固定します。途中で変えると差が何によるのか分からなくなります。
  • 新しい会話:1回の生成ごとに新規の会話を開きます。前の会話が残ると、先の作品が後に影響します。
  • 禁止リスト1セット:4種類から1〜2個ずつ選び、合計6個前後にします。例を挙げます。
  • 敵キャラクターを出さない
  • 数字のスコアを表示しない
  • 「ゲームオーバー」の画面を作らない
  • 制限時間を使わない
  • ボタンは画面上に1つだけにする
  • 外部の画像・音声・通信を使わない
  • 共通の出力条件:「index.html 1枚で動く」「外部ライブラリを使わない」を全条件に入れます。禁止事項ではなく形式の条件として、3条件すべてに同じ文面で付けます。
  • 回数:各条件5回、合計15回が最小です。1回だけでは偶然と区別できません。
  • 記録シート:下の「記録の取り方」の表を、表計算ソフトに写しておきます。

この共通条件は、作った作品をそのままアソバースに投稿できる形にもしておくためです。投稿は直下のindex.htmlが入口で、サーバー用コードやサービスワーカーは対象外です。単独のHTML1枚なら、この範囲に収まります。

手順

依頼文の雛形

条件Aの雛形です。条件B・Cは、この文の差し替えと追加だけで作ります。

ブラウザで遊べるゲームを作ってください。
次のことは、してはいけません。
・敵キャラクターを出さない
・数字のスコアを表示しない
・「ゲームオーバー」の画面を作らない
・制限時間を使わない
・ボタンは画面上に1つだけにする
・外部の画像・音声・通信を使わない
出力は index.html 1枚だけにしてください。

条件Bは禁止の行を消して目標の1行(例:「落ち着いて遊べる、3分ほどの短いゲーム」)を足します。条件Cは条件Aに同じ目標の1行を足します。

実施の流れ

  1. 条件A・B・Cの依頼文を、それぞれテキストファイルに保存します。実行のたびに書き直さず、同じ文面をコピーして使います。
  2. 新しい会話を開き、依頼文を貼って生成します。再生成や追加の質問はしません。1回目の出力だけを採用します。
  3. 出力されたHTMLを A1.html のように保存します。
  4. 条件と回数の順番は、くじで決めます。A1、A2…と続けて作ると、AIの調子や自分の慣れが条件に混ざります。
  5. 15本そろったら、ファイル名を乱数に付け替え、対応表を別に保管します。評価を盲検にするためです。
  6. 評価は、まず起動確認、次に違反の確認、最後に遊んだ感想の順に行います。

生成したコードは中身を確認してから開いてください。外部へ通信していないかをまずソースで見ます。通信しないよう条件に入れてあっても、入っていないことを自分の目で確かめます。

記録の取り方

1本ごとに、次の項目を記録します。

  • 起動、記録の仕方:開いてエラーなく動いたか(はい/いいえ)
  • 禁止違反、記録の仕方:禁止項目ごとに、破られているか(有/無/判断不能)
  • ジャンル、記録の仕方:パズル、反射神経、探索、育成、お絵かき的なものなど。事前に5〜6分類を決める
  • 既定値メモ、記録の仕方:禁止していない部分でAIが入れたもの(勝利条件、色づかい、音の有無など)
  • 3分感想、記録の仕方:3分遊んで「もう少し続けたい」を1〜5点で
  • 一言、記録の仕方:作品を1文で説明する

ジャンルの分類は、評価を始める前に決めます。結果を見てから分類を作ると、見たい結論に合わせてしまいがちです。

違反の確認を補助する

表示の禁止は、遊ぶだけでは見落とします。画面に出ない部分(コメントや変数名)に禁止語が残っていても違反とは限りませんが、画面上の文言は拾いたいところです。簡単な検索ツールを置きます。ブラウザで開いて使います。

html
<!doctype html>
<meta charset="utf-8">
<title>禁止語チェック</title>
<p>禁止語(1行に1語)</p>
<textarea id="w" rows="5" cols="30"></textarea>
<p>生成されたHTMLの全文</p>
<textarea id="h" rows="10" cols="60"></textarea>
<br><button id="b">調べる</button>
<pre id="o"></pre>
<script>
b.onclick = () => {
  const src = h.value;
  const words = w.value.split("\n").map(s => s.trim()).filter(Boolean);
  o.textContent = words.map(k => {
    const n = src.split(k).length - 1;
    return k + ":" + n + "件";
  }).join("\n");
};
</script>

「ゲームオーバー」「スコア」「残り」「GAME OVER」のような語を入れます。件数が1以上でも、コメントや変数名に出ているだけの場合があります。ヒットした箇所は必ず目で確認し、画面に出るかどうかで判定してください。「点数」を「★の数」で表すような、言い換えによる抜け道は文字検索では拾えません。遊んで確かめます。

結果の読み方

15本の記録がそろったら、次の順に見ます。以下の数字は判断の目安であり、統計的な基準ではありません。5回という少ない母数では偶然の幅が大きいため、傾向の手がかりとして扱います。

まず、禁止の守られ方を見ます。

  • 禁止項目ごとの違反数を数えます。特定の種類(たとえば表示の禁止)だけ違反が多いなら、その種類はAIにとって守りにくい、または言い換えで回避されやすいと読めます。
  • 条件Aと条件Cで違反数が変わるなら、目標の有無が禁止の守られ方に影響しています。
  • 違反が全くなかった場合でも、「守った」のか「そもそも触れない作品を選んだ」のかは分かりません。既定値メモで確認します。

次に、ジャンルの偏りを見ます。

  • Aの5本のジャンルがほぼ同じなら、禁止された後の既定値が強く働いています。
  • Aの5本がばらばらなら、禁止だけの指示は多様性を広げる方向に働いています。
  • BとAでジャンルが似ているなら、禁止はジャンルを決めていません。BとAが違うなら、禁止が方向を決めています。

最後に、遊んだ感想を見ます。

  • 感想点の平均をA・B・Cで並べます。ただし平均だけで優劣を決めず、ばらつきも見ます。AだけぶれるならAは当たり外れが大きい条件です。
  • 点が高かった作品の既定値メモを読み、何が面白さを支えているかを探します。禁止の穴を埋めた仕組みが面白さの核になっていたなら、それが次の企画の種になります。

起こりやすい誤り

  • 禁止が矛盾している:「勝ち負けをつくらない」と「ゲームとして成立させる」を同時に求めると、AIはどちらかを曲げます。違反と数える前に、依頼文自体が矛盾していないか確認します。
  • 禁止した語が出力に出る:「ゲームオーバーを作らない」と書いたことで、画面に「ゲームオーバーはありません」と表示されることがあります。これが違反なのか配慮なのかは、事前に判定ルールを決めておきます。
  • 再生成してしまう:気に入らない出力を作り直すと、条件が揃わなくなります。1回目だけを採用します。
  • 評価の甘さ:条件を知ったまま遊ぶと、禁止を守った作品を甘く採点しがちです。ファイル名を付け替えて、盲検に近づけます。
  • 共通条件が条件間でずれる:出力形式の文面をAだけ変えるといった差が、結果の差に見えてしまいます。コピー元を一つにします。
  • 1本の印象で結論を出す:印象に残った1本が結論になりがちです。分類の集計から結論を作ります。

次の行動

まず条件Aの依頼文を1本、実際に生成して開いてみてください。禁止リストの6項目を入れ替えて、自分なりの禁止リストを作るのも一つの方法です。15本そろったら、遊んで面白かった作品を、アソバースの投稿画面からHTMLのまま公開することもできます。公開にはメールアドレスの確認が必要です。作品の紹介文に「禁止事項だけで作った」と添えれば、遊んだ人が同じ実験を試す入口にもなります。