INDIE INDEX

Claude Code に頼んで、最初のゲームを1本動かすまで

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

この記録では、Claude Code に日本語の文で2回頼み、四角を左右キーで動かして弾をよけ、弾に当たると止まって秒数を表示するところまで動きました。GDScript のコードはすべて Claude Code が書きました。

このページの目次
  1. 全体の流れ(決める→頼む→動かす→直す→書き出す→公開する)
  2. 頼む前に決めること
  3. Claude Code に頼んで動かす
  4. 動かなかったところと直し方
  5. ブラウザ向けに書き出す
  6. 公開する
  7. ストアで AI の使用を申告する
  8. 情報源

全体の流れ(決める→頼む→動かす→直す→書き出す→公開する)

Claude Code に日本語で頼んでゲームを1本動かすまでは、次の順で進みます。

  1. 決める — 使うエンジンと、作るゲームの中身を先に決める。
  2. 頼む — 作ってほしいものを日本語の文で伝える。
  3. 動かす — 出てきたコードを実際に動かし、結果を確かめる。
  4. 直す — 動かなかったところがあれば、実際に出た表示から原因を探して直す。
  5. 書き出す — ブラウザで遊べる形に書き出す。
  6. 公開する — 配信先にアップロードします。
  7. ストアで申告する — Steam に出す場合は、生成AIを使ったかどうかを申告します。

この記録では、Godot Engine 4.7.2(公式配布の zip 版)と Claude Code の組み合わせで、2〜5までを実際に試しました。GDScript のコードは、すべて Claude Code が書き、こちらは日本語の文で頼んだだけでした。四角を左右キーで動かして弾をよけ、弾に当たると止まって秒数が出るところまで、日本語で頼んだ文とその結果だけで進みました。プログラミングの言語を先に覚える必要があるかという問いには、この記録の範囲では「先に覚えなくても、頼んだ文と動かした結果を見ながら進められた」というのが実際に起きたことです。

頼む前に決めること

頼む前に、次の3つを決めておきます。

使うエンジンは、この記録では Godot です。公式サイトから無料で配布されている zip 版を、あらかじめ展開しておきます。バージョンはコマンドラインの --version で分かります。

Godot_v4.7.2-stable_win64_console.exe --version
4.7.2.stable.official.ed1daf0bf

作るゲームの中身は、この記録では「画面の下にいる四角を左右キーで動かし、上から落ちてくる弾をよける」ゲームにしました。書き出す先がブラウザの場合、Godot の書き出しのテンプレートのうち Web 向けのものが、あらかじめ導入されている必要があります(Godot が書き出せる形式)。

頼む相手は Claude Code です。ターミナル・IDE・Slack・ウェブなど複数の場所から使え、この記録ではターミナル(コマンドライン)から、空のフォルダを指定して起動しました。

Claude Code に頼んで動かす

最初に、次の文をそのまま頼みました。

Godot 4 で新しいプロジェクトを作って。画面の下にいる四角を左右キーで動かして、
上から落ちてくる弾をよけるゲームにして。

この頼みに対して、project.godotmain.tscnmain.gdplayer.gdbullet.tscnbullet.gd の6つのファイルができました。main.gd は関数2つ(_ready_on_spawn_timer_timeout)で13行、player.gd は関数1つ(_process)で12行、bullet.gd は関数1つ(_process)で8行でした。プレイヤーは左右キー(ui_leftui_right)で動く四角(Area2D)、弾はタイマーで一定間隔ごとに上から降ってくる小さな四角(Area2D)です。

動かした結果を確かめるため、画面を表示せずに一定のフレーム数だけ進めて終了するコマンドを使いました。

Godot_v4.7.2-stable_win64_console.exe --headless --path <プロジェクト> --quit-after 60

結果は、エラーなく60フレーム動きました。標準出力に出たのはエンジンの版だけで、シーンやスクリプトの読み込みで止まるものはありませんでした(期待どおり)。

続けて、次の文を頼みました。

弾に当たったら『ゲームオーバー』と出して止めて。よけ続けた秒数を画面に出して。

この頼みに対して、player.gdhit_by_bullet という信号(signal)と、弾との重なりを受け取る _on_area_entered という関数が足されました(3関数・30行)。main.gd には、経過した秒数を数える変数と、それを表示する TimeLabel、ゲームオーバーになったときに表示する GameOverLabel、弾に当たったときに呼ばれる _on_player_hit という関数が足されました(4関数・36行)。

この段の結果は「動かなかったところと直し方」に続きます。直したあとに --headless --quit-after 1800(30秒ぶん)を実行すると、標準出力に次のように出ました。

GAME_OVER elapsed=12.13

弾がプレイヤーに重なるとゲームオーバーの処理が動き、よけ続けた秒数(この回は12.13秒)が変数に残りました。もう一度同じコマンドを実行すると GAME_OVER elapsed=7.93 で、弾の生成位置は毎回ランダムなので、当たるまでの秒数はそのたびに変わります。

動いている画面と、弾に当たったあとの画面は次のとおりです。

四角を左右キーで動かし、上から落ちてくる弾をよける画面。経過秒数が左上に出ている

弾に当たったあとの画面。中央に「ゲームオーバー」とよけ続けた秒数が出ている

動かなかったところと直し方

「弾に当たったらゲームオーバーにする」を書き直したあと、--headless --path <プロジェクト> --quit-after 1800(30秒ぶん)で動かしても、ゲームオーバーが1度も起きませんでした。Claude Code は、弾の生成位置とプレイヤーの位置を毎回標準出力に出すコードを main.gd に足して、もう一度動かしました。出力は次のとおりです。

SPAWN x=35.6 player_x=44.0
SPAWN x=26.6 player_x=44.0
SPAWN x=32.8 player_x=44.0
...
SPAWN x=40.1 player_x=44.0

弾もプレイヤーも、画面の左上の狭い範囲(x が20〜44付近)に閉じ込まっていました。原因は、プレイヤーと弾の可動域を get_viewport_rect().size から計算していたところ、--headless ではこの値が project.godot に書いた画面の大きさ(幅480)ではなく、64前後の小さな値を返していたことでした。

Claude Code は、get_viewport_rect().size を使っていた3か所(player.gdbullet.gdmain.gd)を、ProjectSettings.get_setting("display/window/size/viewport_width", 480)"display/window/size/viewport_height" に置き換えました。置き換えたあとに同じコマンド(--headless --quit-after 1800)を実行すると、「Claude Code に頼んで動かす」に書いたとおり GAME_OVER elapsed=12.13 が出て、ゲームオーバーの処理が動くようになりました。

ブラウザ向けに書き出す

Godot の Web 向け書き出しは、レンダリング方式を「Compatibility」にする必要があります。この記録では project.godot に最初からこの設定を書いていたので、あらためて変える作業はありませんでした。

書き出しには export_presets.cfg に、プラットフォームWeb にしたプリセットが要ります。このファイルを新しく書き、コマンドラインから次のコマンドで書き出しました。

Godot_v4.7.2-stable_win64_console.exe --headless --path <プロジェクト> --export-release "Web" <出力先>/index.html

結果はエラーなく完了し、出力先に次の9個のファイルができました。

  • index.html
  • index.js
  • index.wasm
  • index.pck
  • index.png
  • index.icon.png
  • index.apple-touch-icon.png
  • index.audio.worklet.js
  • index.audio.position.worklet.js

ローカルの http サーバーでこの index.html を開くと、コンソールには Godot Engine の版とレンダラーの表示だけが出て、エラーは出ませんでした。

公開する

公開は itch.io のアカウントが要る作業なので、この記録では試していません。ここには、itch.io の公式の文書に書かれている手順だけを書きます。

itch.io に HTML5 のゲームを出す場合、ファイルを ZIP 形式でまとめ、その ZIP の中に index.html という名前のファイルを含める必要があります。ファイル名は大文字と小文字が区別され、ファイルの参照は相対パスにする必要があります。ZIP に入れられるファイル数は1,000個まで、道を含めたファイル名は240文字まで、展開したあとの中身の合計は500MBまで、1ファイルの容量は200MBまでという上限があります。

アップロードは、「New Game」から始め、「Kind Of Game」の一覧で「HTML Game」を選び、ZIP ファイル(または単一の HTML ファイル)をアップロードします。アップロードしたあとは「Embed options」で、ページの中に埋め込んで表示するか全画面で起動するか、クリックしてから始める形にするかどうか、全画面ボタンを出すかどうかといった設定を選べます。外部の素材を読み込む場合は HTTPS の接続だけに対応しており、ZIP 以外の形式(RAR・tar.gz・7z)には対応していません。

ストアで AI の使用を申告する

Steam に出す場合、審査に出す前にコンテンツアンケートに答える必要があります。このアンケートの生成AIの部分で何を書くかは、Steam の対応OSとコンテンツ申告にまとめています。申告は Pre-Generated(開発中にAIの助けを借りて作り、ゲームに同梱する内容)と Live-Generated(ゲームが動いているあいだにAIの助けを借りて作る内容)の2つに分かれ、後者では違法な内容を生成させないための歯止めの説明が追加で求められます。

情報源

Claude Code のほかのページ

このページに出た言葉