前回は、AIに何ができて何ができないかを書いた。今回は、人間に残ると書いた「決める」作業を実際にやってみる。コードはまだ書かない。
決まっているのは「ボタン1つで遊べる2Dゲーム」という条件だけで、何を作るかはここからAIと相談して決めていこう。
今回のゴール
- AIに選択肢を出させて、会話で仕様を詰める進め方
- 制約だけを与えて案を絞らせるプロンプトの型
- AIの推薦案を採るか決めるときの判断の仕方と、採らなかった出力から拾うもの
使ったもの
| 項目 | 値 |
|---|---|
| 企画に使ったAI | Claude Code(Claude Opus 5) |
| Godot | 4.7.2(今回はまだ触らない) |
| 検証日 | 2026-09-16 |
始める前に:Claude Code を入れる
この回から Claude Code を使う。入れ方は公式のクイックスタートにまとまっていて、要点は次のとおりだ。
- Windows なら PowerShell で
irm https://claude.ai/install.ps1 | iex、macOS なら「ターミナル」でcurl -fsSL https://claude.ai/install.sh | bashを実行する - 新しいターミナルを開いて
claude --versionを実行し、バージョン番号が出れば入っている - 作業用のフォルダに移動して
claudeと打つと起動する。初回はブラウザが開くので、有料プランのアカウントでログインする
入れ方は変わることがあるので、うまくいかないときはクイックスタートを確かめてほしい。
やり取り
同じプロンプトを投げても、同じ返答が返ってくるとは限らない。モデルが変われば中身も変わる。参考にしてほしいのは文面そのものより、どんな制約をどの順で与えたか、そしてAIの返答を受けて何を決めたかのほうだ。
以下では、私の入力はコード枠で、AIの返答は引用で示す。やり取りの全文は、末尾の「制作の記録」に置いた。
会話で仕様を詰める
企画は、AIに選択肢を出してもらい、私が選ぶ形の会話で進めた。AIは毎回、質問をいくつか並べ、それぞれに選択肢と長所・短所を添えてくる。私はその中から選ぶか、選択肢にない答えを書き込む。
最初に聞かれたのは、ゲームの核になる3つだった。
ボタンを押したとき、プレイヤーに何が起きますか(ここが決まると他が自動的に決まります)
- 跳ぶ — 押すとジャンプ。重力と接地判定が必要で、物理の調整に手間がかかる。一番見慣れた感触で、読者が完成形を想像しやすい
- 上下を入れ替える — 押すと重力が反転して天井と床を行き来する。実装が最も単純(値の符号を反転させるだけ)で、触り心地は独特
- 向きを変える — 押すと進行方向が90度または反対に切り替わる。実装は軽いが、避ける対象の置き方を考えないと遊びにならない
- 発射する — 押すと弾が出る。弾の生成と破棄、命中判定が必要で、最も要素が多い。が、作っている実感は一番強い
ゲームオーバーの条件とスコアも同じ形で聞かれ、私は次のように選んだ。
| AIの質問 | 私の答え |
|---|---|
| ボタンを押したとき、プレイヤーに何が起きますか | 跳ぶ |
| ゲームオーバーの条件をどうしますか | 一度当たったら即終了 |
| スコアは何で伸びますか | 拾った数 |
続けて、横の動き・見分け方・難易度を聞かれた。
| AIの質問 | 私の答え |
|---|---|
| プレイヤーは横方向にどう動きますか | 左右に往復し続ける |
| 拾うものと避けるものを、読者にどう見分けさせますか | 形で分ける |
| 難易度はどう上がりますか | 出現間隔が狭くなる |
AIが出した選択肢の全文(ゲームオーバー・スコア・横の動き・見分け方・難易度)
- ゲームオーバーの条件:一度当たったら即終了/ライフ3つ/時間制(60秒など)
- スコア:生き延びた時間/拾った数/すり抜けた数
- 横の動き:その場に固定して右から流れてくる(1画面完結と最も相性が良く、実装も最軽)/自動で右に走る/左右に往復し続ける(跳ぶタイミングだけで位置を調整するので難易度は上がるが、独特の感触になる)
- 見分け方:色だけで分ける/形で分ける(丸がアイテム、トゲトゲが障害物)/上下で分ける
- 難易度:だんだん速くなる/出現間隔が狭くなる(速度は一定で、障害物の密度が上がる。速度変化より理不尽感が出にくい)/上げない
ここで、AIのほうから問題を指摘してきた。
ここで設計上の穴が1つ出た。 企画会議として一番価値のある部分なので、先に説明する。
プレイヤーが自動で左右に往復し、操作は跳ぶだけ。つまりプレイヤーは横位置を選べない。この状態で即死があると、避けようがない場所に障害物が湧いた瞬間に理不尽な死が発生する。着地点に湧かれたら何をしても助からない。
そのうえでAIは、障害物の出る場所と、理不尽な死の防ぎ方を選択肢で聞いてきた。防ぎ方の選択肢は「プレイヤーの近くには湧かせない」「出る前に予告する」「両方やる」の3つ。私は出る場所に「上から降ってくる」を選び、防ぎ方はどれも選ばずに、次のように書き込んだ。
ジャンプするタイミングをボタンリリース時として、落下してくるオブジェクトを避けるか触れるか選択できる
判断した1:操作そのものを変えた
AIの3案は、どれも障害物の出方を工夫するものだった。ただ、避けられない配置が問題になるのは、プレイヤーに跳んで避ける以外の手がないからだ。それなら、できることを増やせばいい。そう考えて、跳ぶのをボタンを離したときにした。AIの返事はこうだった。
その解き方は、私が出した3案のどれよりいい。
私は「湧く位置を制限する」「予告する」という症状を抑える案しか出せていなかった。ボタンリリースで跳ぶという設計は、避けるか触れるかをプレイヤーの選択にすることで問題そのものを消している。反射神経の勝負が判断の勝負に変わる。
このときAIは、穴を指摘したのと同じ返答の中で、こうも言っていた。
AIに仕様を投げれば「左右往復・即死・障害物」と言われた通りに書く。この破綻には触れない。 人間が気づいて潰すしかない種類の問題で、第2回の「AIの出力をどう直したか」に置くにはうってつけの題材だと思う。
この予想が当たるかどうかは、あとで確かめることになる。
AIはさらに、ボタンを押している間はどうなるのかが決まっていない、と指摘してきた。押している間も往復が続くなら、真上から降ってくるトゲからは逃げられない。そこで押している間は「その場に止まる」を選んだ。落ちてきたものが地面に着いたらどうなるか、という質問には、選択肢を使わずにこう答えた。
地面は無いため画面外に消える。プレイヤーはメトロイドの壁反射ジャンプのように上へ上へと進んでいくものとする。
大きく変わった。整理すると、左右の壁の間を蹴って上へ登り続けるゲームになる。押している間は壁に張り付いて止まり、離すと反対の壁へ跳ぶ。上からトゲとコインが降ってくる。
跳ぶ方向が横から上に変わり、左右の壁を蹴りながら登り、上から降ってくるコインを拾い、トゲを避けるゲームになった。降ってくるものに「触れにいく」か「やり過ごす」かをプレイヤーが選べるので、避けようのない配置という問題そのものがなくなる。反射神経だけで競うゲームから、いつ跳ぶかを考えるゲームに変わった。
最後に、登る見せ方・落下・張り付いている間の振る舞いを聞かれた。
| AIの質問 | 私の答え |
|---|---|
| 「上へ登る」をどう実現しますか | 1か2で迷っている |
| 画面の下に落ちたらどうなりますか | 落ちたらゲームオーバー |
| 壁に張り付いている間の振る舞いは | 張り付ける時間に制限 |
張り付いたまま待つのが一番安全にならないよう、張り付いていられる時間に制限をつけた。登る見せ方で迷っていると答えると、AIは、プレイヤーを画面に固定したら落下死が成立しないのでは、という点で迷っているのだろうと先回りし、プレイヤーは画面の中で上下に動き、壁と落下物のほうを下へ流す案1を薦めてきた。スコアを「拾った数」にしたので、高度を実数で持つ案2の利点は使わない、という理由だった。私が「y」と返して、仕様が固まった。
プロンプトにまとめて、別のAIに投げ直す
ただ、長く話したあとのAIは、こちらの考えに引っ張られる。そこでAIに、会話で決めた答えは入れずに制約だけを並べたプロンプトを1本にまとめてもらった。
Godot 4.7 で、1ボタンだけで遊べる2Dゲームを作りたい。仕様を決めるのを手伝ってほしい。
# 前提
- 私はゲーム制作の経験がない
- ブログの連載で作る題材。実装は3回分の記事に収まる規模にしたい
- 1画面で完結させる。レベルデザインやマップは作らない
- 1プレイは30秒〜1分
# 制約
- 操作はボタン1つだけ。方向キーもマウスも使わない
- ステージは手で配置せず、手続き的に生成する
- スコアで競う。面クリアやエンディングはない
# 聞きたいこと
上の制約を満たすゲーム案を3つ出してほしい。それぞれについて次を書くこと。
- ボタンを押すと何が起きるか
- どうなったらゲームオーバーか
- スコアは何で伸びるか
- 実装で一番面倒になりそうな箇所
3案を出したあとで、初心者が3回の記事で完成させるならどれを薦めるか、理由とあわせて教えてほしい。
「実装は3回分」は当時の予定で、実際に作ってみると、実装は第3回から第6回までの4回分になった。
作りたいものはあえて書かず、制約だけを並べた。なぜそうしたかは、後の「ハマりどころ」で書く。まとめ終えたAIは、この会話を知らない別のAIに投げれば、会話で決めた答えをなぞらずに済むと言い、さらに「出てくる結果は、ほぼ間違いなく私たちが到達した『壁蹴りで登る』には届かないはず」と予想していた。
投げる前に「懸念点は潰せた?」と聞くと、AIは潰せたものと、まだ残っているもの(実装が3回に収まるか、リポジトリ名が決まっていない、など)を一覧にしてきた。リポジトリ名はAIの推薦をそのまま採ることにして、会話の履歴を持たない別のAIにプロンプトを投げてもらった。
別のAIは、次の3案を返してきた。
| 案1 ひとつ跳び | 案2 まわる | 案3 のばす | |
|---|---|---|---|
| ボタン | 接地中に押すとジャンプ。長く押すほど高く跳ぶ | 円周上を回る向きが反転する | 押している間は棒が伸び、離すと倒れる |
| ゲームオーバー | 障害物に触れる | 赤い障害物に触れる | 棒が足場に届かない、または越えすぎる |
| スコア | 生き残った時間と、越えた障害物の数 | 青いドットを拾う。連続で拾うと倍率が上がる | 渡った足場の数 |
| 一番面倒な箇所 | 避けようのない配置が生まれないようにすること | 角度の計算(一周してゼロに戻る境目) | 状態の管理(二度押しで棒が2本生える) |
薦めてきたのは案1だった。地面を走るキャラクターに向かって右から障害物が流れてくる横スクロールのゲームで、ボタンを押して障害物を跳び越えていく。理由は4つ挙がっていた。記事3回に分けやすいこと、Godotの基本をひと通り触れられること、詰まっても検索で答えが見つかりやすいこと、一番面倒な箇所も数式1本で片付くこと。どれも筋は通っていた。
別のAIの返答の全文(抜粋)
案1の「一番面倒になりそうな箇所」:
一番面倒になりそうな箇所: 「回避不可能な配置」が生まれないことの保証です。速度が上がると、ジャンプの滞空時間中に次の障害物が飛び込んできて物理的に避けられない配置ができます。滞空時間
T = 2 * 初速 / 重力を出し、最小間隔 = 速度 * T * 1.5のような下限を必ず入れる必要があります。ここを乱数任せにすると「たまに理不尽に死ぬ」ゲームになり、原因も掴みにくい。
案1に添えられていた実装の指針:
- 1ボタンの実装: InputMap に
flapのようなアクションを1つ作り、Space・Enter・マウス左クリック・タッチをまとめて割り当てる。(中略)こうしておくとブログ埋め込み(HTML5 書き出し)でスマホからも遊べます。- 難易度は速度より間隔で上げる(中略)
- 解像度は小さく固定: 640x360 程度、
canvas_itemsのストレッチ設定。ドット絵でなく単色の矩形だけでも成立するので、絵を描く回を作らずに済みます。- 乱数は明示的に持つ:
RandomNumberGeneratorをインスタンス化して seed を保持し、画面に表示する。(中略)- 開始直後に猶予を: 最初の障害物が来るまで1.5秒ほど空ける。(中略)
返答の全文は「制作の記録」にある。
判断した2:会話で決めた仕様と比べる
会話のAIの予想は、半分当たって半分外れた。3案のどれにも壁を蹴って登るゲームはなく、「届かないはず」という予想は当たった。一方で、別のAIも避けようのない配置の問題には自分から気づいて「一番面倒な箇所」に挙げていたので、「この破綻には触れない」という予想は外れた。ただ、その解き方は、ジャンプの滞空時間を計算して障害物どうしの間隔に下限を設ける、というものだった。これは、「跳んで避ける」という遊び方を変えない前提での対策で、会話のときに私が取った「操作を変える」解き方とは違う。
案1の面影は、もう「ボタンで跳ぶ」くらいしか残っていない。案そのものは採らなかったが、添えられていた実装の指針には使えるものがあった。
- 入力を1つのアクションにまとめ、Space・クリック・タッチを全部割り当てる — こうしておくと、ブラウザに埋め込んだときスマホでも遊べる。連載の最後にブラウザで公開する予定なので、この指定は役に立つ
- 開始直後に1.5秒ほど猶予を置く — 何度もやり直すゲームで、リトライ直後に不意打ちで死ぬとテンポが悪い
- 乱数のseedを保持して画面に出す — 同じ盤面を再現できるので、バグを追うときの手がかりになる
- 解像度を640x360に固定する — 単色の四角だけで成立するので、絵を用意する回を後ろに回せる
どれも会話では出てこなかったものだ。案を採らなかったからといって、返答を丸ごと捨てなくてよかった。
決まった仕様
| 項目 | 内容 |
|---|---|
| 操作 | ボタン1つ。押している間は壁に張り付いて停止、離すと反対の壁へ跳ぶ |
| 張り付き | 時間制限あり。一定秒数で剥がれる |
| 画面 | プレイヤーは画面内で上下。壁と落下物が下へ流れ、登っているように見せる |
| 落下物 | 上から降る。丸がコイン、トゲトゲが障害物 |
| 終了条件 | トゲに触れる、または画面下に落ちる |
| スコア | 拾ったコインの数 |
| 難易度 | 出現間隔が徐々に狭くなる |
今回のハマりどころ
プロンプトに答えを書かない。 「壁を蹴って登るゲームを作りたい」と書けば、AIはその通りの仕様を返してくる。それでは、こちらの考えをなぞってもらうだけで終わってしまう。今回は制約だけを渡したので、自分の考えとは違う案が出てきて、比べることができた。
AIは「この設計をやめるべきか」とは言わない。 問題点は指摘してくれる。実際、避けようのない配置の件は、会話のAIも別のAIも自分から挙げてきた。ただ、その解き方はどちらも、それまでの遊び方を保ったままのものだった。遊び方ごと変えるという発想は、こちらから出さない限り出てこない。
比べたいなら、まっさらな状態で聞き直す。 長く話したあとのAIは、こちらの考えに引っ張られる。会話で答えにたどり着いたあとでも、答えを伏せて履歴を持たないAIに聞き直せば、別の見方が手に入る。
制作の記録
この回のやり取りの全文は、制作の記録(第2回)にある。AIが出した選択肢や、別のAIの返答も、すべてそのまま載せている。
次回やること
第3回は「Claude Code で動くところまで」。決まった仕様を渡して、シーンもスクリプトも作らせる。