この記事は「Amazon Q CLI でゲームを作ろう Tシャツキャンペーン」に参加しています。
はじめに
Amazon Q CLI (以下、Q) を使った Vibe Coding に関する記事を見かけることがありましたが、なかなか触ってみる機会がありませんでした。そんな折、冒頭にリンクを掲載したキャンペーンの存在を知り、「よしやってみるか!」とPCを広げてから約1日後の今、この記事を書いています。
Amazon Q CLI の実力や如何に…!楽しみですね!
Executive Summary
- Qにアルゴリズムを適切に説明しづらい場合、ゲームのバグ修正が困難な時があった。
- 簡潔なアルゴリズムのゲームを選べば、数回のやり取りで所望のゲームを作ることができた。
- CLIツールとしての使いこなし方法は先に習得しておいた方が良い。参考:https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-context-profiles.html
ゲーム作りの記録
前提条件
- Amazon Q CLIの使用準備が整っている
- Go言語のプログラムをビルドできる
環境構築:ゲーム作成ライブラリの導入
せっかくの機会なので、気になっていたけどなかなか使えていなかったGo製 2DゲームエンジンのEbitengineを使ってみることにします。
- プロジェクト用のディレクトリを作成&移動して
q
コマンドを実行。 - 立ち上がったQのチャットスペースで「Go言語のプロジェクトを初期化して、モジュール名は
github.com/foo/bar
」と依頼。go mod init
してくれましたが、不要なmain.go
もサジェストされました、こちらはお断りしましょう。 - 「最新の
github.com/hajimehoshi/ebiten
を追加」と指示すればgo get
してくれます。指定しわすれていましたが適切にgithub.com/hajimehoshi/ebiten/v2
を追加してくれました。えらい。
ここまでは順調ですね。
失敗:ビジュアルやアルゴリズムを適切に伝えきれなかった、やや複雑なゲーム
試行錯誤するも、結局バグが解消しなかったため、スクリーンショット等も取らずに消してしまいました。
どんなゲームを作ろうかなと思案したものの、あまり良い題材が思い浮かびません。パッと考えついた「レールが書かれたパネルを並べてスタートからゴールまでレールを繋ぐ」ゲームを試しに作ってみることにしました。
思いつく限りの情報をプロンプトに詰め込んでゲーム作成を依頼すると、一発目でそれらしい見た目の画面ができました。これはなかなかテンションが上がります。
しかしそこから、「細かいビジュアルの指定に追従しない」「レールがつながったことの判定アルゴリズムが完成しない」状態になり、何度問答を続けても硬直した状態となりました。
この失敗を振り返ると、次のような反省がありました。
- 細かいビジュアル指定をプロンプトで繰り返したが、画像を入力として使う機能もあるため、それを試してみるべきだった。https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-chat-images.html
- やや複雑なアルゴリズムを、特に下書きもせずプロンプトに一発記載していたため、もう少し詳細なドキュメントを作成してから入力すべきだった。
しかしながら、なかなか準備時間も取れません。そこでもう少し簡単なゲームを作ることに方針転換しました。
成功:画面構成もアルゴリズムも単純なゲーム
これまたネタが思い浮かびませんでしたが、子どもの勉強にでも使えたら良いなという思いで「寿司ネタの漢字を表示して、複数選択肢の中から漢字に対応する正しい英語を選ぶ」ゲームを作ることに決めました。
以下、作成の簡易ログです。
- 最初の指示でおおよその画面構成は作成完了した。
- 点数計算のロジックにバグがあったが数回のやり取りで修正が完了した。
- フォントの問題かと思いますが、表示されない漢字がありました。数回のやり取りで修正が完了しました。
とても簡単なゲームではありますが、ほぼイメージ通りのものを簡単に作り上げることができました。また、今まで書いたことのないEbitengineのプログラムでしたが、まず動くものができあがっているので、コードを読んだ時にとても理解が捗ります。初めて触るプログラミング言語やライブラリの習得に便利だな、と実感しました。
振り返ってみると改善できそうなことは以下の通りです。
- 単体テストも何もない状態なので点数計算ロジックの修正に数回のやり取りを要したが、最初から「重要なゲームのロジックには単体テストを作成し、単体テストがパスすることを確認しながら実装を進めよ」などの指示をしていればもっと簡単になったかもしれない。
ところで、「お、便利」という気づきもありました。作業中、何度かQを終了・再実行することがありましたが、会話のコンテキストが引き継がれている感じがしました。ディレクトリベースで自動的に会話がresumeされるのですね。https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-chat-persistence.html
最初の失敗バージョンの作成から会話をずっと継続していたので、もしかするとcompact
などで会話を圧縮しておく必要もあったかもしれません。https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-chat-commands.html
いかんせん、使用する前にQについて調べなさすぎだったことは反省です。予想以上に多様な機能を備えていてパワフルです…!
作成したゲームはこちらのリポジトリにあります。Goがインストールされていればすぐに実行できます。
おわりに
簡単なゲームであれば非常に短時間で作成できてしまいました。Amazon Q CLI、なかなか強力です。「作ってみたいけど時間がなかなか取れないんだよなぁ」という個人開発ネタ、隙間時間で作れる時代が来ていますね、ワクワクです!