エージェント型AIを使ってコードを書かずにゲーム開発した話
はじめに
非エンジニアの方でも、「ゲームを作ってみたい」「こんなアプリがあれば便利だ」とプログラミングの世界に興味を抱く方は多いはずです。
しかし、プログラミングの高い壁にぶつかり、挫折してしまう方も少なくありません。
本記事は、プログラミング経験が全くない方を対象としています。
記事を読むと、最新のAIを使えば専門知識がなくてもゲームを作れる仕組みを理解可能です。
今回は、「エージェント型AI」を用いて、プログラムを全く書かずにゲームを完成させた体験をお話します。
記事をきっかけに、ぜひAI開発の世界へ足を踏み入れてみてください。
話題の「エージェント型AI」とは?
最近よく耳にする「生成AI」は、大きく2種類に分けられます。
1つ目は、ChatGPTやGeminiのような「チャット型」です。文字で質問すると回答を返します。
2つ目は、今回紹介する「エージェント型」です。
エージェント型AIを使うと、人間が「こういうアプリを作って」と指示するだけで、AIが必要なプログラムを自動的に作成してくれます。
まるで、優秀なプログラマーを自分のアシスタントとして雇ったかのような感覚です。
今回は「AntigravityCLI」を使ってみた
強力なエージェント型AIの一つとして、今回は「AntigravityCLI(アンチグラビティ・シーエルアイ)」を使用しました。
AntigravityCLIとは、Googleが提供するAIプラットフォーム「Antigravity」の機能を、それぞれのパソコンから使えるようにしたツールです。
日本語(自然言語)で「こういう機能を作って」と頼むだけで、AntigravityCLIはプログラムを作り、指示した通りに動くかテストも行います。
一般的な開発では、複雑なプログラムを大量に記述します。
対してAntigravityCLIは、画面にやってほしいことを書くだけで開発を進めます。
「ゲームのルールは~~~」「オンライン対戦機能を作りたい」といったように、実装したい機能やアプリの大前提となる部分を伝えます。
人間が出す指示文を「プロンプト」と呼びます。
対話形式で設定を済ませると、自動的にゲームの仕組みが完成します。
プログラミング未経験でも、直感的にゲームの土台を構築可能です。
開発環境の準備
使用したツールを紹介します。
今回は全体の雰囲気を掴んでもらうことを目的としており、まずは「こんなツールを使うんだな」というイメージを持ってみてください。
記事の内容は、Windows11のPCで確認しました。
- AntigravityCLI
今回のメイン。このAIに指示を出して開発を進めます。
導入方法については、次節で詳しく説明します。
https://antigravity.google/product/antigravity-cli
- VScode(土台のソフト)
マイクロソフトが開発した無料のソフトです。
AntigravityCLIを動かすための土台として使います。
- https://code.visualstudio.com/へアクセスする
- 「Download for Windows」という青いボタンを押してファイルをダウンロードする
- ダウンロードしたファイルを開き、画面の指示に従って「次へ」を押し続ける
- 「インストール」を押して完了を待つ
AntigravityCLIのインストール方法
1. Windows11でコマンドプロンプト(黒い画面)を開き以下のコマンドを入力します。
curl -fsSL https://antigravity.google/cli/install.cmd -o install.cmd && install.cmd && del install.cmd
PC画面下の検索欄に「cmd」と入力し、検索結果からコマンドプロンプトを起動します。
起動した黒い画面に、上の「curl」から始まる英語の文字列を貼り付け、Enterキーを押します。

コマンドプロンプトの再起動が必要なため、一度ウィンドウの「×マーク」を押して閉じ、再度開きなおします。
2. Googleアカウントを認証します。
Antigravity CLIを実行するため、ログインするGoogleアカウントの認証方法を選択します。
コマンドプロンプトに「agy」と入力してEnterキーを押します。

文字を正しく入力すると、上の画像のようにロゴの画面に変化します。
「1. Google OAuth」を選択すると、URLが表示されます。
URLをコピーしてブラウザからアクセスします。
Googleアカウントへのログインが求められるため、使用するアカウントを選択してログインします。
ログインが成功すると次の画面へ遷移します。
画面中央のコードをコピーし、元のコマンドプロンプトに貼り付けます。

3. カラーテーマを選択します。
好みのテーマを選びます。

4. Googleによるデータ収集の可否を選択します。
選択による動作の違いはありません。

ゲームを作る
本題の開発作業に入ります。
専門知識は不要です。
AIにお願いするだけで完成に近づきます。
まずはパソコンの中に、ゲーム開発用の新しいフォルダを作成します。
次に、VScode(土台のソフト)を開き、作成したフォルダを読み込みます。
ctrl+Jキーを押して画面下部にターミナル(命令を入力する場所)を表示します。
AntigravityCLIを起動するため、コマンドプロンプトに「agy」と入力してEnterキーを押します。

↓起動後のターミナル

起動後、複数の設定項目が表示されます。
基本的に「Yes」を選択して進めます。
AIとの対話でゲームを組み立てる
いきなり開発ツールへ向かうのではなく、まずは作りたいゲームのルールをテキストにまとめます。
最初から完璧なルールを自力で書く必要はありません。
企画段階では、ChatGPTやGeminiなどの「チャット型AI」を相談相手として活用します。
相談の手順は以下の3ステップです。
- 「すごろく風のゲームを作りたい」と簡単なアイデアを投げる
- AIからの質問や提案に対して「対戦機能を追加して」など要望を返す
- 納得がいったら「対話内容を開発用の指示書(プロンプト)にまとめて」と依頼する
たとえ曖昧なアイデアでもAIは「勝利条件はどうしますか?」「サイコロの代わりにカードを使いますか?」と企画の足りない部分を質問で引き出してくれます。
「2進法のパズルの要素を足して」「オンライン対戦にして」と思い付いた要素をそのままチャットへ入力し、対話を重ねます。
人間はアイデアの断片を伝えるだけで、AIがゲームのルールや機能を矛盾なく整理します。
最終的にAIが綺麗にまとめて出力した文章が、AntigravityCLIへ入力するための「プロンプト(設計図)」となります。
プログラミングの知識だけでなく、ゲームを企画する専門的な知識すら不要です。
実際に使用したプロンプトはブログ下部の「実際に使用したプロンプト」に掲載しています。
整理したルールを「プロンプト」としてターミナルに書き込み、Enterキーを押します。
これにより、AntigravityCLIが自動的にプログラムを記述し始めます。


一度の指示で理想のゲームは完成しません。
実際に動かしてみて、エラーが出た箇所や変更したい部分についてAntigravityCLIに指示を繰り返し入力します。
「宝物庫を開ける処理でエラーが出たので直して」
「カードバトルのヒントの表示方法を変えて」
このような対話形式で修正を依頼し、微調整を進めます。
微調整の中では、AntigravityCLIだけでなくチャット型AIも活用しました。
完成!

実際にゲームを動かして更に修正したい部分があれば、再度AIに修正ポイントを伝えてあげれば完成に近づいていきます。
完成したゲームはこちら→https://arachnofair.onrender.com/
※外部に公開したい時はGitHubやRenderというサービスと連携する。
AI開発時代だからこそ求められる基礎スキル
今回はAntigravityCLIを使い、コードを全く書かずにゲームを開発した体験を紹介しました。
AIの進化により、アイデアさえあれば誰もが簡単にシステム開発を体験できる時代が到来しています。
一方で、AIを実務や本格的な開発で活かすには人間側の知識が不可欠です。
プログラミングの基礎スキルが必要となる理由は3点あります。
- AIが出力したコードのエラーや不具合(バグ)を修正するため
- システム全体の構造を理解してAIに正確な指示を出すため
- セキュリティやパフォーマンスなどの品質を管理するため
AIは高速でコードを生成します。
しかし、生成されたコードに潜在的なエラーが含まれるケースは頻繁に発生します。
システムが動かない場合に原因を特定し、AIに正しい修正指示を与える作業には基礎的なプログラミング知識が必要です。
また、ITの基盤や構造を理解していなければ、AIへ的確な命令(プロンプト)を出せません。
「通信の仕組み」「データベースの構成」といった前提知識があるからこそ、AIから望む回答を引き出せます。
AIを「中身のわからない魔法の箱」のまま扱う状態にはリスクが伴います。
AIを優秀なアシスタントとして使いこなし、成果物を正しく評価・修正するためのベーススキルが重要になります。
本格的にITスキルを身につけたい方へ
弊社では、IT研修を実施しています。
システム開発の基礎知識から実践的なプログラミング手法まで、現場で活きるスキルを体系的に学習するプログラムを提供しています。
今回の記事を通して「開発の楽しさを知った」「本格的にITスキルを身につけてエンジニアを目指したい」と感じた方は、ぜひ弊社の研修受講をご検討ください。
実際に使用したプロンプト
開発時にAIへ入力したテキスト(プロンプト)を公開します。
テキストをコピーしてAIに指示を出せば、似たようなゲームを作成可能です。
最初は簡単な指示から始め、AIと対話しながら詳細化を進めました。
プロンプトを作成する際の参考にしてください。
【初学者向け:概要を伝えるプロンプト】
【1. どんなゲームか(概要)】
蜘蛛の巣のような形をしたマップの上を移動して、中央にある「宝物庫」を開けるのが目的のゲームです。
ターン制ですが、待ち時間をなくすために「全員が同時にサイコロを振って、同時に移動先を決める」というルールを希望します。
マッチング機能も実装します。「誰でもいいから遊ぶ(オートマッチ)」と、「合言葉を決めて友達と遊ぶ(カスタムルーム)」の両方に対応させます。全員の準備ができたら、手動で「スタート」ボタンを押してゲームが始まるようにしてください。
【2. マップとマスの仕組み】
蜘蛛の巣マップは、中心(宝物庫)を0番として、その外側に4つの円(リング)がある全部で34マスの構造です。マップの描画にはSVGを使用します。
マスの種類は「アイテムがもらえるマス」「イベントが起きるマス」「トラップ」などがあり、ゲーム開始時にランダムに配置されます。
運が悪くてイベントやアイテムで「ハズレ」を引き続けた場合、プレイヤーが萎えないように、ハズレを引くたびに次回の成功確率が少しずつ上がる「救済システム(確率補正)」を入れてください。
【3. 宝物庫の解錠(2進法パズル)】
中央の宝物庫を開けるには、集めた「金糸」を使って2進法のパズルを解く必要があります。
ゲームごとに1〜15の「秘密の数字」が設定されます。プレイヤーは自分の「役職」や「持っているアイテム」によって、数字に補正がかかった【自分だけの目標値】を目指します(最大15まで)。
宝物庫に着いたら、金糸を消費して「8の位、4の位、2の位、1の位」のどれをONにするか選びます。合計値が目標値とピッタリ合えばクリア(勝利)です。
間違えたら、大ダメージを受けた上で外側に弾き飛ばされるペナルティを作ってください。
【4. プレイヤー同士のバトル】
移動した先で他のプレイヤーと同じマスに止まったら、カードを使ったバトルが発生します。
お互いに手札から数字のカード(100〜1000)を出していき、合計値が「2000」を超えてしまった方(バースト)が負け、ダメージを受けます。
相手が今までに出した数字の合計は正確にはわからず、「安全」「微熱」「過熱」「臨界点」みたいなふんわりしたヒントだけが表示されるようにして、ドキドキ感を出してください(ボードゲームの『ito』のようなイメージです)。
勝った人は、相手のアイテムを奪うか、相手の手札の強いカードを破壊するか選択肢を用意してください。
【5. CPU(AI)の動き】
人数が足りない時はコンピューター(CPU)を入れて遊ぶ機能を実装します。
CPUには少し賢い動きをさせます。例えば、宝物庫を開けられるアイテムが揃っていれば一直線に中央を目指したり、「石油王」という好戦的な役職の時は他のプレイヤーを追いかけたりするようにしてください。
バトル中も適当にカードを出すのではなく、2000を超えないように計算して、無理そうなら「パス」をするように賢く立ち回らせてください。
【上級者向け:Markdown形式のプロンプト】
※アーキテクチャや技術を指定し、より精密なシステムを構築させるための指示書です。今回の開発では、私がフォルダの構造やゲームルールをまとめるために作成しました。
# ArachnoFair開発設計書
本ドキュメントは、蜘蛛の巣状のフィールドを舞台とした数理探索・リソース管理・カードバトルゲーム「アラクノフェア」のシステムアーキテクチャ、データモデル、通信プロトコル、およびゲームロジックの実装指針を定義するものである。
—
## 1. プロジェクト概要
– **ゲームコンセプト**: 極座標系の蜘蛛の巣状マップを探索し、情報隠蔽された2進法パズルを解きながら、戦闘カードを用いたバースト戦を勝ち抜き、中央の「宝物庫」の解錠を目指すリアルタイム対戦ボードゲーム。
– **アーキテクチャモデル**: Node.js/Express/Socket.ioによるサーバー主導のゲームステート管理と、Vite/HTML5/SVGによるサイバーパンク調ダークネオンUIを用いたフロントエンド描画の密結合リアルタイム通信モデル。
– **マルチプレイモデル**: 誰とでも対戦できる「オートマッチング」および、任意の合言葉を指定して特定の仲間と遊べる「カスタムルーム(パスキーロビー)」の両方に対応。
– **ゲーム開始トリガー**: 全員準備完了時に自動開始するのではなく、待機ロビー内の条件を満たした時点で「対戦開始 (Start Game)」ボタンが活性化し、プレイヤーが手動で対戦を開始できるトリガーモデルを採用。—
## 2. 技術スタック
– **フロントエンド (Client)**:
– HTML5, CSS3 (Vanilla CSS, ダークテーマ・ネオン発光エフェクト)
– SVG (動的な極座標系マッピングによる蜘蛛の巣型トポロジーの描画)
– JavaScript (ES6+ Vanilla, Vite環境)
– Socket.io-client
– **バックエンド (Server)**:
– Node.js, Express (静的ファイル配信)
– Socket.io (WebSocket双方向接続によるマッチングおよびリアルタイム同期)
– **ゲームロジック (Shared/Core)**:
– `gameLogic.js` (純粋関数型に近いゲーム進行、AI意思決定、数理計算)—
## 3. ディレクトリ構造と主要ファイルの役割
ArachnoFair/
├── package.json # プロジェクト設定および共通依存関係
├── README.md # 開発設計書 (本ファイル)
├── manual.md # 操作指南書 (ユーザー向けルール)
├── backend/
│ ├── package.json # バックエンド依存関係 (express, socket.io)
│ ├── server.js # HTTP/WebSocketサーバー、ルーム管理、ゲーム進行解決
│ └── gameLogic.js # マップ接続定義、ダイス、探索、戦闘、2進法算出ロジック
└── frontend/
├── package.json # Viteフロントエンド設定
├── index.html # UIレイアウト (マップ、ステータス、戦闘、オペレーション)
├── vite.config.js # Vite設定
└── src/
├── main.js # Socket.ioクライアント、SVGマップ動的描画、DOMイベント制御
└── style.css # デザインシステム (サイバーパンク/ネオンエフェクト)—
## 4. ゲーム進行とフェーズ状態遷移
ゲームはルーム単位の**「全員同時進行ターン制 (Phase-based Synchronization)」**で制御される。
graph TD
INIT_AUTO[オートマッチング] –> MATCH_LOBBY[待機ロビー]
INIT_CUSTOM[合言葉入力] –> CUSTOM_LOBBY[カスタムルームロビー]MATCH_LOBBY –>|全員Ready & 人数>=2| AUTO_START_TRIGGER[対戦開始ボタン活性化]
CUSTOM_LOBBY –>|全員Ready| CUSTOM_START_TRIGGER[対戦開始ボタン活性化]AUTO_START_TRIGGER –>|プレイヤーがボタンクリック| START_GAME[新ゲームルーム生成 & 開始]
CUSTOM_START_TRIGGER –>|プレイヤーがボタンクリック| START_GAMESTART_GAME –> ROLL[ROLLフェーズ: 全員同時にダイスロール]
ROLL –> MOVE[MOVEフェーズ: 全員同時に移動先を決定]
MOVE –> RESOLVE[RESOLVEフェーズ: マス効果の解決]
RESOLVE –> COMBAT_CHECK{同じマスに複数人いるか?}
COMBAT_CHECK — Yes –> COMBAT[COMBATフェーズ: カードバトル]
COMBAT –> COMBAT_REWARD[COMBAT_REWARDフェーズ: 人間勝利時のみ報酬選択]
COMBAT_REWARD –> COMBAT_RESOLVE[戦闘後処理/敗者離脱]
COMBAT_CHECK — No –> TREASURY_CHECK{宝物庫に進入したプレイヤーがいるか?}
COMBAT_RESOLVE –> TREASURY_CHECK
TREASURY_CHECK — Yes –> TREASURY[TREASURYフェーズ: 解錠試行]
TREASURY_CHECK — No –> TURN_END[ターンカウンタ加算 -> 次ラウンドへ]
TREASURY –> GAME_OVER[GAME_OVERフェーズ: ゲーム終了]
TURN_END –> ROLL—
## 5. 詳細ゲームロジック設計
### ① 蜘蛛の巣マップ (極座標系トポロジー)
– 全34ノード(0〜33)で構成され、同心円状の4つのリング構造を持つ。
– **中心 (ノード 0)**: 宝物庫 (`TREASURY`)
– **リング 1 (ノード 31-33)**: 内周
– **リング 2 (ノード 25-30)**: 中内周
– **リング 3 (ノード 13-24)**: 中外周
– **リング 4 (ノード 1-12)**: 外周(スタート地点)
– 接続関係は `gameLogic.js` の `MAP_CONNECTIONS` にて静的に定義。
– マスのタイプ (`NODE_TYPES`) は、`ITEM`, `EVENT`, `MODIFIER`, `TRAP` が開始時にランダムにシャッフルされて配置される(ノード 0 のみ `TREASURY` 固定)。### ② 2進法パズル解錠ロジック
– ゲーム開始時に、1〜15 of範囲の秘密の**基礎値 $B$** が決定される。
– 各プレイヤーの固有の**目標値 $N$** は以下の計算式で求められる。
$$N = B (\text{基礎値}) + \text{役職補正} + \text{アイテム補正}$$
– **役職補正**: 石油王・魔女は $+3$
– **アイテム補正**: 指輪・アミュレット・王冠の3種が揃っていると $-2$(トレジャーハンターは $-3$)
– クランプ処理: $1 \le N \le 15$
– **進入条件**: 宝物庫(マス 0)へ着地した際、所持金糸数が $N$ のONビット数(例: $12 = 1100_2$ の場合、8と4の位がONなので必要数は 2)以上であること。不足時は HP $-300$ を受け、外周〜中周へ弾かれる。
– **解錠判定**: `8`, `4`, `2`, `1` のスロットへの金糸のON/OFF割り当ての合計値が $N$ と完全一致すること。一致すれば即勝利。不一致時は HP $-600$ のダメージを受け、投入金糸は消失、内周(31〜33)へ弾かれる。### ③ 累積バースト戦闘 (Combat)
– お互いの累積値を `0` から開始し、手札からカード(100〜1000の100の倍数)をプレイ。
– 累積値が **`2000` を超えた(`2001` 以上になった)瞬間にバースト**し、即敗北(HP $-500$ )。
– **情報の曖昧化 (ito風)**:
– 累積 0〜800: 「安全」
– 累積 900〜1500: 「微熱」
– 累積 1600〜2000: 「過熱」
– 累積 2001以上: 「臨界点 (バースト)」
– **人間勝利時の報酬選択肢**:
– `loot`: 相手の装備アイテムをランダムに1つ略奪(トレジャーハンターはさらに戦闘カードを1枚補充)。装備なし時はデフォルト報酬(金糸1本強奪、金糸なし時はHP 300吸収)を処理。
– `destroy`: 相手の手札(戦闘カード)の最大値から2枚までを破壊。手札なし時はデフォルト報酬を処理。### ④ 確率の罠対策 (擬似乱数ドロー補正)
– プレイヤーがイベントマスやアイテムマスで探索に失敗する(ハズレを引く)たびに、プレイヤーオブジェクトの `missCount` がインクリメントされる。
– 次回のドロー成功確率は、基本確率に `missCount * 0.2` (イベント) または `missCount * 0.15` (アイテム) を加算して算出され、偏りによるストレスを緩和する。成功時に `missCount` は `0` にリセットされる。—
## 6. 通信プロトコル仕様 (WebSocket Event API)
### サーバー受信イベント (Client -> Server)
#### 【オートマッチング用】
– `queue:join`: プレイヤー登録とマッチングロビーへの参加要求。
– Payload: `{ name: string, role: string }`
– `queue:ready`: ロビー内での準備完了状態の切り替え要求。
– `queue:leave`: ロビーからの退出。
– `queue:start-match`: 待機プレイヤーが2名以上かつ全員準備完了時の対戦開始要求。
– `queue:start-immediate`: 即時ゲーム開始要求 (CPUによる穴埋め)。#### 【カスタムルーム用】
– `custom-room:join`: 合言葉を用いた特定ルームへの作成・参加要求。
– Payload: `{ roomName: string, playerName: string, role: string }`
– `custom-room:ready`: カスタムルーム内での準備完了状態の切り替え。
– Payload: `{ roomName: string, ready: boolean }`
– `custom-room:leave`: カスタムルームからの離脱要求。
– Payload: `{ roomName: string }`
– `custom-room:start-match`: カスタムルーム内の全員が準備完了時の対戦開始要求。
– Payload: `{ roomName: string }`#### 【ゲームプレイ用】
– `game:join`: マッチング成功後のゲームルームへの接続要求。
– Payload: `{ roomId: string }`
– `game:roll`: ダイスロールの要求。
– `game:move`: 移動先マスの確定要求。
– Payload: `{ node: number }`
– `combat:play`: 戦闘時のカードプレイまたはパス要求.
– Payload: `{ cardValue: number }` (パス時は 0)
– `combat:flee`: 戦闘からの逃走要求。
– `reward:claim`: 戦闘勝利時の報酬クレーム要求(人間専用)。
– Payload: `{ choice: ‘loot’ | ‘destroy’ }`
– `treasury:unlock`: 宝物庫の解錠試行。
– Payload: `{ slots: { ‘8’: boolean, ‘4’: boolean, ‘2’: boolean, ‘1’: boolean } }`
– `treasury:cancel`: 宝物庫からの引き返し(内周へ移動)。### クライアント受信イベント (Server -> Client)
#### 【ロビー・マッチング】
– `queue:update`: 通常ロビー内の参加人数および全参加者の準備ステータス更新。
– Payload: `{ count: number, players: Array<{ name: string, role: string, ready: boolean }> }`
– `custom-room:update`: カスタムルーム内の参加メンバーおよび各々の準備ステータス更新。
– Payload: `{ roomName: string, players: Array<{ name: string, role: string, ready: boolean }> }`
– `custom-room:error`: カスタムルーム処理において満員エラーなどが発生した際の通知。
– Payload: `{ message: string }`
– `match:success`: マッチング成功およびアサイン情報の通知。
– Payload: `{ roomId: string, playerId: number }`#### 【ゲームプレイ】
– `game:state`: 同期用ゲーム状態のブロードキャスト。
– Payload: `gameState` オブジェクト(`players`, `phase`, `turnCount`, `logs`, `combatState`, `nodeTypes`等を含む)—
## 7. AI (CPU) の意思決定アルゴリズム
### ① 移動意思決定 (Movement Heuristics)
– **最優先**: 宝物庫(マス 0)が到達可能かつ金糸を2本以上所持している場合、即座に 0 を選択。
– **役職特性 (石油王)**: 攻撃的な強奪を行うため、到達可能な選択肢に他のプレイヤーが滞在しているマスがあれば最優先でそこに向かう。
– **イベント/アイテム優先**: それ以外は `EVENT` マス、次いで `ITEM` マスを優先的に選別し、残りはランダムで移動。### ② 戦闘意思決定 (Combat Heuristics)
– 手札から `累積値 + カード値 <= 2000` を満たす「安全なカード」を抽出。
– 安全なカードが存在しない場合は、バースト回避のため自動的に「パス (0)」を選択。
– **性格補正 (トレジャーハンター/魔女)**: 攻撃指針AIとして、抽出された安全なカード群の中から「最大値」のカードをプレイ(臨界点ギリギリを狙う)。
– **通常AI (冒険家/エンジニア/石油王)**: 相手の累積値を上回るために必要な最小のカードを選択。上回るのが不可能な場合は、手札内の「最小値」のカードを消費して温存に努める。