はじめに

概要

Godotで店舗経営シミュレーションゲームを開発しています。 最終目標としてSteamで販売するところまでやってみたいと思っています。 ゲーム開発の経緯や開発環境については第1回の記事を参照ください。

Godotで開発しているゲームをGitHubで管理する:店舗経営シミュレーションゲーム開発日記1

前回やったこと

前回はGodotから開くテキストエディタとしてVSCodeを設定しました。

GodotのテキストエディタとしてVSCodeを設定する:店舗経営シミュレーションゲーム開発日記2

今回やること

今回はVSCodeでOpenAIのコーディングエージェントである「Codex」を動かせるように設定して、 実際にゲームを作っていってもらおうと思います。

ChatGPTとCodexを使ってみる

これまで生成AIはGoogleのGeminiを使っていたのですが、 他のAIも使ってみたいと思って、今回はOpenAIのChatGPT/Codexを使ってみます。 モデルはGPT 5.6 Solです。 CodexをVSCodeで動かして、プロンプトはChatGPTに考えてもらいます。

VSCodeでCodexを動かす

VSCodeの拡張機能にOpenAI公式の「Codex」があります。 これをインストールしてChatGPTのアカウントでログインします。 私の環境だと何も操作しなくても自動的にログインされました。

Codexが使える状態になるとVSCode右側のCODEXパネルでやりとりできるようになります。

ChatGPTにゲーム開発の流れとCodexへのプロンプトを考えてもらう

ChatGPTに「Codexでゲーム作りたい」と相談したら、ゲーム作りの流れを説明してくれて、 さらにCodexへのプロンプトをどんどん作ってくれました。 たとえば、まずはCodexに開発環境を調査してもらうとよいとのことで下記のようなプロンプトが提供されました。

このGodotプロジェクトを確認してください。

経営シミュレーションゲームを開発します。
まだ実装はしないでください。

まず、
- 現在のディレクトリ構成
- project.godotの設定
- Godotのバージョン
- 現在存在するsceneとscript
を確認し、プロジェクトの現状を説明してください。

まだGodotのプロジェクトは作ったばかりなのでほぼ空っぽでしたが、 Codexもちゃんと「空っぽのプロジェクトですね」ということを理解してくれました。

その後はChatGPTが「Codexにゲームシステムの全体構成を考えてもらいましょう」とか、 「まずは小さく実装してもらいましょう」とかどんどん進めてくれます。 私はゲームのアイデアを出すだけでゲーム自体はChatGPTとCodexが全部作ってくれる勢いです。 さすがに勉強も兼ねているので全部任せるだけでなくちゃんと構成やコードもレビューしようとは思います。

最初の実装

ChatGPTが「まずは基本的な機能を実装してみましょう」と教えてくれて、 日付の表示と現在の所持金の表示の機能をCodexに実装してもらうことになりました。 経営シミュレーションなので、 ゲームの進行としては「一日が始まって商品を買ったり売ったりして所持金が増減して一日が終わる」が大枠になります。 その大枠部分をまずはCodexに作ってもらいます。

CodexのモデルはGPT 5.6 Solですが、さらに「軽」「中」「高」「極高」「Ultra」からモードを選べます。 ChatGPTによると普段のやりとりは「軽」でよくて、実装時も「中」とかでよいらしいです。 大規模な実装は「高」とか「極高」とかそれ以上を選ぶことになるとのことです。

GodotはGUIエディタがありますが、コードでUIも作成できるのでAIとの相性がよいらしいです。 実際に下記のようにCodexが実装してくれました。

[node name="TitleLabel" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_font_sizes/font_size = 24
text = "店舗経営シミュレーション"
horizontal_alignment = 1

Godotエディタで表示を確認するとちゃんとUIができあがっています。

実装内容

今回は主に6つのファイルを作成しました。

  • AGENTS.md:Codexに知ってほしい開発ガイドライン
  • game/game_state.gd:ゲームの状態(日数、所持金など)を管理するスクリプト
  • game/game_session.gd:ゲームシステムとUIを仲介するスクリプト
    • UIからの操作で直接データへアクセスせずにゲームシステムが中央で管理する
  • scenes/main.tscn:本ゲームのメインシーン
  • tools/test_godot.ps1:CodexからGodotの実行テストするためのスクリプト
  • ui/main_ui.gd:UI操作を管理するスクリプト

Codexの自動テスト

Codexが自分で書いたコードが正常に実行できるかテストしてくれました。 ただし、ここでGodotのPathが通っておらずコマンドで実行できない(Codexが実行できない)ことが分かって、 Windowsの設定でPathを通したりなどしました。 ChatGPT/Codexが原因特定と対処方法の提案までやってくれて大感謝です。

Godotエディタで動作テスト

Codexの自動テストが完了したら人間(私)もGodotエディタで実際に動かして問題ないか確認しました。 ゲームプレイを開始すると「日数」と「所持金」、「日付を進めるボタン」が表示されます。 ボタンを押すと日数が進んでいきます。 問題なく動いていそうです。

コードレビュー

動作は問題なさそうなのでコードもレビューします。 変更内容もCodexに要約してもらって、さらにgit diffの変更差分も確認してもらって、 おかしいところがないかもあらかじめCodexに調べてもらいました。

私は今回GitHubのデスクトップアプリを使っているので、 GUIアプリ上で変更差分を確認できます。 これでコードレビューして問題なさそうなことを確認しました。 分からないところもChatGPT/Codexに質問できるので嬉しいですね。

AGENTS.md

今回のゲーム開発において、開発環境やテスト方法などをあらかじめCodexに知っておいてもらったほうがよいということで、 AGENTS.mdを作成してもらいました。 AGENTS.mdはプロンプトとは関係なく自動でCodexが読み込んでくれるらしいです。 「勝手にgit commitしないで」とか「テストはこのコマンドを実行して結果を確認して」とか書いています。 開発が進んでいくにつれてAGENTS.mdも更新されていくと思います。

# 開発ガイドライン

## 開発環境

- Godot 4.6.3とGDScriptを使用する。
- 開発環境はWindowsとPowerShellとする。
- WSL2を前提にしない。

## 設計と変更方針

- UIコードとゲームロジックを分離する。
- 現在のプロジェクト規模に対して不要な抽象化を避ける。
- 既存のコードや設計を変更する前に、影響を受けるファイルと依存する動作を確認する。
- ユーザーから明示的に依頼されるまで`git commit`を実行しない。

## テスト

Godot関連ファイルを変更したら、適用できない明確な理由がない限り、次のコマンドを実行する。

$ powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\tools\test_godot.ps1

- コマンドの終了コードが0であることを確認する。
- headlessテストの成功で確認できるのはプロジェクトの読み込みまでとし、UIやゲームプレイが正しいとは判断しない。
- UIや操作を変更した場合は、ユーザーにGodot Editorでの手動確認を依頼する。

ChatGPT/Codexの感想

ChatGPTを久しぶりに使ってみての感想としては「説明が丁寧で分かりやすい」と感じています。 Geminiより説明が多すぎず少なすぎずで、すっきりしている気がします。 あと単純に説明の仕方も上手です。

Codexは(というかAIエージェントは)人生で初めて使っているのですが、 めちゃくちゃ便利でもっと早く使えばよかったなと思っています。 コード書いてくれてデバッグも自動でやってくれてとてもありがたいです。

今はChatGPTのチャットでゲームのアイデアを一緒に考えたり、 Codexへのプロンプトを考えてもらったりしています。 CodexはVSCodeで動かしていて、 自分(私)でもコード編集やコードの確認もできて開発環境としても良い気がしています。

おわりに

今回はChatGPT/Codexを使ってゲーム開発する環境を整えて、 実際にゲームを作り始めるところまで進めました。 Codexが便利すぎるので使いこなせるように引き続き進めていきたいです。 「AIエージェントが勝手に公開したくない情報を出してしまう」みたいなトラブルも聞いた気がするので、 そのあたりは気をつけたいと思います(git commitは自分でやるとか)。

あとはこのブログを書くことで、生成AIにアイデア出しや実装を任せていても、 自分で文章でまとめる時に一旦自分の頭で考えることができて良い気がします。 全部AIに任せて自分は何も理解していないということがないように気をつけたいです。 それでは、また次回もよろしくお願いします。