見出し画像

【ゲーム音痴な非エンジニアが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に聞きながらやったらなんとか作れるかも?と思いました。ここも甘かった。

実装が始まったのはいいものの、私が稼働できるのが子ども✕2を寝かしつけてから22時以降で結構フラフラになっている状態からCursor開いて進めて…みたいな感じなので基本集中力がありません(草)

頼りにしていたサルドラさんがネンちゃん大規模アプデまわりでかなり厳しい状態になっていたので、少しでもなんか書いてコミットしておかなきゃ…みたいな気持ちでいました。

ゲームシステムを投げてCursorに聞けばなんか答えてくれて、コードを書いてくれるのでひたすらにApplyを繰り返してなんとなくやった気持ちになっていました。

AIが書いたコードをただひたすら右から左へ移していくだけだったので、自分でしっかりコードを読んで理解するという時間を取っていませんでした。

バックエンドは脳死コミットでしたが、UIはこの時点でだいたい出来上がっていました。Pygame初見に優しすぎる。

なんか怖い
全然並べられない
いい感じ
ここまではわりと早い段階で完成

なんかヤバそうなのでCodeRabbitでなんとかしようとする(10月後半)

サルドラさんに「これってどういう意味で書いてますか?」って聞かれても自分が書いたはずのコードなのに全く答えられなくて普通に死にそうでした。

エンジニアだったら自分の担当箇所について聞かれてるだけなので普通の会話になると思うんですが、私はずっと自分がなにやってるか理解できていなかった、、、ということを包み隠さずもっと早くサルドラさんに伝えるべきだった。

「こいつ何も分かってなくないか?」とそんなことは言いませんが、私が理解できていないまま実装していることがやっとバレました。

私はここまでなぜコードを読まず理解しようとしなかったかというとある理由があります。

AIが書いたコードを読まなくても動けばいいじゃん

って考えていたからなんですね。
実際にAIで増やしたコードがあれば動かし、動かなかったらエラーをAIに入れて動くまで回す。動いたら次に行く、みたいなことをやっていた訳です。

そうするとどうなるかというと、ひとつのファイルに大量にコードが増えていくんですね…

気がつかないにうちにどんどん人間が読めない冗長なスパゲッティコードを量産していました。エンジニアだったらもうこの時点で命ないです。

それにやっと気がついたサルドラさんでしたが、とにかく時間が取れないのでAIにコードレビューさせてなんとかしようと考えてプルリクをチェックしてくれるCodeRabbitを導入しました!でもこれも罠だった…

ちなみにCodeRabbitはプルリクに参加できるAIレビューワーみたいな存在でで使い方によってはとても便利な子です!!!

チーム開発未経験だからプルリクめちゃくちゃでAIレビュワーうさぎが大暴走

GitとGitHubは使えていたのですが、いつも個人で誰も見ないコードを書いていただけだったのでブランチ戦略も何も知りません。

ブランチ戦略がないと何がおこるのかというと、一つのブランチにいっぱい実装しまくってプルリクがめちゃくちゃになるという現象が起こります。

このせいで永遠と増えるプルリクのコミットに対してAIレビュワーうさぎからシバキちらかされます🐰

この時点でだいぶ心が折れていたので、最初はうさぎ氏の指摘を読もうとしていましたが、次第に何も見なくなりました、、、ごめんよ、、、

突然yasunaに確変が起こる(11月3日)


AIうさぎも使いこなせず、エンドレス絶望生き地獄の中で突然何が起こったのかというと、サルドラさんの手が一瞬だけ空いてペアプロの時間がやっと取れるようになったんですね。ずっと待っていたよ…

結局人間が人間のために時間取ってお世話しなきゃいけないという悲しい事実が作られてしまったのですが、私が1ヶ月AIに問い続けただけでは到底解決できなかったことがたった2時間ほどのペアプロで嘘のように解決してしまいます。そう、ここからがはじまりです。

私のスパゲッティコードを見たサルドラさんから何を言われたのかというと、大きく分けて2つです。

クリーンアーキテクチャ


初見です

みなさんこの図を見たことがありますか?エンジニアなら見たことあるかもしれませんが、私は初めてでした。

サルドラさんから聞いたことを覚えているままに説明すると、
真ん中のエンティティは誰とも関わらない完全に独立したもの、例えば今回のAIゲームだったら「モデル」の部分にあたるキャラクター、マップ、発電所、リソース、みたいな登場人物の説明だけを書く部分を作ります。

そして、その登場人物をどんな風に使いたいのかというユースケース層が次に来ます。

そして、それをどう動かすのかとうコントローラー層、そしてUI層というように役割をきちんと分けて書くといいよという話を30分くらい熱く説明してくれました。

その説明を一通り聞いてから自分のコードを見てみると、なぜか今まで読めなかったコードが分かるようになってくるんですね。

ああ、ここはエンティティのはずなのに振る舞いまで書いてあるからこっちに移動しよう、とかキャラクターのはずなのにUIの実装まで書かれていておかしいよね、ということが自分でも理解できるようになってきました。

恐るべしクリーンアーキテクチャの威力、じゃないや、サルドラさんのペアプロ力。

もう一つ私が劇的に変われたことがありました。

ブランチ戦略

さきほどもプルリクでAIレビュワーうさぎが大暴走した話をお伝えしましたが、コードを管理するときにブランチという概念があります。

ブランチは色んな戦略があってプロジェクトによって採用されるスタイルはさまざま、とのことだったのですが、サルドラさんから教えてもらったスタイルが今の大炎上の状態に合っていたのでその説明をちょっとすると、

結論、ブランチに一個でも新機能がきたらそれがたとえ1コミットであったとしても、できた時点でプルリクを出してすぐmainにマージする

って感じでした。
これは議論の余地ありありだと思うのですが、少なからず私は一つのブランチにあれもこれもと追加しまくって今何を直しているのか見失ってパニクっていたので、これが有効そうでした。

これがまともにできるようになってから本当にウサギが大暴走することが無くちゃんとしたコードレビューを実装に反映できるようになりました。

うさぎよありがとう

とはいえ納期まであと10日…

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

できてるようでできてなくて草

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

ほんと女神
相変わらず夜しか稼働できない私

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

あと9日なのにむしろどこができているのか謎

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

あと8日…

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

あと3日、気合い。

とっくに大炎上してます
相変わらず女神
趣味は進捗を出すことでおなじみのサルドラ氏
ここで初めて実装を褒められたのかも!!!保護

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

まじでこのやる夫に精神助けられた

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

チラシ間に合うか五分五分

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

男前な女神さま

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

いよいよ明日

なんとか間に合った…?

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

一番最後に残ったLLMとのつなぎ込みのコメント実装をしたのは私だった

結果的に展示会に展示するためのAIゲームのデモを完成することができ、みなさんにお披露目することができました!!!

直近にサルドラさんが2日間くらいガチ実装して朝を迎えていましたが、そんな助けも合って3人で当日を迎えることができました…!!!本当に良かった!!!

まとめ

なんとか間に合った、というものの結局サルドラさんが稼働できるまでの1ヶ月で私ができたことって何だったんだろう…?という感じではありますが、ゲーム音痴の非エンジニアがCursorを使い倒してなんちゃってチーム開発して最後まで脱落することなく走りきれたのは五味ちゃんとサルドラさんが私を守ってくれたおかげです!!!

結局、残酷な真実ではありますが、自分ができないと思ったことはいくらAIを使っても一人で実現することはできません。

でも、そこにできると確信している仲間がいたとしたら話は別です。

なんでこんなにも苦しかったのに私は途中で投げ出さなかったかというと、やりたいことは何が何でも絶対にやるんだという熱量を持って人を巻き込んでいく二人のことを本当にリスペクトしているし、なにより大好きだったからです。

これを書きながらまた感謝の涙が止まりません。私をメンバーとして迎えてくれて本当にありがとう!

私はこのAIゲームをより多くの人に届けるためにもう少しだけ頑張ろうと思います!乞うご期待!

おまけ

この記事を公開する前にサルドラさん本人に読んでもらったところ、こんなコメントをもらいました。

なんやかんや優しい

ところで、みなさん気になっているところかもしれませんが、私のスパゲッティコードをサルドラさんがリファクタしてくれたあと、私のコードってどれくらい残っていると思いますか?

どれくらい直したらみんなに見せられるくらい動いたのか知りたいですよね!!!

サルドラさんと実際のコードを見ながら1時間におよぶ感想戦を行ったのでぜひこちらも見てみてくださいねー!


ここまで長かったですがお付き合いいただきありがとうございました!
無事ゲームを届けるまでまだまだ止まらないぞ!


いいなと思ったら応援しよう!

この記事が参加している募集