🤖

ゲーム開発におけるAIコーディングの活用の壁と今後やるべきこと

に公開

前提

ゲーム開発において、AIコーディングの活用はWebフロントやバックエンドと比べると遅れているように感じます。
また、Unityと現在のAIコーディングは相性が悪いのではないかとも言われています。
今回は、それはなぜなのかの仮説と、私が考える今後やるべきことについてまとめます。
前提として、私は普段Unityを使った開発をしているので、Unityを基準に考えていますが、それ以外でのゲーム開発にもある程度当てはまるのではないかと思います。

AIコーディングの活用において重要なこと

先んじて、直近思っている実プロダクトへのAI活用に対して重要だと思っていることをまとめます。

AIをうまく使うにはプロジェクトの設計思想を明文化することが大切

何もしないと、AIが学習されているデータに基づき、最も多い実装パターンで実装を行う傾向があります。
つまり、学習されているデータと自分の設計思想がずれていたとしても、気にせず実装をしてしまいます。
実装の方向性をすり合わせるためにも、プロジェクトの設計思想を明文化することは重要です。

AIが間違った方向に進んでも気付けるようなガードレールが重要

AIは仮に方針を明文化したとしても、作業の過程でその方針から外れた方向に向かうことが多々あります。
このときに、AIに正しく自走してもらうためには、AI自身が外れた方向に向かっていることに気づける必要があります。
例えば、型やlinter、テストコードはそういったことに気づかせるガードレールになります。

実プロダクトではコンテキストが膨大だが非常に重要で、構造化しつつ常に最新化してドキュメントにまとめる必要がある

AIは人間と違って、テキストやコードから得られる情報がすべてになります。
実際のプロダクトでは、会議やチャットのやり取りなどから人間はコンテキストを汲み取って実装を行っていますが、AIにはそれができません。
そのため、できる限りの情報をドキュメントとしてまとめておくことが重要だと考えています。
また、AIがコンテキストとして扱える量には上限があるので、それを構造化しておき、必要なものだけ取りに行ける状態を作ることも重要だと思います。

ゲーム開発ではなぜAI活用が遅れているのか?の仮説

上記のAI活用において重要なことを前提に、ゲーム開発ではなぜ遅れているのかを考えてみます。

昔のコンシューマ時代の運用をしない前提の開発文化

昔のコンシューマ時代のゲーム開発では、運用というものが存在しなかったため、開発文化の中でテストコードを書いたりといった保守性という部分の優先度が落ちていたのではないかと考えています。
現在のゲーム開発においてもその名残か、バックエンドやその他フロントと比べるとテストコードを書く文化そのものが育ちきっておらず、先述のガードレールが弱い状態になっているのではないかと思います。

学習されるコードの精度

ゲーム開発においては、その他ジャンルのものと比べると業界的にOSSのような文化が弱く、ソースコードが公開されているもので品質が高いものが少ないのではないかと思います。
品質の高いライブラリなどはあっても、実際のゲーム自体でOSSとして公開されているものは少ない印象なので、そういった理由から学習データのコードの精度が低いのではないかと考えています。

View側の表現の多様性

UIや3DなどView周りはゲームジャンルごとに表現は様々です。
Webフロントやネイティブアプリケーションと比べると、必要な要素とそのパターンはかなり膨大になると思います。
そのため、View側まで考慮したコードを生成するのが難しいのではないかと考えています。
また、UnityにおいてはPrefabなどをコンテキストとして与えることの難しさもあります。

今後どうしていけると良いか

ガードレールを充実させていく文化を作る

ゲーム開発においても、静的解析やテストによって、ガードレールを充実させることは不可能ではありません。
今後はここの重要性が今まで以上に大きくなると考えており、新規や運用中のタイトルでもできる限りこのあたりを充実させていくことが結果的に将来のコストカットにつながると思います。

具体的にやることとしては、下記のあたりが考えられると思います。

- RoslynAnalyzerによる静的解析による構文、パフォーマンスの担保
- テストコードによるロジック正しさ担保
- E2E自動テストによる動作担保
- ビジュアルリグレッションテストによる見た目の担保

View側の開発工数を減らせるようなツールを作る

Unityにおいて、View側でも直接AI活用をしていこうと思うと今はなかなか難しいと思います。
しかし、View側の開発工数を減らせるようなツールであれば、開発できると思います。
そういったView側の開発を助けるツールを作っていくことで、全体としては工数削減ができるのではないかと思います。

具体的にやることとしては、下記あたりが考えられると思います。

- PSDやFigmaからのUI Prefab生成ツール
- AfterEffectからの演出生成ツール
- MayaなどDCCツール周りの拡張

できる限りのコンテキストを与える手段を作っておく

ここはゲーム開発に限らず、今後の様々な開発現場で課題となっていく部分だと思いますが、できるかぎりAIに対して正確なコンテキストを与える手段を作っておくことが大切だと思います。
AIは、不要なコンテキストが入ると迷走してしまいがちなので、適切に区分けし、必要な情報だけを取得できるようにできるのがベストだと考えています。
また、こういったコンテキストはドキュメントにまとめていくことになると思いますが、ドキュメントのメンテナンスというのは往々にして課題になるため、その課題に対してメンテがしやすい環境づくりというのもAIを活用することで作れるのではないかと思います。

具体的にやることとしては、下記あたりが考えられると思います。

- 仕様書からの自動エクスポートツール
- ドキュメントをカテゴライズするルールとツール
- チャットツールからのドキュメント自動更新ツール

まとめ

今後の開発において、AI活用は必須になっていくと思います。
簡単なツールやPoCであれば、さくっと作れる時代がもう来ていると思いますが、プロダクトへの活用となるとまだ課題はあります。
ただし、こういった課題は一朝一夕では解決されるものではないので、今回のような仮説を立てて、AI活用できる環境を作っていくための文化から作っていく必要があると思います。
あくまで私自身の考えにはなりますが、参考になれば幸いです。

Discussion