はじめに
締め切り間近(〜6/30)ですが、Amazon Q CLIを使ってゲームを作成するとTシャツをもらえるキャンペーンがあるようです。
せっかくなので古典的なシューティングゲームを作成してみることにしました。
完成版デモ
飛んでくる皿をマウスクリックで撃ち落とすシンプルなゲームです。時間が経つにつれてだんだんカオスになります。
以下にソースを公開してあります。
https://github.com/watabean/q-developer-game/tree/master
環境セットアップ
1. Amazon Q CLIのインストール
$ brew install --cask amazon-q
# インストール後すぐにコマンドが使えません。まずAmazonQアプリケーションを起動する必要がありました。
2. Amazon Q アプリケーションの起動
/Applications/Amazon Q.app
を起動
3. AWSにログイン
AWS Builder IDでログイン
4. Pygameのインストール(ゲーム開発に必要)
$ python3 -m pip install -U pygame --user
開発プロセス(Vibe Coding)
1. チャットセッションの開始
$ q chat
2. 初回のゲーム仕様指示
> pygame を利用してゲームを作成します。照準で飛来物を撃ち落とすゲームがいいな。
なんかいろんなものが飛んできてどんどんクリックで壊すみたいな。
続きは作りながら決めていこうか。すべてローカルに保存していってね。
3. 段階的な改善指示
> ・全部上方向からくるのではなく360度いろんな方向から来てほしい
・飛来物は丸じゃなく、お皿にしてほしい
> ・皿の形状をブラッシュアップしてほしい。色は全部白でいいかな。(それに伴って背景色を変えてもいいかも。)
・マウスカーソル位置に銃口?レティクル?をつけてほしい
> これだと丸の範囲内があたり判定だと思うからそう直してもらおうかな。
あとは段階的に皿の枚数を増やしたいかな。5秒ごとにどんどん増えてくる感じで。最後はもうわちゃわちゃ
> じゃあ起動して。
アプリ完成後にAmazon Q CLIによって作成してもらった開発ログはこちら
https://github.com/watabean/q-developer-game/blob/master/DEVELOPMENT_LOG.md#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E6%8C%87%E7%A4%BA%E5%8E%9F%E6%96%87
(気づけば全体で25回ほど指示を出しながら、バグ修正と機能追加を繰り返していました。)
開発で得た知見とTips
早めにコード分割を指示するのがよさそう
途中でデバッグが行き詰まった際、ファイル分割を要求したところスムーズに進むようになりました。1ファイルが大きいとContextの理解が難しくなるようなので、早めに分割するのがよさそうです。
Amazon Q Developerの性能
普段業務で使用しているのはVSCodeのGitHub Copilot
拡張です。モデルがClaude Sonnet 4
と同じということもあり、性能差はそれほど感じませんでした。(そもそもCLIではないので単純に比較できないですが)
もっとAWS固有のユースケースだとAmazon Q Developer
のパワーを実感できたかもしれないです。
画像生成が微妙だった
皿のオブジェクトを自動生成してもらいましたが、全然皿に見えませんでした。やはり生成AIは視覚的なデザイン作業が苦手なようです。結果的にフリー素材を活用しましたが、フリー素材の検索・取得自体もAmazon Q CLIにやってもらうという方法もありだったかもしれません。
チャット履歴は消える
/save chat_history.json
でチャット履歴を外部ファイルに保存できるようですが、古いものは消えてくようなので、Amazon Q CLIに途中経過を記録させるほうがいいかなと思いました。
おわりに
元も子もない結論ですが、こういった用途だと既存のVSCode拡張(Amazon Q Developer)のほうが便利かもと思ったりしました。(コマンドインストール等の手間もない&コード見ながら指示出せるので)