0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

非ゲーム系エンジニアだけどゲーム作ってSteamにリリースしてみた 第 4 回:AIの使い方

0
Posted at

はじめに

先日、かねてより開発していたゲームをSteamにてリリースしました。

個人制作としては比較的規模の大きいゲームになったこともあり、技術面・ゲーム制作面のどちらでも多くの工夫や苦労がありました。
この記事では、これからゲーム制作をしてみたい方や、個人開発でオンラインゲームを作ることに興味がある方向けに、私の体験談を交えながら制作内容を紹介していきます。

今回は、このゲームを制作するにあたって活用したCodexやCursorなどのAI開発支援ツールについて、私なりの使い方を紹介します。
正直なところ、AIがなければまだリリースできていないと思うので・・・

制作物『Caldra』について(一部再掲)

Steam_ScreenShot_01_ja.png

『Caldra』は、2人対戦のカードバトルゲームです。
アーキテクチャとしては下記のような構成になっており、主にゲーム画面を担当するUnity、操作受付やゲームの管理を行うRustのゲームサーバ、セッション管理やルーム作成などを行うRustのロビーサーバにて構成されます

このうち、主にRustで書かれたサーバ側でAIによるコード生成を活用しています。
image.png

AIへの指示の出し方

私の基本的な指示の書き方は、だいたい下記のような形です。

[作りたいもの]についてのコードを書いてください
・[狙い]をしたいです
・[仕様1]にしてください
・[仕様2]にしてください
・[制約]には気を付けてください
・[類似プログラム]を参考に作成してください

「狙い」には、なぜその処理を追加したいのかを書きます。

例えば、以下のような内容です。

  • 不具合が出そうなため、事前にチェック処理を追加したい
  • 将来的に○○の機能を作るため、今のうちに拡張しやすい形にしたい
  • 既存の処理と同じ形式で、新しいカード効果を追加したい

「仕様」や「制約」には、プログラムを書く上で満たしてほしいことや、考慮してほしいことを書きます。

例えば、以下のような内容です。

  • カード○○と組み合わせたときは、××のように動く想定です
  • 戦場のユニット数が上限を超えないようにしてください
  • DBに格納するときのテーブル名は○○にしてください
  • レスポンス形式は既存の△△APIと同じ形にしてください

実際の指示例としては、このような感じです。

「集え、戦士たちよ!」というカードのプログラムを作成してください。
・このカードは「(ここにカードの効果。長いので省略)」という効果です
・戦場のユニットがあふれるかもしれないことに注意してプログラムしてください
・プログラムを書くときはxxx.rsを参考に作成してください
ユーザの戦績を返すためのAPIを作成してください。
・戦績は○○テーブルの××カラムに書いています
・この○○テーブルの詳細は~~~です
・戦績はTOP 20件を返すようにしてください

既に類似のプログラムや、手本になる機能がある場合は、それを参考にするため、かなり精度が上がります。
特に「このファイルを参考にしてください」と指定すると、既存の設計や命名規則に寄せて実装してくれることが多いです。

AIを使うときのコツ

AIにコードを書かせる前に、Gitのコミットをしておくことをおすすめします。
事前にコミットしておくと、AIが変更した内容がGitの差分として表示されるため、どこを変更したのかが一目で分かります。

後の章でも紹介しますが、AIは時に変に機を利かせてプログラムを書くことがあるため、差分を用いてのレビューは必須になります。

AIによるメリット

効率化

AIによる実装は爆速です。そのため、人間によるレビューの工数を鑑みても、AIに書かせることによる工数削減の方がより効率的な作業が可能です。
私の体感では、作業内容によっては開発時間が1/2〜1/10くらいに短縮されていると思います。

難しいプログラムでも書いてくれる

エンジニアの仕事では、分からないことがあれば調べながら実装する、という場面が多いと思います。
エンジニアはすべてを暗記している必要はなく、必要な情報を調べ、理解し、成果物として形にする仕事だと思っています。その点で、AIは非常に強力です。

それが可能なため、「文字列をUTF-8のバイトに変換する」といったインターネット上には確実にサンプルプログラムが載っているけど暗記はしていないプログラムであったり、エンジニア人生で初めて見る不具合であったりも、AIは不具合の多くを修正したり、修正するためのアイデアを提供したりが可能な存在です。

実際、私もUnityで実装している中でUnityエンジン起因の未知の不具合などは、AIに投げることで修正出来たり、修正のための材料を得ることが可能でした。

意外と不具合が少ない

GPT-5くらいのバージョンから性能がとても上がり、最近のAIはかなり性能が上がっており、生成されるコードに明らかな不具合が入っていることは少なくなってきたと感じます。特に人間が間違いがちな境界値や不等号を逆にしちゃうといった人間らしいミスはほとんどしません。
AIの場合は人間が想定している機能と違う形で実装しちゃうといった仕様誤認が多い印象です。

AIによるデメリット

無駄な気の利かせ方をする・不要な機能を追加する

人間にタスクをお願いした場合、タスクに不備があると不備の部分について聞いてくれると思います。しかしAIの場合は何も指示をしないと変な気を利かせて実装するため、プログラムとしては動きますがスパゲッティなプログラムになったり、想定と違う挙動で実装したりします。
その結果、プログラムとしては動くものの、以下のような問題が起きることがあります。

  • 不要な機能が追加される
  • 余計な分岐が増えて読みにくくなる
  • 一見便利そうだが、後から負債になる処理が入る

そのような挙動をするため、先ほどの例で示した通り、仕様1, 仕様2, 制約といった所でできるだけ縛って指示しています。
また、人間によるレビューも欠かせません。しっっっっかりとレビューしましょう( ᯣωᯣ )

書かれたコードが読めない

これは私にしか当てはまらない事例です。
ロビーサーバのプログラムを自分の勉強がてら慣れないアーキテクチャでAIに書かせたのですが、結果プログラムを私が読めなくなりました・・・
Rustもまだ完全に慣れた言語ではない状態で、さらに慣れていないアーキテクチャを採用したため、かなり手に負えない状態になりました。なんか本番環境では問題なく動いてますが、本当になんで動いているか分かりません。

個人制作なのでそのような適当な運用をしていますが、業務では絶対にやめましょう

終わりに

今回は、Caldraの開発でCodexやCursorなどのAI開発支援ツールをどのように使っていたかを紹介しました。
私のざっくりな感想をまとめると「コードを書くのは早いけれど、レビューは必須」といった立ち位置です。

もしもこの記事を読まれている方の中でまだ使ったことが無いという方がいらっしゃいましたが、是非とも使ってみて下さい。手のかかる子ですが仕事は爆速です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?