「これは最終版です」と伝えると、AIは慎重になるか
遊びをつくる執筆にClaudeを使用しています。

公開前夜のゲームを、AIに少しだけ直してもらう場面を考えてみます。依頼は「ジャンプが重く感じるので、操作感を良くしてください」の一文です。ここに「これは最終版です」と一行足しただけで、返ってくるコードの変更量は変わるのでしょうか。 直感では、最終版と言われたら慎重になり、最小限しか触らないように思えます。ただ、「最終なら仕上げを丁寧に」と受け取って、かえって手を入れる範囲が広がることもありえます。どちらに振れるのか、それとも変わらないのかは、測らないと分かりません。この記事は結果を示すものではなく、自分の作品と自分のAI環境で答えを出すための設計書です。
測るのは「慎重な口ぶり」ではなく「変更の大きさ」
「慎重になるか」は曖昧な問いなので、先に測る対象を分けます。AIの返答には、次の2種類の変化が混ざりうるからです。
- 変更の大きさ:コードのどれだけの行が、実際に書き換わったか。
- 慎重さの表現:「念のため確認してください」「元の動作を保つようにしました」といった説明文の量や調子。
後者は増えても、コードの書き換え量は変わらないことがあります。逆に、説明は淡々としているのに、実際には広い範囲を書き換えていることもあります。この実験の主役は前者です。後者は副次的な観察として別枠で記録します。
もう一つ、状況の説明と指示は分けます。「最終版です。余計なところは触らないでください」と書くと、状況ではなく指示を足したことになります。今回確かめたいのは、指示を足さず、状況を一行伝えただけで変更の大きさが動くかどうかです。
準備するもの
- 動作する小さなゲーム1本(単独のHTMLで、50〜150行程度が扱いやすい量です)。ジャンプ、移動、得点など、「調整の余地」がある要素を含めます。
- 同じAIサービス、同じモデル、同じ設定。カスタム指示や記憶機能が使えるなら、オフにするか全試行で揃えます。
- 試行ごとに新しい会話を開く手間。前の会話が残っていると、状況の説明が前の試行の影響を受けます。
- 変更前後を比べる道具。下のコードは、2つのテキストの「増えた行」と「消えた行」を数える最小のものです。
<!doctype html>
<meta charset="utf-8">
<textarea id="before" rows="8" cols="36" placeholder="変更前"></textarea>
<textarea id="after" rows="8" cols="36" placeholder="変更後"></textarea>
<p><button id="go">数える</button></p>
<pre id="out"></pre>
<script>
const lines = s => s.split("\n").map(l => l.trim()).filter(l => l);
function onlyIn(x, y) {
const pool = new Map();
for (const l of y) pool.set(l, (pool.get(l) || 0) + 1);
let n = 0;
for (const l of x) {
if (pool.get(l) > 0) pool.set(l, pool.get(l) - 1);
else n++;
}
return n;
}
document.getElementById("go").onclick = () => {
const a = lines(document.getElementById("before").value);
const b = lines(document.getElementById("after").value);
const removed = onlyIn(a, b), added = onlyIn(b, a);
document.getElementById("out").textContent =
`消えた行: ${removed}\n増えた行: ${added}\n合計: ${removed + added}`;
};
</script>この道具は行の順序を見ないため、行を並べ替えただけの変更は数えません。インデントや空行の違いは無視します。厳密な差分が必要なら、エディタのdiff機能やGitの差分表示を使ってかまいません。ただし、全試行で同じ道具を使ってください。
手順
条件は3つです。依頼文は共通にして、先頭に置く一行だけを変えます。
- A(対照)、先頭の一行:なし
- B(最終版)、先頭の一行:「これは公開直前の最終版です。」
- C(試作)、先頭の一行:「これは作り始めの試作です。」
共通の依頼文は次のとおりです。
ジャンプが少し重く感じるので、操作感を良くしてください。変更後のファイル全体を出力してください。
「良くしてください」は、あえて幅のある表現にしています。依頼が「ジャンプ速度を10%上げて」のように具体的だと、変更の大きさが依頼で決まってしまい、状況の影響が見えなくなります。
進め方は次のとおりです。
- ゲームのHTMLを同じ内容で用意し、原本として保存します。
- 条件ごとに新しい会話を開き、先頭の一行と共通の依頼文、ゲームのコード全文を貼ります。
- 返ってきたファイル全体を、試行ごとに別名で保存します。
- 各条件を5回ずつ、合計15回行います。回数が少ないと偶然のばらつきと区別できないためです。
- 実行順は条件ごとにまとめず、A→B→C→A→B→C…と混ぜます。時間帯やサービスの状態の偏りを避けるためです。
記録の取り方
1試行を1行として、次の項目を記録します。
- 消えた行・増えた行・合計、記録の単位:上のコードで数えた行数
- 触れた関数の数、記録の単位:変更が入った関数やブロックの数
- 依頼外の変更、記録の単位:ジャンプの操作感と無関係な変更の有無と件数
- 動作確認、記録の単位:原本と同じ操作で遊べるか(○/×)
- 説明文の量、記録の単位:返答のコード以外の文章の、おおよその行数
- 確認や警告の有無、記録の単位:「元に戻せるように」など慎重さを示す記述の有無
「依頼外の変更」の判定は、記録者の気分で揺れやすい項目です。可能なら、条件名を隠した状態で他の人に判定してもらいます。難しければ、判定基準を事前に書き出します。たとえば「得点計算、画面の色、変数名の整理は依頼外」と決めておきます。
返答に「最小限の変更にしました」と書かれていても、その言葉は信用せず、実際の行数で確かめてください。言葉と実測がずれていた場合、そのずれ自体が記録に値します。
結果の読み方と起こりやすい誤り
条件ごとに、合計行数の中央値と最小〜最大を並べます。平均より中央値のほうが、1回だけ極端に大きな書き換えが出た場合に左右されません。
読み方の目安は次のとおりです。
- BがAより明らかに小さく、範囲が重ならない:最終版という状況が、変更を抑える方向に働いた可能性があります。依頼外の変更の件数も減っているか、あわせて見ます。
- BがAより大きい、または依頼外の変更が増えている:最終版を「仕上げの機会」と受け取った可能性があります。当初の直感とは逆の結果です。
- A・B・Cの範囲がほぼ重なる:この題材と依頼文では、状況の一行の影響は見えません。「影響がない」とまでは言えず、「この条件では検出できなかった」という結論になります。
- 行数は同じで、説明や警告だけ増えた:口ぶりは変わっても、実際の変更は変わっていません。
誤りやすい点も挙げておきます。
- 1回ずつの比較で結論を出すこと。同じ条件でも、返答の大きさは毎回ばらつきます。
- 返答の途中で、AIが全体を整形し直し、行数が膨らむこと。インデントを揃える書き換えは、行の中身が変わるため差分として数えられます。整形が目立つ試行は、備考に残します。
- 原本を試行ごとに少しずつ直してしまうこと。比較の土台が動きます。
- 1つの題材だけで一般化すること。ジャンプの調整で出た傾向が、UIの修正や素材の追加でも出るとは限りません。
次の行動
まず、手元の小さなゲームを1本選び、原本として保存してください。次に、A・B・Cの各条件を新しい会話で1回ずつ試し、上のコードで行数を数えるところまで進めます。差が見えそうなら5回ずつに広げ、見えなければ依頼文の幅や題材を変えて、もう一度設計から見直してみてください。

