マガジン

「シンプルに」と付けると、AIは何を省くか

遊びをつくる

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

同じ小さなゲームを異なる方法で描いた三枚のスケッチと鉛筆。
記事のテーマをもとに制作したAI生成イメージ。実際のゲーム画面ではありません。

ゲームの生成をAIに頼むとき、依頼文の末尾に「シンプルに」と足す場面を考えてみます。読みやすいコードになりそうですし、余計な装飾が減りそうです。ただ、減るのが装飾だけとは限りません。開始画面や操作説明、もう一度遊ぶボタンのように、遊ぶ側にとって必要なものまで一緒に消える可能性があります。 この記事は、その可能性を自分の手で確かめるための実験の設計書です。問いは「同じ依頼に『シンプルに』の一語を足すと、生成されるゲームから何がなくなるか」です。結果は書きません。読者が同じ手順を踏めば、自分が使うAIと自分の依頼文での答えが出る形にします。 先に注意点があります。「シンプル」は見た目、コード、ルールのどれにも掛かる言葉です。AIがどれを削ったのかは、足す語や置く位置でも変わりえます。そこで、一語の差を4条件に分けて比べます。

この記事の目次
  1. 問いを分けて考える:「シンプル」は何の削減か
  2. 準備:変えるのは一語だけにする
  3. 手順:4条件×5回を新規会話で
  4. 記録:有無を先に決めた基準で数える
  5. 結果の読み方と誤りやすい点
  6. 次の行動

問いを分けて考える:「シンプル」は何の削減か

「何が省かれたか」は、次の三つのどれかに分かれるはずです。

  • 見た目の省略:背景、色、アニメーション、演出など
  • 機能の省略:開始画面、操作説明、再挑戦、効果音、スマホ対応など
  • 中身の省略:難易度の変化、得点の工夫、ルールの種類など

これらは仮説の候補です。実際にどれが減るかは、生成物を見るまでわかりません。予想と違う結果が出ることも、この実験の収穫に含まれます。

この分け方をしておくと、結果を見るときに「全体が短くなった」で終わらず、どの層が薄くなったかを言えます。最終的に知りたいのは、省かれて困るものを依頼文であらかじめ守る方法です。

準備:変えるのは一語だけにする

比較が成り立つ条件は、一語以外を一切変えないことです。次のものを用意します。

  • 使うAIとその設定を一つに固定します。途中で切り替えません。
  • 題材を一つに固定します。ここでは「60秒間、画面に出る的をクリックして得点を稼ぐゲーム」とします。公式作品や既存ゲームの名前は入れません。
  • 土台の依頼文を一つ決めます。

土台の依頼文の例です。

ブラウザで遊べる、60秒間の的当てゲームを、単一のindex.htmlで作ってください。外部ライブラリは使わないでください。

この土台に、次の4条件を作ります。

  • A(対照)、内容:土台のみ
  • B、内容:土台の末尾に「シンプルに作ってください。」を足す
  • C、内容:土台の先頭に「シンプルに」を置く
  • D、内容:土台の末尾に「最小限の機能で作ってください。」を足す

Bと Cで、同じ語でも置く位置で結果が変わるかを見ます。Dで、「シンプル」という語に特有の反応なのか、削減を求める語に共通の反応なのかを見ます。

手順:4条件×5回を新規会話で

  1. 条件ごとに5回ずつ、必ず毎回新しい会話を開いて依頼文を送ります。会話履歴が残ると、前の生成物に引きずられます。
  2. 返ってきたコードは、手を加えずにそのまま index.html として保存します。保存名は条件が見えないように、乱数や連番にします。たとえば g07.html のようにします。
  3. 対応表(どのファイルがどの条件か)は別の場所に書き、判定が終わるまで見ません。判定者が条件を知っていると、期待に沿って見てしまうためです。
  4. 全20本をブラウザで開き、終わりまで一度遊びます。動かないものは「動作せず」と記録し、集計から外すか別枠にします。直して使うことはしません。

1回で終わらせず5回にする理由は、同じ依頼でも生成物がばらつくからです。1本ずつの差は偶然かもしれませんが、5本ずつ並べると傾向が見えてきます。

記録:有無を先に決めた基準で数える

遊ぶ前に、チェック項目と判定基準を決めておきます。生成物を見てから基準を作ると、見つけたものに合わせて基準が動いてしまいます。

項目の例です。各項目は「ある=1、ない=0」で記録します。

  1. 開始画面(遊び始める前に何かを押す、または見る画面)
  2. 操作説明(何をすればよいかの文)
  3. 残り時間の表示
  4. 得点の表示
  5. 終了画面または結果表示
  6. 再挑戦の手段(ボタンなど)
  7. 効果音
  8. 動きのある演出(的の出現や得点時の変化など)
  9. 難易度の変化(的が小さくなる、速くなるなど)
  10. スマホの操作への配慮(タップで遊べる、画面幅に合わせる)
  11. 動きを抑える設定への配慮
  12. 最高記録の保持

あわせて、ファイルの行数と文字数も記録します。「短くなったか」を数字で確認するためです。

1〜6のような見える項目は、実際に遊んで判定します。コードを検索するだけの判定は避けます。コメントに「効果音は後で追加」と書いてあるだけでも、文字列検索には引っかかるためです。一方で、7や11のように画面から判断しにくい項目は、検索で当たりを付けてから該当箇所を読んで確かめるのが現実的です。

次の最小のHTMLは、条件ごとのファイルの中身を貼ると、項目ごとの出現数を数える補助ツールです。ファイルの区切りには、=== だけの行を使います。

html
<!doctype html>
<meta charset="utf-8">
<title>生成物の比較</title>
<p>ファイルの間に「===」だけの行を入れて貼ってください。</p>
<textarea id="a" rows="8" cols="40" placeholder="条件A"></textarea>
<textarea id="b" rows="8" cols="40" placeholder="条件B"></textarea>
<button id="go">数える</button>
<pre id="out"></pre>
<script>
const keys = {
  "効果音": /AudioContext|new Audio\(/,
  "動き": /@keyframes|transition|animation/,
  "スマホ": /viewport|touchstart|pointerdown/,
  "動き抑制": /prefers-reduced-motion/,
  "保存": /localStorage/,
  "キー操作": /keydown/,
  "再挑戦": /もう一度|再挑戦|リトライ|retry|restart/i
};
function count(text) {
  const files = text.split(/^===$/m).filter(s => s.trim());
  const r = { "ファイル数": files.length };
  for (const k in keys) r[k] = files.filter(f => keys[f] || keys[k].test(f)).length;
  r["平均行数"] = files.length
    ? Math.round(files.reduce((n, f) => n + f.split("\n").length, 0) / files.length) : 0;
  return r;
}
document.getElementById("go").onclick = () => {
  const x = count(a.value), y = count(b.value);
  document.getElementById("out").textContent =
    Object.keys(x).map(k => k + "\tA:" + x[k] + "\tB:" + y[k]).join("\n");
};
</script>

このツールは当たりを付けるためのものです。判定の最終的な根拠は、実際に開いて遊んだ記録に置いてください。

結果の読み方と誤りやすい点

数字の読み方

項目ごとに「5本中何本にあったか」を条件別に並べます。読み方の目安は次のとおりです。

  • Aで多く、BやCで少ない項目は、「シンプルに」で省かれやすい候補です。差が4本以上あれば、注目する価値があります。
  • 差が1〜2本なら、生成のばらつきの範囲かもしれません。同じ条件で本数を増やして再確認します。
  • AとBで差がなく、Dだけ減る項目は、「シンプル」ではなく「最小限」という指示に反応している可能性があります。
  • BとCで結果が分かれるなら、語の位置が効いています。その場合は依頼文のどこに書くかが対策になります。
  • 行数が減っても、チェック項目の有無が変わらないなら、削られたのは書き方の簡潔さで、機能ではないと読めます。

逆に、Bで増える項目があれば、それも記録してください。「シンプルに」と言われて操作説明が丁寧になる、といった逆向きの変化もありえます。

起こりやすい誤り

  • 会話を使い回す:前の生成物の影響が入り、条件の差が見えなくなります。
  • 一語以外も変えてしまう:「シンプルに」と一緒に別の言い回しを直すと、何が効いたのか区別できません。
  • 判定者が条件を知っている:期待どおりに見えてしまいます。ファイル名の匿名化はそのために行います。
  • 1本の印象で決める:1本だけで「省かれた」と言うと、偶然を傾向と取り違えます。
  • 動かない生成物の扱いを後から変える:動作しないものを集計から外すなら、外すルールも先に決めます。
  • 結論の範囲を広げすぎる:この実験で分かるのは、使ったAI、題材、依頼文での傾向だけです。別の題材や、AIの更新後にも同じとは限りません。

次の行動

表の中で「Aにはあったのに、Bでは減った」項目が見つかったら、それが守るべき要素です。次の依頼文では「シンプルに作ってください。ただし、開始画面と操作説明、再挑戦ボタンは残してください。」のように、残すものを名指しで加えてみてください。同じ5回の手順で、省略が防げたかを確かめられます。

仕上がったゲームは、直下に index.html を置いたHTMLとして、アソバースに投稿して遊んでもらえます。なお、アップロードした作品内の localStorage は一時メモリー扱いの互換処理です。最高記録の保持を項目に入れた場合は、そのことも頭に置いて判定してください。