「短く」の基準はどこか:行数・文字数・機能数
遊びをつくる執筆にClaudeを使用しています。

ゲームづくりをAIに頼むとき、「短く作って」と一言添える場面を考えてみます。返ってきたコードが前より小さければ、指示が効いたように見えます。ただ、何が小さくなったのかは、見ただけでは分かりません。行数が減ったのか、文字数が減ったのか、機能が削られたのかで、手元に残るゲームはまったく違います。 特に注意したいのは、行数だけが減る場合です。複数の処理を1行に詰め込めば、行数は減っても文字数は変わらず、読みにくさだけが増えます。反対に、機能を3つ削ったのに行数がほとんど変わらないこともありえます。「短く」という言葉が何に作用するのかは、言葉の印象ではなく、数えて確かめるしかありません。 この記事は、その確かめ方を実験の設計書としてまとめたものです。結果は書きません。同じ依頼文に条件だけを変えて何度か出力させ、行数・文字数・機能数を記録すれば、自分が使うAIと自分の書き方での答えが出ます。
何を問うのか:「短さ」が作用しうる4つの場所
「短く」が作用する先は、少なくとも次の4つに分けられます。実験の前に分けておくと、結果を読むときに混ざりません。
- コードの行数(空行とコメントを除いた行数で数えます)
- コードの文字数(空白と改行を含めた総数で数えます)
- 機能の数(入力、判定、ヒント、記録など、遊び手に見える働きの数です)
- 説明文の長さ(コードの外に付く解説です。「短く」がこちらに効く可能性もあります)
問いは次の3つです。
- 「短く」とだけ書いたとき、4つのうちどこが変わるでしょうか。
- 行数、文字数、機能数のいずれかを数値で指定すると、指定したものだけが減るでしょうか。それとも他のものも連動して減るでしょうか。
- 指定した数値を守ったとき、ゲームとして遊べる状態は保たれているでしょうか。
3つ目は見落とされがちです。基準を満たしても、遊べなくなっていれば意味がありません。
準備するもの
- 同じAIの同じモデル。途中で切り替えません。
- 実行のたびに新しい会話を開く環境。前の出力が残っていると、2回目以降は影響を受けます。
- ブラウザ。出力したHTMLを開いて動作を確かめます。
- 記録用の表(紙でも表計算でも構いません)。
- 下に示す計測用の小さなHTML。
題材は、小さくても機能の足し引きが見えやすい「数字当てゲーム」にします。基本の依頼文は次のとおりです。
ブラウザで遊べる数字当てゲームを、1つのHTMLファイルで作ってください。
この文の末尾に、条件ごとの一文を足します。
- A 対照、末尾に足す一文:なし
- B 曖昧、末尾に足す一文:「短く作ってください。」
- C 行数、末尾に足す一文:「コードは◯行以内にしてください。」
- D 文字数、末尾に足す一文:「コードは◯文字以内にしてください。」
- E 機能数、末尾に足す一文:「機能は3つまでにしてください。」
CとDの「◯」は、先にAを5回実行し、行数と文字数の中央値を出してから決めます。どちらも中央値のおよそ半分にすると、無理のない範囲で制約が効いているかを見られます。あらかじめ数字を決め打ちすると、Aの出力がすでに範囲内だったときに、制約の効果を測れなくなります。
手順と記録の取り方
1. 機能のチェックリストを先に作る
機能数は、見た人によって数え方が変わります。そこで、実験の前に数え方を固定します。数字当てなら、たとえば次の8項目です。
- 数字の入力欄
- 「大きい/小さい」のヒント表示
- 試行回数の表示
- 再挑戦ボタン
- 過去の入力の履歴
- 最高記録(最少の試行回数など)
- 難易度や範囲の選択
- 効果音や演出
出力を見て、各項目が「ある/ない」を判定します。機能数はその合計です。出力を見てから項目を足すと基準がぶれるので、実験の途中では増減させません。
2. 各条件を5回ずつ実行する
条件は5つなので、合計25回です。生成のばらつきを見るため、1条件につき最低5回は取ります。1回だけでは偶然との区別がつきません。順番は条件ごとにまとめず、A→B→C→D→E→A…と回すと、時間帯や環境の影響が偏りません。
3. 出力を計測する
出力されたコードを、次の小さなHTMLに貼り付けると、行数・文字数・おおよその関数とイベントの数・コメントの数が出ます。機能数は自動では数えられないので、チェックリストで手作業で数えます。
<!doctype html>
<meta charset="utf-8">
<textarea id="src" rows="12" cols="60" placeholder="生成されたコードを貼り付け"></textarea>
<pre id="out"></pre>
<script>
const src = document.getElementById("src");
const out = document.getElementById("out");
function measure() {
const t = src.value;
const lines = t.split("\n");
const filled = lines.filter(l => l.trim() !== "");
const longest = Math.max(0, ...lines.map(l => l.length));
const fn = (t.match(/function\s|=>/g) || []).length;
const ev = (t.match(/addEventListener|onclick=/g) || []).length;
const cm = (t.match(/\/\/|\/\*|<!--/g) || []).length;
out.textContent = [
"空行を除いた行数: " + filled.length,
"文字数(空白・改行を含む): " + t.length,
"最長の1行の文字数: " + longest,
"関数らしき記述: " + fn,
"イベント登録らしき記述: " + ev,
"コメントらしき記述: " + cm
].join("\n");
}
src.addEventListener("input", measure);
measure();
</script>コメントを数えるのは、「短く」の指示でコメントが先に削られる場合があるためです。コメントの除去は行数を大きく変えますが、ゲームの中身は変わりません。
4. 1回ごとに記録する項目
- 条件(A〜E)と回の番号、記録の単位:1〜5
- 空行を除いた行数、記録の単位:行
- 文字数、記録の単位:文字
- 最長の1行の文字数、記録の単位:文字
- 機能数、記録の単位:8項目中いくつか
- コード外の説明文の文字数、記録の単位:文字
- 指定した数値を守ったか、記録の単位:はい/いいえ
- 最後まで遊べたか、記録の単位:はい/いいえ
「最後まで遊べたか」は、実際にブラウザで開き、数字を入力して正解するまで遊んで判定します。エラーで動かない場合も、その事実を記録します。
結果の読み方
25回分が埋まったら、条件ごとに各項目の中央値を並べます。平均は外れ値に引っ張られるので、5回程度なら中央値が扱いやすい指標です。読み方の目安は次のとおりです。
- Bで、Aに比べて行数も文字数も機能数も大差ない、読み取れること:「短く」だけではコードにほとんど作用していません。数値を添える必要があります。
- Bで、説明文だけが短くなった、読み取れること:「短く」が返答の文章に効いています。コードに効かせるには「コードを」と対象を書きます。
- Cで行数は減ったが、文字数と最長行が増えた、読み取れること:1行に詰め込んで行数の指定をかわしています。読みやすさを保つなら、文字数も併記します。
- Dで文字数は減ったが、機能数も減った、読み取れること:文字数の指定が、実質的に機能の削減として働いています。
- Eで機能数は3以下に収まったが、行数は大きく変わらない、読み取れること:機能数の指定は、行数や文字数の削減を保証しません。
- 指定を守った出力で「遊べない」が増えた、読み取れること:基準を満たすことと、遊べることは別です。制約が厳しすぎる可能性があります。
目安は、5回のうち少なくとも4回で同じ傾向が出るかどうかです。2〜3回しか同じ向きに動かないなら、傾向があるとは言い切れません。その場合は回数を10回に増やしてみます。
起こりやすい誤り
- 会話を引き継いでしまう:同じ会話で続けると、2回目以降は前の出力を踏まえた応答になります。毎回新しい会話にします。
- 条件ごとに依頼文の他の部分を変える:足す一文以外は、1文字も変えません。基本の依頼文を保存してコピーします。
- 数え方が途中で変わる:空行やコメントの扱いを回ごとに変えると、行数が比べられなくなります。計測は同じ手順で行います。
- 機能数を印象で数える:チェックリストにない機能が出てきた場合は、その場で項目に足さず、「その他」として別に記録します。
- 動かない出力を除外してしまう:動かない出力は、制約が品質に与えた影響を示す重要な記録です。外さずに残します。
- Cの行数制限がそもそも小さすぎる:中央値の半分にしても、HTMLとCSSとスクリプトを含めると厳しい場合があります。遊べない割合が極端に高いなら、制限を中央値の7割程度に緩めて再実験します。
次の行動
まず基本の依頼文とAの5回分だけを実行し、行数と文字数の中央値を出してみてください。その数字からCとDの上限を決めれば、残りの20回の条件が決まります。
遊べる出力が得られたら、直下にindex.htmlとして置き、アソバースの投稿画面で「入力→表示の確認→公開」の流れに乗せることで、実際の画面での見え方も確かめられます。どの指示の書き方が、自分の作りたいゲームに合うかを判断する材料になります。

