前回は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つあります。
- 仕様にない追加:「TAP TO START」での待機、タップでのリトライ、どのステージでも最初の 1.5 秒は降らせない、の3つを入れてよいですか?
- 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回で書く。
動かしてみる


起動すると、単色の四角が壁を蹴って登っていく。最初の一回で、もうかなり遊べるものになっていた。数値を調整すれば、操作感はまだ良くなりそうだ。
今回のハマりどころ
エラーなく動いても、遊べるとは限らない。 AIは自分でテストを書き、状態の切り替わりまで確かめた。それでも、見た目・スマホでのタッチ・手触りは確かめられていないと自分で書いていた。今回AIが確かめたのはログに出ることまでで、見た目や手触りは実際に遊んで確かめるしかない。
仕様を変えたら、関係する項目を見直す。 前に書いた「1.5秒の猶予」がその例だ。ステージ制を足したとき、私は猶予を2面目以降にも入れるかを考えていなかった。今回はAIが気づいてくれたが、毎回そうとは限らない。
今回のコード
ai-game-dev-coding(GitHub のタグ)。Godot 4.7.2 で project.godot を開き、F5 で遊べる。
この回のやり取りの全文は、制作の記録(第3回)にある。
次回やること
第4回は「効果音を、AIと用意する」。単色の四角のゲームに、ジャンプやコインの音をつける。