前回はAIと相談して、作るゲームの仕様を決めた。今回はその仕様を Claude Code に渡して、実際に動くところまで作らせてみよう。

おさらいすると、今回作るのはボタン1つで遊ぶゲームだ。

  • 押している間は壁に張り付き、離すと反対の壁へ跳ぶ
  • 左右の壁を蹴りながら登る
  • 降ってくるコインを拾い、トゲを避ける

ただ、作り始める前に仕様を2つ変えた。

1つはステージ制にしたこと。前回の仕様では、ゲームオーバーになるまでひたすら登り続けるだけだった。これでは区切りがなく、登っていく意味も薄い。そこで、一定の距離を登ると頂上に着いてクリアになり、次のステージは少し難しくなる、という形にした。ステージは終わりなく続くので、スコアを競う遊び方はそのまま残る。

もう1つは画面を縦長にしたこと。前回は、AIの提案どおり横長の 640x360 に決めていた。しかし登るゲームでは、上から何が来るかが早く見えるほど遊びやすい。縦長ならスマホを縦に持ったまま遊べる、という利点もある。

企画の段階で決めたことでも、作り始める前に気づいたなら直してしまえばいい。

今回のゴール

  • 作る前に、AIに構成を出させるプロンプトの型
  • AIが仕様に足してきたものを、採るかどうかの判断
  • AIに動作確認までさせる頼み方

使ったもの

項目 値
Godot 4.7.2
コード生成AI Claude Code(Claude Opus 5.5)
検証日 2026-09-27

やり取り

同じプロンプトを投げても、同じ返答が返ってくるとは限らない。モデルが変われば中身も変わる。参考にしてほしいのは文面そのものより、どんな制約をどの順で与えたかのほうだ。

前回と同じく、私の入力はコード枠で、AIの返答は引用で示す。やり取りの全文は、末尾の「制作の記録」にある。

最初のプロンプト

Godot のエディタで空のプロジェクトを作り、そのフォルダで Claude Code を起動して(入れ方は前回の「始める前に」を参照)、次を投げた。

Godot 4.7 で、次の仕様の2Dゲームを作りたい。このフォルダには、エディタで作ったばかりの空のプロジェクトがある。

# 前提
- 私はゲーム制作の経験がない。Godot のエディタも初めて触る
- シーン(.tscn)もスクリプト(GDScript)も、プロジェクト設定も、すべて作ってほしい
- 絵と音はまだ用意しない。当面は単色の四角だけで表示する
- Godot は 4.7.2 を使っている。ターミナルからは `godot` コマンドで起動できる

# 仕様
- 操作はボタン1つ。押している間は壁に張り付いて止まり、離すと反対の壁へ跳ぶ
- 張り付ける時間には制限があり、一定秒数で剥がれる
- プレイヤーは画面内で上下に動く。壁と落下物が下へ流れ、登っているように見せる
- 上からコイン(丸)と障害物(トゲ)が降ってくる
- 一定の距離を登ると頂上に着き、そのステージはクリア。次のステージが始まる
- 1ステージは30秒前後で登り切れる長さにする
- ステージは終わりなく続き、進むごとに落下物の出現間隔が少し狭くなる
- トゲに触れるか、画面の下に落ちたらゲームオーバー
- スコアは拾ったコインの数。ステージをまたいでも引き継ぐ
- 画面には今のステージ番号とスコアを表示する

# 入れておきたいこと
- ボタン入力は1つのアクションにまとめ、Space・マウスクリック・タッチを割り当てる
- 開始直後は1.5秒ほど何も降らせない
- 乱数の seed を保持して、画面に表示する
- 画面は縦長にする。基準の解像度は 720x1280 とし、実際の画面に合わせて縦横比を保ったまま拡大する
- スマホは縦持ちで遊ぶ想定。PC は FHD の横長モニターで遊ぶ想定で、左右に余白が出てよい

# 進め方
いきなり作らず、先に次を見せてほしい。私が確認して OK を出してから作り始めること。

- 作るシーンの一覧と、それぞれのノード構成(ツリーの形で。ノードの種類と名前も)
- 各ノードとスクリプトが何を担当するか、1行ずつ
- プロジェクト設定で変える項目(解像度・入力マップなど)

作り終えたら、エラーなく起動できるかを自分で確かめてから報告してほしい。

最後の「進め方」では、作る前に構成を見せることと、作ったあとに自分で動作を確かめることを頼んでいる。今回のプロンプトで一番工夫したのはこの部分だ。

設計案が返ってきた

頼んだとおり、最初はコードではなく設計案が返ってきた。シーンは、ゲーム全体をまとめる Main、プレイヤー、コイン、トゲ、画面の文字表示の5つ。Main のノード構成は次のとおりだ。

Main (Node2D)                 [main.gd]
├─ Background (ColorRect)
├─ Walls (Node2D)             [walls.gd]
│   ├─ LeftWall (Node2D)      ← 縞模様の ColorRect をスクリプトで並べる
│   └─ RightWall (Node2D)
├─ Summit (ColorRect)         ← 頂上を示す横帯。ゴールが近づくと上から降りてくる
├─ Drops (Node2D)             ← 降ってくるコインとトゲの入れ物
├─ Player (player.tscn のインスタンス)
├─ SpawnTimer (Timer)
└─ HUD (hud.tscn のインスタンス)

ノードの一つひとつには、何を担当するかが1行ずつ添えてあった。さらに、頼んでいないのに仕様をどう解釈したかまで書いてあった。張り付けるのは1.2秒まで、1ステージの長さは6000px、出現間隔はステージごとに1割ずつ短くし、コインとトゲの割合は6対4にする、といった具合だ。どれも仮の値で、スクリプトの先頭にまとめておき、Godot のエディタ右側の設定欄(インスペクター)から後で調整できるようにするという。

設計案の最後で、AIは2つのことを聞いてきた。

先に決めていただきたい点が2つあります。

  1. 仕様にない追加:「TAP TO START」での待機、タップでのリトライ、どのステージでも最初の 1.5 秒は降らせない、の3つを入れてよいですか?
  2. git:このフォルダはまだ git リポジトリになっていません。git init して develop ブランチを作り、feature ブランチで作業しましょうか? それとも git は使わずに進めますか?

AIはこのように、返答の最後に番号付きで質問を並べてくることが多い。答えは番号で返せばいい。私はこう答えた。

1:OK
2:使わない

git(作ったものの履歴を残す仕組み)は、この連載では使わないことにした。AIと作るときの履歴の残し方は、番外編で扱う予定だ。

設計案の全文(ファイル構成・4つのシーン・担当・動きのルール・プロジェクト設定)

設計案は、ファイル構成、4つのシーンのノード構成、各ノードとスクリプトの担当の表、「動きのルール(仕様をこう解釈しました)」、プロジェクト設定で変える項目の表、起動の確かめ方、の順に並んでいた。全文は「制作の記録」にある。ここでは「動きのルール」から抜粋する。

  • 張り付きの時間制限:一定秒数(仮に 1.2 秒)押し続けると剥がれて、壁沿いに滑り落ちる。離せばそこから跳べる。(中略)
  • ステージの長さ:登る距離は 6000px(自動スクロールだけで約30秒。うまく跳べばもう少し早く着く)。(中略)
  • 何も降らない時間:各ステージの開始から 1.5 秒は降らせない(最初のステージだけでなく、どのステージでも同じにする案です)。
  • 落下物:左右の壁の間のランダムな位置に出す。コインとトゲの割合は、仮にコイン 60%・トゲ 40%。

判断した1:仕様にない3つの追加を採った

1つ目の質問にあった3つの追加は、次のとおりだ。

  • 起動直後は「TAP TO START」と出して、タップを待つ
  • ゲームオーバーの後は、タップでやり直せるようにする
  • 何も降らない1.5秒を、最初だけでなくどのステージの開始時にも入れる

言われてみれば、どれも仕様から抜けていた。始め方もやり直し方も書いていなかったし、ステージ制に変えたときに「1.5秒の猶予」を2面目以降にどうするかも決めていなかった。仕様を変えたときにできた抜けを、AIのほうが先に見つけ、埋め方まで提案してきた形だ。3つとも採用した。

AIがこれを勝手に入れず、先に聞いてきた点も大事だ。プロンプトで「確認してから作り始めること」と頼んでいなければ、黙って入っていたかもしれない。

判断した2:細かいところは、作らせてから直す

設計案には仮の数値がいくつも並んでいた。張り付き1.2秒は長いのか短いのか、6000pxで本当に30秒前後になるのか。読んだだけでは判断がつかなかった。

そこで、構成案の全体を見て明らかにおかしなところがなければ OK を出すことにした。今回の設計案には仕様の読み違いもなく、おおむね妥当だった。数値の良し悪しは遊んでみないと分からないので、作らせてから直すほうが早い。

構成を先に見せてもらうのは、作り直しになるような大きな読み違いを防ぐためで、細かい数値まで詰めるためではない、と割り切った。

作り終えたという報告

OK を出すと、AIはシーン・スクリプト・設定を一気に作った。そのあと自分で入力を送るテストを書き、張り付き、跳躍、ステージクリア、ゲームオーバーまで確かめてから報告してきた。報告の最後には、「確認できていないこと」として次の3つも書いてあった。

  • 画面の見た目は、私は目で見ていません。四角や縞の壁がどう映るか、一度見てみてください。
  • スマホ実機でのタッチも試していません。設定上は、タッチがマウスの左クリックとして届く仕組みです。
  • 手触りの調整もまだです。ジャンプの強さ、張り付けるのは 1.2 秒まで、落下の速さなどは仮の値です。1ステージは、うまく跳べれば25〜30秒くらいで登り切れる計算です。

実際に起動して確かめてから「確認した。OK」と返すと、AIはエディタが設定ファイルを保存し直したことに気づいて、次のように報告してきた。この報告は英語で表示されたので、私が日本語にするよう頼み、AIが書き直した版を載せる。

エディタが project.godot を保存し直し、次の2行が消えていました。

  • window/stretch/aspect="keep"
  • emulate_mouse_from_touch=true

どちらも Godot の初期値と同じなので、エディタが保存するときに書くのを省いただけです。縦横比を保ったまま拡大することも、タッチで操作できることも変わりません。何もしなくて大丈夫です。

(原文は英語)

日本語にするよう頼んだときの入力は、これだ。

日本語で表示して下さい。これはルールです

AIは謝ってこのルールを記録したと答えたが、英語に戻る癖はこのあとも出た。その話は第5回で書く。

動かしてみる

起動直後の画面。中央に TAP TO START、上にステージ番号とスコア、左下に seed が出ている

左の壁に張り付いている場面。プレイヤーの上の白いバーが張り付ける残り時間。上からコインとトゲが降ってくる

起動すると、単色の四角が壁を蹴って登っていく。最初の一回で、もうかなり遊べるものになっていた。数値を調整すれば、操作感はまだ良くなりそうだ。

今回のハマりどころ

エラーなく動いても、遊べるとは限らない。 AIは自分でテストを書き、状態の切り替わりまで確かめた。それでも、見た目・スマホでのタッチ・手触りは確かめられていないと自分で書いていた。今回AIが確かめたのはログに出ることまでで、見た目や手触りは実際に遊んで確かめるしかない。

仕様を変えたら、関係する項目を見直す。 前に書いた「1.5秒の猶予」がその例だ。ステージ制を足したとき、私は猶予を2面目以降にも入れるかを考えていなかった。今回はAIが気づいてくれたが、毎回そうとは限らない。

今回のコード

ai-game-dev-coding(GitHub のタグ)。Godot 4.7.2 で project.godot を開き、F5 で遊べる。

この回のやり取りの全文は、制作の記録(第3回)にある。

次回やること

第4回は「効果音を、AIと用意する」。単色の四角のゲームに、ジャンプやコインの音をつける。