生成AIの出すスクリプトでゲームなら作れそうだ、と思った根拠を説明

情報の熱量

素人がバイブコーディングでゲームを作ってみた…、みたいな企画の記事を最近はよくみかけます。
コーディングを自動化できるなんて便利な時代になったものです。
絵も描いてくれますからね、以前と比べたら遥かに簡単な作業になりました。

私も相当に前ですが、Android でゲームを数本、作製して公開したことがあります。
ものすごい労力でした。
それが、今だと爆速で開発できる…まで言い切ったら誇張ですが、圧倒的な作業量短縮が期待できるのは時代の恩恵です。

じゃあ何で生成AIはゲームのプログラムを作れるの?
頭がいいから?
頭がいいからというよりも、知識の元となる引き出しの数がリアル人間と比べて圧倒的に多いから…です。
これは知っておいた方がいい理屈です。

今さら算数の話でもあるまいが、
121 = 6 x 5 x 4 + 1
分解してしまえば、どこにでもありそうなパーツの集合体だ。
これは思考(アイデア)の話、決して難解なものだとイメージしてはいけない。

ハーイ、AI評論家のコンバット(クリムゾン)越後です。
今回は割と抽象的な話ですが、AI にあえて主導権を取らせるという意図を解説させていただきたいと思います。

オレが考えていることは
独創的で唯一無二、とてもユニークだ

そう思うかもしれない。
だけど、先人が同じことを考えなかったと言い切れますか?
まったく100%…とことん同一なことは考えなかったかもしれないが、既存の…ありふれた…そういうものの集合で表現できたりしませんかね?

まあ

そう

大事な考え方として、詳細で独創的なオーダーをするのをやめて、既存の完成品で代替できないか検討すべきだということです。

もちろん、会社のローカルな独自仕様に合わせるために妙な書式を維持しなければならず、理不尽に苦労するしかない場面も多々あることでしょう。

それでも…。

一発O.K. な コーディング

アレ? ぜんぜんバグが出ない

私は、CFD投資のシステムトレードを構築しようとしています。
どうも、詳細なデータを取るところから始めないといけないようで、データ取りの何やかんやをChatGPTさんにご教授願いながら作ってきました。
そこまで…、順調にはいきませんでしたね。
やれば一応、前に進むけれども、「アレ? おかしいぞ…」という場面が何回も何回も…。
その都度、修正…、修正…。
このフェイズでは Python のスクリプトが問題を起こすというよりも、Excel のマクロの内容であったり、Windows のタスクスケジューラ―との絡みで失敗したり…という感じでした。

まあ、何とか形になってきたので次の段階です。

Excel に記録したデータを Python で解析しやすいように、データを整理したうえで保存形式も変えていきます。
そのうえで解析を行って、様々な条件を比較しながらシミュレーションを開始。
さらに発展させて、UI付きで条件別の成績ランキングまで提示する。

こういった処理を行うコードを書いてもらいました。
全部で10ステップ近くありました。
しかしね、ChatGPT がコードを出すたびに気分が重くなっていたわけです。
なぜなら、どうせ一発ですんなり通ることはない
エラーが出るから報告して修正、また別のエラーが出るから報告して修正…、
この面倒な工程があることを考えると、気楽に「コーディングして」とは言えない。
今までで、一番ヒドかった場合などは

ユーザー
ユーザー

この辺がマズいのは明らか。
ここで代入できていないから失敗するんだって!

AI
AI

違います、原因がわかりました。
ここを直せば100%、うまくいきます。
じゃあ、修正スクリプトを出しますね

ここまで言われて、失敗することがありました。
つまり、ぜんぜん簡単じゃない。

ところが今回、ビックリするくらいエラーが出ないのですね。
VSCode にコピペして実行→成功、結果を報告→次のコードを依頼する…、この流れがスムーズに繰り返されました
ほとんど手直し無しで進みます。
1回だけ、フォルダの名称を手入力で訂正しただけです。
うわ~、無修正でこんなに!(嘘みたい)

なぜ、ここまですんなりとコードが通ったのか?

考えてみると今まで何個かのプロジェクトをやってみましたが、どういうものを作りたいのか丁寧に説明しないといけない種類のものだった。
つまり、マニアックというか唯一無二というか…、世の中に同一のフォーマットなど存在せず、少なくともネット上で探して出てくるような一般性はない。
似たものはあるかもしれないが、(似ているだけで細部は違っており)そのまま転用できるものではありませんでした。

こういうことだったのですね。

つまり、こっちは
北野正義(ノース・フィールド・ジャスティス)だと認識しているのに、
相手様は
北野正義(きたの・まさよし)だと認識している。
だから、話が通じない。

難解な例えだ…。
まあ、お互いに “NFJustice” だと認識できていれば、話が通じる。
そういうことを言いたいわけです。

生成AIの引き出し

なぜ、プロジェクトを進めるにあたって私とChatGPTで同じ認識になれたのか?
それは、システムトレードの構築において、主導権がAI側にあるからです。

まず最初に私が求める「岡三オンライン証券」を利用して「くりっく株365」の自動トレードを行うという前提条件があります。
そこに関しては最適化する必要がありました。
あまり一般的ではない条件…、だから、完全に同じ条件で記述されている文献など存在しないし、仮にあったとしても情報の質量ともに期待できるものではないでしょう。
初期の段階では、今までと同じ感覚。
必要以上にわかったような顔をする生成AIに対して、細かい修正を与えながら徐々に相互理解を深めていく感じ。

ただ、話が進んでくると奴の引き出しの広さに圧倒されました。
どこから、その理論やら数学的アプローチを引っ張ってきたの? と、聞けば
「アメリカでは熱心に研究されていて、論文も多数でています」みたいな返答。

あなたの考えている戦略は、○○ですね。
どうも、先人が似たようなことを考えていて、もっと深く、もっと実用的に、中身を掘り下げた検証を多数行ってきたみたい。

だから、検証するための道筋が既に出来上がっている。
言うなれば、汎用パーツとしての Python スクリプトが存在する。

Pythonの金融系ライブラリは、データ取得、分析、可視化に特化しており、主にyfinance(データ取得)、pandas(データ操作)、TA-Lib(技術分析)、mplfinance(チャート描画)が必須ツールとして広く使われています。

AIによる概要

それに、Python では金融系のデータ処理に関するライブラリが充実しています。
そのライブラリを利用したコードも数多く公開されており、だからこそ「バグらないコード」を生成AIが提供してくれたわけです。

ゲームの場合のパターン化

ナビつき! つくってわかる はじめてゲームプログラミング | Nintendo Switch | 任天堂
任天堂の開発室から生まれたプログラミングソフト。2021年6月11日(金)発売、Nintendo Switch『ナビつき! つくってわかる はじめてゲームプログラミング』の公式サイトです。

数年前ですが、私は上記のソフトを Switch で遊んでいました。
これは、3Dのアクションゲームならある程度の創作ができます。

壁や崖の手前でカーブやバックを行って方向転換し、延々と島の中を巡回する車両を実現するために創意工夫したものです。
お掃除ロボットのルンバみたいな動きを想像してください。

センサーの位置や数は調整する必要がありますが、理屈としてはこうです。
障害物を検知するのはイメージとして分かりやすいと思いますが、逆に地続きかどうかを判定する場合は反対のことをする必要があります。
つまり、進行方向の前方(左前・正面・右前)で地上より下にオブジェクトが存在するか否かを判定します。
前方下方に何も無ければ、崖の下に転落してしまいますから、障害物の場合と同じく回避行動を取らせます。
ゲームなので、断崖絶壁の前にガードレールなど存在しないわけですから、このロジックは重要です。

これはあくまでアクションパターンの一例ですが、何か特定の動きをさせたかったら、それを実現させるためのプログラムには型があるのですね。
現実のルンバも、基本的に同じ原理で衝突・転落回避の行動を行っているはずです。

じゃあ敵キャラが、障害物を避けながらプレイヤーキャラの背後を付くような形で接近してくる動きをさせたい…と、なった場合のロジックは今の型にプラスするだけです。
回避行動と接近行動を合体させればいいだけですね。
接近行動を主としながら、前部センサーで障害物を検知した場合は迂回させる。
迂回行動中はキャラを追いかけないが、迂回が成功したら目的の座標をプレイヤーキャラの背面に再設定すればよい。
プレイヤーキャラ自体も障害物として設定すれば、回り込んで後ろを取るみたいなソレっぽい動きが実現できそうです。

それで、こういった動きのパターンなどは前例として公開されているはずです。
ロジックをパーツ・パーツに分けて考えれば、既存のものを組み合わせるだけで様々なアクションが実現可能でしょう。

機能の分割と連結

ここまで書いて、私が過去にプロジェクト進行に苦しんだのは、分割ができていなかったからじゃね? とも思うわけです。

大きいサイズのファイルを手直しするのは、大変なのです。
逆に小さいファイルの連結で動いているのなら、修正箇所は「問題となるファイルに限定」できますから、広範なところから原因を探す手間が省けます。

じゃあ何でそうしなかったの?

小分けすると、当然のことながらファイル数が増えるので、ある意味で管理が大変になります。
しかし、このデメリットは(恩恵の大きさを考えるならば)些細なモノです。

あなたが管理しやすいように組織化していくことが重要です。
この辺がうまくいくのであれば、バイブコーディングとかいうヤツも、まあ…やれそうな気はしますね。

理詰めが難しいのなら

コンピューターに的確に指示を出すためには、行動原理を一つ一つ分解して考える必要があります。
だけど、それが難しいのであれば生成AIに投げてしまうのも手ではないでしょうか?

「〇●ということをしたい。そのためには、どう考えたらいいか教えてください。もっと具体的に説明しないといけないことがあるのなら、それを私に聞いてください」

こんな感じで良いのでは?

こちらの意志を伝えたうえで、相手にも提案や質問をさせることが重要です。
その過程で認識がかみ合っていない状態「齟齬(そご)」が生まれないように、気をつければよいと思います。

AIに提案をさせる利点は大きいと思います。
こちらが一方的に要求していくスタイルだと(例えば○○というプログラムを用意して、みたいな)、相手が勘違いする可能性が大いにあります。
逆に、AIに方法を提案させる場合は、少なくともAIは自らの提案に関して勘違いはしていません。
提案の内容をしっかりと吟味する必要、場合によっては修正をかけていく必要もありますが、ある程度はAIの側に手綱を渡してやる方がうまくいきそうな気がします。

彼らは何でも知っている顔をしますが、得意分野と不得意分野における解像度の違いは相当なものです。
なるべく特異な分野で作業をさせるためにも、AIに主導権を与えるような駆け引きが必要になるかと思います。


コメント

タイトルとURLをコピーしました