
【ゲーム音痴な非エンジニアがAIゲームを作るという生き地獄】1ヶ月半Cursorを使い倒してチーム開発し展示した話
こんにちは!yasunaです!
生成AIなんでも展示会vol.2の出展も終わり、ほっとしているのもつかの間、同じチームのAITuberエンジニアのサルドラさんが技術記事を公開していました!
なんかお前も書けよって呼ばれた気がするので私の視点でレスポンスするぞ!
サルドラさんの技術記事はこちら👇️
以下は、生成AIなんでも展示会vol.2にて展示したAIシヴィライゼーションゲーム「Algopolis(アルゴポリス)」のデモ動画です。
Algopolis(アルゴポリス)は、人間が滅んだあとの日本で、個性豊かなAIキャラクターたちが自身の電力を管理しながら発電所の開発や運営を行う戦略シミュレーションゲーム、AIシヴィライゼーションです。
ゲームはすべてLLMが行動選択して進んでいくので、人間の我々は神の視点から眺めてAIの日常を楽しみましょう。
これを作るのに1ヶ月半、なんとか走りきってよかったという気持ちが大きいものの、振り返るととても無謀でえげつないことになっていたなと感じました。
書いてて途中で本当に情けなくなって開発期間中は泣くことはなかったんですが、今書きながら思い出して精神崩壊して泣いちゃってました(笑)
私から伝えたいことは一つだけです。
もしこれからAIを使ってプログラミングを始めてみたい非エンジニアがいたら、これから私が体験する数多くの過ちを二度と繰り返さないでほしいです。
では、生き地獄へレッツゴー!
の、まえに簡単にチームのスペックを紹介
- サルドラ(@sald_ra)
AITuberエンジニア。タスクを抱えすぎてちゃんと稼働したのは最後の5日くらい。リードエンジニア的な存在。
- ハヤカワ五味(@hayakawagomi)
企業の生成AIがんばるぞ担当。ゲームシステムとグラフィックを担当。
- yasuna(@yasun_ai) ※わたし
マーケター。趣味で本見ながらAITuber作ってるくらいのレベル感。
仕事柄上司がエンジニアだったりして技術の話は好きだがコーディングはわりと苦手。平日22時以降しか稼働できない2児のママ。なぜか今回の主コーダー。
地獄へようこそ(9月前半)
なぜ非エンジニアの私がハヤカワ五味さんとサルドラさんとゲームづくりをすることになったんか話は以下の記事に書いているので簡単に言うと、
3人でPodcastを収録したときになんか盛り上がっちゃって1ヶ月半後の生成AIなんでも展示会で「人間が滅んだあとAIだけが生きる世界」っていうゲームを作っちゃおうとなりました。なにそれ?w
前提私はゲームが全くできないし今までまともにクリアしたのはポケモン金銀くらいの凡人なので、ゲームを作るなんてことは全く想像できませんでした。
私はプログラミング歴も浅く自分の身の程が分かっているのでこれはさすがにヤバイと思って逃げようと思いましたが、「大丈夫できるできるできる~~~!助けるから!!!」って感じで不安ながらもみんなでゲーム作りをすることになりました。マジでここが甘かった。
ゲームマジわからん(9月後半)
やっぱりゲームやったことない人がゲーム作ろうとすること自体無理があってゲームシステムどうしようという話に全くついていけないんですよね(当たり前)

ゲームシステムが決まるまで脳死して二人の高速壁打ちにひたすらに壁になって耳を傾けていました。
五味ちゃんはもともとゲームプランナーになりたかったけど起業したから諦めたっていうくらい詳しいし、サルドラさんはオタクだしでそれはそれはすごいやり取りでした(語彙力なし)
そして無事にゲームシステムが決まったところで、次は主に実装する私がゲームシステムを理解できるまで説明してもらうという謎の時間を設定してもらいました。なんでここまでして私がチームメンバーになっているんだ・・・?という疑問が浮かびながらも二人の優しさによって半分くらいはなんとなーく理解
言われるがままCursorを使いはじめる(10月前半)
はじめてリポジトリ作って実装の方針を決めたときはサルドラさんと一緒に1時間くらいかけてやったので、ああ、これなら見たことある形だしAIに聞きながらやったらなんとか作れるかも?と思いました。ここも甘かった。
ゲームとしてギリギリ成立する超ミニマムのバックエンドができた風なので、これからフロントつけて遊んで玄人を待ちます https://t.co/cSDa74UYjz
— yasuna (@yasun_ai) October 5, 2024
実装が始まったのはいいものの、私が稼働できるのが子ども✕2を寝かしつけてから22時以降で結構フラフラになっている状態からCursor開いて進めて…みたいな感じなので基本集中力がありません(草)
頼りにしていたサルドラさんがネンちゃん大規模アプデまわりでかなり厳しい状態になっていたので、少しでもなんか書いてコミットしておかなきゃ…みたいな気持ちでいました。
ゲームシステムを投げてCursorに聞けばなんか答えてくれて、コードを書いてくれるのでひたすらにApplyを繰り返してなんとなくやった気持ちになっていました。
AIが書いたコードをただひたすら右から左へ移していくだけだったので、自分でしっかりコードを読んで理解するという時間を取っていませんでした。
バックエンドは脳死コミットでしたが、UIはこの時点でだいたい出来上がっていました。Pygame初見に優しすぎる。




なんかヤバそうなのでCodeRabbitでなんとかしようとする(10月後半)
サルドラさんに「これってどういう意味で書いてますか?」って聞かれても自分が書いたはずのコードなのに全く答えられなくて普通に死にそうでした。
エンジニアだったら自分の担当箇所について聞かれてるだけなので普通の会話になると思うんですが、私はずっと自分がなにやってるか理解できていなかった、、、ということを包み隠さずもっと早くサルドラさんに伝えるべきだった。
「こいつ何も分かってなくないか?」とそんなことは言いませんが、私が理解できていないまま実装していることがやっとバレました。
私はここまでなぜコードを読まず理解しようとしなかったかというとある理由があります。
AIが書いたコードを読まなくても動けばいいじゃん
って考えていたからなんですね。
実際にAIで増やしたコードがあれば動かし、動かなかったらエラーをAIに入れて動くまで回す。動いたら次に行く、みたいなことをやっていた訳です。
そうするとどうなるかというと、ひとつのファイルに大量にコードが増えていくんですね…
気がつかないにうちにどんどん人間が読めない冗長なスパゲッティコードを量産していました。エンジニアだったらもうこの時点で命ないです。
それにやっと気がついたサルドラさんでしたが、とにかく時間が取れないのでAIにコードレビューさせてなんとかしようと考えてプルリクをチェックしてくれるCodeRabbitを導入しました!でもこれも罠だった…
ちなみにCodeRabbitはプルリクに参加できるAIレビューワーみたいな存在でで使い方によってはとても便利な子です!!!
サルドラさんのすすめでCodeRabbitをAIゲームのリポジトリに入れたんだけど、AIレビューめちゃくちゃ来てビビってるのが今です
— yasuna (@yasun_ai) October 11, 2024
開発者しか分からないAIの凄みがある…
でもLGTMももらえててちょっと嬉しい
チーム開発未経験だからプルリクめちゃくちゃでAIレビュワーうさぎが大暴走
GitとGitHubは使えていたのですが、いつも個人で誰も見ないコードを書いていただけだったのでブランチ戦略も何も知りません。
ブランチ戦略がないと何がおこるのかというと、一つのブランチにいっぱい実装しまくってプルリクがめちゃくちゃになるという現象が起こります。
このせいで永遠と増えるプルリクのコミットに対してAIレビュワーうさぎからシバキちらかされます🐰
うさぎ氏、仕事しすぎ🫠🫠🫠 https://t.co/58pLZ7tPOw pic.twitter.com/mZ1a2X1Q8h
— yasuna (@yasun_ai) October 11, 2024
この時点でだいぶ心が折れていたので、最初はうさぎ氏の指摘を読もうとしていましたが、次第に何も見なくなりました、、、ごめんよ、、、
突然yasunaに確変が起こる(11月3日)
うわ!!!AIに書いてもらったけど意味不明だったコードが突然読めるようになったかもしれない!!!
— yasuna (@yasun_ai) November 2, 2024
手も足も出なかったのにAIに相談しながら自分でコード直せてる気がする!!!確変が!!!起きたかもしれない!!!
今この瞬間だけ手が空いたので目に見える活動してるだけ説!
— yasuna (@yasun_ai) November 4, 2024
展示会のAIゲームもサルドラ氏がゴリゴリ進捗だしてデバックリファクタ祭りに入ったので、私は心臓が助かりました(ありがとう) https://t.co/G5uX6Mxlb3
AIうさぎも使いこなせず、エンドレス絶望生き地獄の中で突然何が起こったのかというと、サルドラさんの手が一瞬だけ空いてペアプロの時間がやっと取れるようになったんですね。ずっと待っていたよ…
結局人間が人間のために時間取ってお世話しなきゃいけないという悲しい事実が作られてしまったのですが、私が1ヶ月AIに問い続けただけでは到底解決できなかったことがたった2時間ほどのペアプロで嘘のように解決してしまいます。そう、ここからがはじまりです。
私のスパゲッティコードを見たサルドラさんから何を言われたのかというと、大きく分けて2つです。
クリーンアーキテクチャ

みなさんこの図を見たことがありますか?エンジニアなら見たことあるかもしれませんが、私は初めてでした。
サルドラさんから聞いたことを覚えているままに説明すると、
真ん中のエンティティは誰とも関わらない完全に独立したもの、例えば今回のAIゲームだったら「モデル」の部分にあたるキャラクター、マップ、発電所、リソース、みたいな登場人物の説明だけを書く部分を作ります。
そして、その登場人物をどんな風に使いたいのかというユースケース層が次に来ます。
そして、それをどう動かすのかとうコントローラー層、そしてUI層というように役割をきちんと分けて書くといいよという話を30分くらい熱く説明してくれました。
その説明を一通り聞いてから自分のコードを見てみると、なぜか今まで読めなかったコードが分かるようになってくるんですね。
ああ、ここはエンティティのはずなのに振る舞いまで書いてあるからこっちに移動しよう、とかキャラクターのはずなのにUIの実装まで書かれていておかしいよね、ということが自分でも理解できるようになってきました。
恐るべしクリーンアーキテクチャの威力、じゃないや、サルドラさんのペアプロ力。
もう一つ私が劇的に変われたことがありました。
ブランチ戦略
さきほどもプルリクでAIレビュワーうさぎが大暴走した話をお伝えしましたが、コードを管理するときにブランチという概念があります。
ブランチは色んな戦略があってプロジェクトによって採用されるスタイルはさまざま、とのことだったのですが、サルドラさんから教えてもらったスタイルが今の大炎上の状態に合っていたのでその説明をちょっとすると、
結論、ブランチに一個でも新機能がきたらそれがたとえ1コミットであったとしても、できた時点でプルリクを出してすぐmainにマージする
って感じでした。
これは議論の余地ありありだと思うのですが、少なからず私は一つのブランチにあれもこれもと追加しまくって今何を直しているのか見失ってパニクっていたので、これが有効そうでした。
これがまともにできるようになってから本当にウサギが大暴走することが無くちゃんとしたコードレビューを実装に反映できるようになりました。

とはいえ納期まであと10日…
最後の最後でやっとまともに開発できるようになったわけなんですが、この時点で展示会まであと10日ほどでした。

こんなカオスなんか展示会の準備を進めてくれる女神五味ちゃん…


稼働量が増えたサルドラ氏から「まだ実装できてないところ、実装してここ詰まってパニックになったところを教えてほしい」と言われたので集めてみたところ・・・

コード読めるようになったとはいえ残りの実装できるかというとまた別の問題。書いてはバグを増やす私。

この時点で私が本コードを書くのは諦めて、実装はサルドラさんに全部おまかせして私はサルドラ氏が追加したコードのテストコードを書いたり保守に回りました!
あと3日、気合い。




どこまで実装できるかほんとうにギリギリの状態だったのでチラシに書けることが直前まで本当に決めることができませんでした。

チラシできてない、あと1日。

明日が展示会当日、チームの結束が過去最大のMAXに到達

そしてチラシは間に合った

なんとか間に合った…?
最後の最後、LLMとのつなぎ込みの一番大変な行動選択させる実装はサルドラさんが担当し、その行動選択の結果を受けてAIがコメントを言うという実装は私が書きました!!!開発者としてなんとか生き延びた!!!

結果的に展示会に展示するためのAIゲームのデモを完成することができ、みなさんにお披露目することができました!!!
直近にサルドラさんが2日間くらいガチ実装して朝を迎えていましたが、そんな助けも合って3人で当日を迎えることができました…!!!本当に良かった!!!
まとめ
なんとか間に合った、というものの結局サルドラさんが稼働できるまでの1ヶ月で私ができたことって何だったんだろう…?という感じではありますが、ゲーム音痴の非エンジニアがCursorを使い倒してなんちゃってチーム開発して最後まで脱落することなく走りきれたのは五味ちゃんとサルドラさんが私を守ってくれたおかげです!!!
結局、残酷な真実ではありますが、自分ができないと思ったことはいくらAIを使っても一人で実現することはできません。
でも、そこにできると確信している仲間がいたとしたら話は別です。
なんでこんなにも苦しかったのに私は途中で投げ出さなかったかというと、やりたいことは何が何でも絶対にやるんだという熱量を持って人を巻き込んでいく二人のことを本当にリスペクトしているし、なにより大好きだったからです。
これを書きながらまた感謝の涙が止まりません。私をメンバーとして迎えてくれて本当にありがとう!
私はこのAIゲームをより多くの人に届けるためにもう少しだけ頑張ろうと思います!乞うご期待!
おまけ
この記事を公開する前にサルドラさん本人に読んでもらったところ、こんなコメントをもらいました。

ところで、みなさん気になっているところかもしれませんが、私のスパゲッティコードをサルドラさんがリファクタしてくれたあと、私のコードってどれくらい残っていると思いますか?
さて、非エンジニアでゲーム音痴が3ヶ月Cursor使いまくってAIゲーム開発する実験も終わったので、サルドラ氏の検閲をクリアした私のソースコードがどこまで残ってるのか検証したら結構面白そう
— yasuna (@yasun_ai) November 16, 2024
直した記録も全部残ってるのでこれすごい財産な気がするぞ
検閲はしきれてません!
— saldra(サルドラ) (@sald_ra) November 16, 2024
ツイートの検閲はバッチリで草
— yasuna (@yasun_ai) November 16, 2024
どれくらい直したらみんなに見せられるくらい動いたのか知りたいですよね!!!
サルドラさんと実際のコードを見ながら1時間におよぶ感想戦を行ったのでぜひこちらも見てみてくださいねー!
ここまで長かったですがお付き合いいただきありがとうございました!
無事ゲームを届けるまでまだまだ止まらないぞ!
LLMが自律して行動選択する戦略シミュレーションゲーム「Algopolis(アルゴポリス)」のデモ動画公開しました!
— yasuna (@yasun_ai) November 17, 2024
昨日の#生成AIなんでも展示会 にて出展したAIシヴィライゼーションですのでぜひ会場に来られなかった...!という方も神の視点でAIキャラがブツブツいいながら行動する様子をごらんあれ!…