INDIE INDEX

Claude Code に、ゲームのテストを書かせてバグを減らす頼み方【AIでゲーム開発】

公開 2026-09-25更新 2026-09-25Claude Code

Claude Code に文を1回頼むと、ゲームの計算だけを分けたファイルと、それを確かめるテスト21件ができました。自分で走らせると21件全てpassし、計算のファイルの写しをわざと壊して同じテストを走らせると、壊した処理に近いテストが落ちました。画面を持たないブラウザで開くと、自機は矢印キーで動き、左右の端でぴったり止まり、コインを取るとスコアが増えました。

このページの目次
  1. Claude Code に頼んだ文
  2. 自分でテストを走らせて確かめる
  3. 何を、どんな場合でテストしたか
  4. テストがバグを見つけるかを確かめる
  5. ゲームそのものが動くかを確かめる
  6. Claude Code にテストを足させるときの流れ
  7. 情報源

Claude Code に頼んだ文

空の作業フォルダを1つ決め、Claude Code に次の文を1回だけ渡しました。追加のパッケージを入れないこと、自機を左右キーで動かし画面の外に出さないこと、コインを取るとスコアが増え3秒以内に続けて取ると連続として1枚あたりの点が上がること、計算だけの処理をゲームの描画とは別のファイルに分けること、そのファイルを確かめるテストを書いて境目の場合も入れることを頼んでいます。

Claude Codeにテスト付きのゲームを頼んだ文

作業フォルダは C:\games\my-game\ だけです。このフォルダの外は読まない・書かないでください。

ブラウザで動く小さなゲームと、そのテストを作ってください。追加のパッケージは入れず、Node.js に最初から入っている機能だけでテストを走らせてください。
ゲームは game.htm で、画像のファイルは使わず四角と色だけで描きます。画面の下の自機(四角)を左右の矢印キーで動かし、上から落ちてくるコイン(四角)を取るとスコアが増えます。
コインは3秒以内に続けて取ると「連続」になり、連続の2枚目からは1枚で2点、5枚目からは1枚で3点にしてください。3秒あいだが空くと連続は切れて1枚1点に戻ります。自機は画面の左右の端から外へ出ないようにしてください。
スコアの計算、2つの四角が重なっているかの判定、自機を画面の中に収める処理は、画面の描画とは別のファイル logic.js にまとめ、game.htm はそれを読み込んで使ってください。
logic.js の処理を確かめるテストを logic.test.js に書き、`node --test` で走らせて結果を見せてください。連続が切れるちょうど3秒のとき、四角の辺がちょうど触れているとき、自機が端にぴったりいるときのような、境目の場合もテストに入れてください。
作り終えたら、どの処理をどんな場合でテストしたか、テストを走らせた結果を、ふつうの言葉で説明してください。

※ このページの枠の中の作業フォルダの道は、例の道(C:\games\ の下)に置き換えて載せています。ほかの文字はそのままです。

Claude Code は、game.htm・logic.js・logic.test.js の3つのファイルを作りました。追加のパッケージは使わず、Node.js 本体に入っている機能だけでテストを走らせています。logic.js には、2つの四角が重なっているかの判定、自機を画面の横幅の中に収める処理、コインを取ったときの点数と連続の計算をまとめ、logic.test.js に21件のテストを書いたと説明しました。「3秒以内に続けて取ると連続になる」という条件については、ちょうど3秒のときを「連続が続く」側として実装し、テストにもその解釈をそのまま書いたとも説明しました。

Claude Code は、テストを走らせると21件全てpassしたと自分で書いていますが、この説明は Claude Code 自身の説明で、動いた証拠ではありません。次の節は、それを自分で走らせて確かめた記録です。

自分でテストを走らせて確かめる

Claude Code が作った logic.test.js を、書き換えずにそのまま自分で走らせました。使った Node.js は v24.18.0 です。

$ node --test logic.test.js
(中略:21件それぞれの結果の行)
ℹ tests 21
ℹ suites 0
ℹ pass 21
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 73.4639

21件のテストは全てpassし、落ちたテストは0件でした。実行にかかった時間は73.4639ミリ秒です。

何を、どんな場合でテストしたか

logic.test.js を読むと、テストは大きく3つの処理に分かれていました。

  • 2つの四角が重なっているかの判定:完全に離れている場合、一部が重なっている場合、一方がもう一方の中にすっぽり入っている場合、辺がちょうど触れていて隙間がゼロの場合、辺が触れる直前で1だけ離れている場合、上下の辺がちょうど触れている場合の6件。
  • 自機を画面の横幅の中に収める処理:収まっている場合、左に出ている場合、右に出ている場合、左端にぴったりいる場合、右端にぴったりいる場合、右端をちょうど1だけ超えている場合の6件。
  • コインを取ったときの点数と連続の計算:1枚目・2〜4枚目・5枚目以降でそれぞれ何点になるかの3件、最初の1枚、3秒以内に続けて取った2枚目、間隔がちょうど3秒のとき、間隔が3秒を1ミリ秒でも超えたとき、5枚連続で取ったときの点数の並びと合計、連続の途中で3秒あいて切れてからまた育つ場合の6件。

「ちょうど◯◯のとき」「1だけ超えたとき」のような境目の場合が、3つの処理のどれにも入っていました。

テストがバグを見つけるかを確かめる

テストが実際にバグを見つけるかを確かめるため、logic.js をゲームのフォルダとは別の場所に2通り写し、写しの方だけをわざと壊しました(ゲーム本体のファイルは変えていません)。

1つ目は、コインを取ったときの連続の判定です。logic.js を読むと、直前に取ってからの経過時間が3000ミリ秒「以下」なら連続が続く比較になっていました。この比較を、3000ミリ秒ちょうどを含まない形に変えました。

✖ 境目: 間隔がちょうど3秒(3000ms)のときは連続が続く (0.5246ms)
  AssertionError [ERR_ASSERTION]: ちょうど3秒は「3秒以内」として連続が続く
  1 !== 2
...
ℹ tests 21
ℹ pass 20
ℹ fail 1

21件中20件はpassし、「間隔がちょうど3秒のときは連続が続く」という境目のテストだけが、期待した値2に対して実際の値1で落ちました。3秒を超えて連続が切れる場合を確かめるテストを含め、ほかの20件は落ちませんでした。

2つ目は、自機を画面の横幅の中に収める処理です。logic.js を読むと、右端で戻す位置は「画面の横幅-自機の横幅」(340)になっていました。この戻す位置に1を足し、右端で1ピクセルだけ画面の外へ出る形に変えました。

✖ 境目: 右端よりちょうど1だけ出ている(x=341)ときは340に戻す (0.1131ms)
  AssertionError [ERR_ASSERTION]:
  341 !== 340
...
ℹ tests 21
ℹ pass 19
ℹ fail 2

21件中19件はpassし、右端に関わる3件のうち2件(右に出ていたときの戻し方を確かめるテストと、右端をちょうど1だけ超えている境目のテスト)が、期待した値340に対して実際の値341で落ちました。右端にぴったりいる境目のテストを含む、ほかの19件は落ちませんでした。

コインを取ったときの連続の判定を壊した写しでは境目のテスト1件だけが落ち、自機を画面の横幅の中に収める処理を壊した写しでは境目でないテストも含めて2件が落ちました。どちらも、壊した処理に近いテストが落ち、関係の無い処理のテストは通ったままでした。

ゲームそのものが動くかを確かめる

game.htm の中の自機・コイン・スコアの値は、画面の描画のしくみの中に閉じていて、外から直接は読めない作りでした。そこで、画面を持たない Chrome で game.htm を開き、canvas に描かれた自機の色とコインの色のピクセルの位置、画面左上のスコアと連続の表示文字を読む方法にしました。

したこと 記録に出たこと
開いてすぐ、キーを押さずに0.3秒待つ 自機は横170〜229(画面の横幅400・自機の横幅60の中央)。スコア0・連続0
右矢印キーを3秒間押しっぱなしにする 開始628ミリ秒後の読み取りで横340に達し、そこから2962ミリ秒後までの読み取り16回はすべて横340でした(340を超える値は無かった)
続けて左矢印キーを3秒間押しっぱなしにする 開始1248ミリ秒後の読み取りで横0に達し、そこから2970ミリ秒後までの読み取り12回はすべて横0でした(0を下回る値は無かった)

右矢印キーを押し続けた3秒間はスコアが0のままでしたが、続く左矢印キーを押し続けた3秒間にスコアが3・連続が2に変わりました(押している途中の正確な時刻は読み取っておらず、3秒間の前後の読み取りだけで比べています)。

続けて、いちばん下にあるコインの中心へ、自機の中心を左右キーで寄せ続けました。開始2ミリ秒後の読み取りではすでにスコア3・連続2(直前の左矢印キーの試しから変わっていない状態)でしたが、開始1014ミリ秒後の読み取りでスコア5・連続3に変わりました。

Claude Codeが作ったゲームを開いて、まだキーを押していない画面。左上にスコア0・連続0、下に青い自機の四角がある

右矢印キーを3秒間押し続けたあとの画面。自機の四角が画面の右端にぴったり寄っている

続けて左矢印キーを3秒間押し続けたあとの画面。自機の四角が画面の左端にぴったり寄り、スコアが3・連続が2になっている

コインの中心へ自機を寄せ続けたあとの画面。スコアが5・連続が3になっている

この試しのあいだ、コンソールに出たエラー・警告・例外は0件でした。連続が3秒を超えて切れる場面(この試しでは連続が途切れる前に終えました)、自機とコインが重なった正確な瞬間(読み取りは30〜150ミリ秒おきで、ぶつかった瞬間そのものではありません)は、この試しでは確かめていません。

2つの四角が重なっているかを見る基本の考え方は、AI に移動と当たり判定を作らせる頼み方にあります。

Claude Code にテストを足させるときの流れ

Claude Code でテストを足すときは、対象の処理を見つける・テストの土台を作らせる・意味のあるテストの場合を足す・走らせて確認する、の順に進めます。テストの場合を頼むときは、確かめたい振る舞いを具体的に伝えます。Claude Code は既存のテストファイルを調べ、そこで使われている書き方やアサーションの形に合わせます。見落としがちな境目の値やエラーになる条件のようなケースを挙げるよう頼むこともできます。

情報源

Claude Code のほかのページ

このページに出た言葉