Amazon Q Developer for CLI でゲームを作ってみた
日本を含む APAC 地域のみで展開されている Amazon Q CLI でゲームを作ろう Tシャツキャンペーン というキャンペーンが開始され 6月20日 まで実施されています。
期間中に Amazon Q Developer for CLI を用いてゲームを作成し、ゲーム作成中の体験を動画やブログにした上で紹介します。そして専用のフォームから申請することで Amazon Q のオリジナル T シャツをゲットできるキャンペーンです。
今回、キャンペーンの実施要項に基づいてゲームを作成するまでの過程(と言ってもほぼプロンプトを投入して出力を待っているだけ)を記録しましたので記事にしました。
Amazon Q Developer for CLI の導入
これ自体はすでにローカルマシンに導入済みでしたので、導入手順を詳しく解説しているブログを紹介します。
Windows の場合
Amazon Q Developer for CLIを使って、AWSのリソースをAIで作成⇒調査⇒構成図作成までやってみて、構築作業を楽にしよう
該当の記事では、既存の AWS アカウント内のリソース調査した上で構成図まで書いてしまおう、という記事になります。
記事の内容すべて試してみると、何ができるサービスなのか把握しやすい良記事です。Windows での Amazon Q Developer for CLI のインストール方法の把握だけではもったいない印象です。
Mac の場合
Mac で Homebrew を利用されている方は brew install amazonq
で一発でインストールできるのですが、GUI で実施する場合は以下の手順が参考になります。
Amazon Q Developer for CLIをmacOSにインストールしました
Homebrew でインストールした場合でも、起動させる際のアクセシビリティの警告やサインインの手順を詳細に記載くださっています。
ゲーム用のライブラリのインストール
冒頭で紹介したキャンペーンでは "PyGame または〜" のように書かれていますが、特段ゲーム制作者でもない私からすると何が何やら…なので、書かれている通り PyGame を使ってみることにします。
そして導入方法などを調べるのも 面倒だったので にAI を活用してみよう、と思ったので、自然言語で以下のように書いてみてやってもらうことにしました。
PyGame をインストールしたい
すると以下のような処理が始まって最終的には venv を用いた仮想環境で動作できるように環境を整えてくれました。
ゲームの作成
実は界隈の猛者たちがさまざまなゲームを生み出していてツイートしてたりしたのもみかけていたので、見たことのあるものは避けようと考えました。最初は粗めのドット絵から徐々に詳細に表示されていく AWS サービスアイコンを何のサービスなのかを当てるクイズっぽいやつにしようと試みました。ただ、他の方のアウトプットを意識すぎてかえってありがちなゲームになった印象です。
以下は頭の中にあった内容が、ほぼ具現化されるまでの記録になっています。
本来は設計を記載した spec.md などをカレントディレクトリ配下に事前配置すれば良いかと考えられます。それを Amazon Q Developer for CLI に読み込ませて指示を与えるイメージです。
ただ、今回はいささか成り行きの対話でもなんとかなる様子としたいと思っていたので、直接 zsh に記載していく方式にしています。そのためいくつか typo などもありますが、プロンプトとして与えたそのままを転記しています。
なお、zsh への入力と出力状況を t-rec で記録していた関係で、シェルのセッションを都度切っています。プロンプトごとに分けて Amazon Q Developer for CLI の実行をしています。
そのため、直前での生成ではこのような指示を与えていたんだけど、ということを伝えるために少々プロンプトの書き方が冗長になっている点があります。q chat
のセッションを切らずに実行した場合、より簡略な指示を与えることでゴールに近づいた可能性はあります。
なお、都度のプロンプト実行の前にゲームを動かした時の動画を残すのを忘れていたので、ゲームが徐々に出来上がっていく様を残せていなかった点が反省です。
最初のプロンプト
AWS のサービスアイコンを利用した回答速度を競うゲームの作成をしたいです。そのゲームでは指定の秒数をカウントダウンしていき、タイムが 0 になるまでの間に画像として表示されている AWS のサービスアイコンがどの AWS サービスのアイコンであるかを4つの選択肢から選択してクイズに答える形にしたいです。画面に表示されている AWS サービスアイコンは 1x1 から始まり 4x4、9x9 のように徐々に解像度が上がっていくようなドット絵で表現されていることが望ましく、最大 1,024x1,024 のドットとなる形で解像度が上がり、表示されているアイコンがより具体的になることでタイムアップに近づくにつれて難易度が下がる形にしたいです。ゲームエンジンは PyGame を利用することとし、カレントディレクトリの pygame-env に仮想環境として構築済みです。 / なお、このプロンプトを含めて readmd.md の形で仕様の出力もしたいです。
修正 1 回目
初回のプロンプトでほぼ動作するものができていました。
ただ、よく考えると 1x1 のドットではただの点なので何もわからないはずだ という当然の事実を考慮できていなかったのでそのへんの修正をお願いしてみました。
README.md にあるプロンプト原文をもとにカレントディレクトリに pygame-env の仮想環境で動作する PyGame を用いた AWS サービスアイコンで表された AWS サービスを回答するクイズゲームを作成しました。ただ、動作させてみるといくつかの問題があったので修正をしたいと思います。問題点1.日本語で表示されていると思われる部分が文字化けしている。問題点2.初期動作の 1x1 表示では何も判別できず難易度が高すぎました。初期値を 256x256 のドットとしてスタートさせるように変更できますか。
修正 2 回目
1回目の修正をしても日本語の文字化けが直っていない状況でした。
また、プレイをしてみたところアイコンの背景の色が微妙に違うような気がして、こんなサービス(というよりカテゴリ分類)あったかな、と悩む出題がありました。生成されているソースを覗いてみると assets/icons ディレクトリに任意のサービスアイコンを入れる想定になっていて、空の場合はダミーのアイコンを生成する、となっていました。
そのため AWS の公式のアイコンセットを取得して、それに基づいた出題ができるように指示をした場面です。
README.md にある「プロンプト原文」および「プロンプト原文(修正1回目)にあるようにゲームの作成と問題点の修正を試しました。python setup.py を実行し直し、再度ゲームを試してみたのですが、日本語部分の文字化けが治っていない状態でした。また、assets/ ディレクトリにサービスアイコンがない場合にはダミーのアイコンを生成するようになっているようですが、https://d1.awsstatic.com/webteam/architecture-icons/q1-2025/Asset-Package_02072025.dee42cd0a6eaacc3da1ad9519579357fb546f803.zip から入手解答したものを利用して、正確な AWS アイコンを用いたクイズゲームとしたいです。
修正 3 回目
残念ながら、ここでも日本語部分の文字化けは直っていません。
また、assets/icons にサービスアイコンを配置してそこから出題してくれるようにはなりましたが、選択肢がファイル名に依存する形であることが露呈しましたのでその修正を指示しました。
ただ、少し修正方針を具体的に指示してしまった部分は否めず、もっと AI に考えさせるプロンプトで試してみると能力を測るのに適切だった可能性はあります。
また 1024x1024 のドット絵でも判別がしにくかったので 2048x2048 を最大とした上で、最後はアイコン実物を表示させるように変更を加えます。さらに、各設問がタイムアップした時に進めなくなる部分を直してほしいと伝えています。
README.mdにある プロンプト原文* をもとにゲームの作成と修正をしています。やはり日本語の文字化けが治っていません。また、クイズの選択肢が AWS サービス名ではなく、アイコンファイルのファイル名をベースとしてしまっている箇所を直したいです。例えば Arch_Elastic-Load-Balancing_64@5x.png というファイルがある場合に、冒頭の Arch_と末尾の_64@5x.png のそれぞれを切り取って残った Elastic-Load-Balancing をベースに利用します。さらに -(ハイフン)を半角スペースに置き換えて Elastic Load Balancing という選択肢として利用できると良いかと思います。また、アイコンファイルをダウンロードしてそのまま展開した場合に同一のサービスに対して複数のアイコンサイズや画像形式のファイルが複数含まれるため「_64@5x.png」を含むアイコンのみを出題対象としてください。また、タイムアップした際にも次の問題へ遷移できるようにしたい修正も加えてください。さらにドット化したアイコンが1,024x1,024でも判別しにくいので、2,048X2,048を最大として最後はアイコンファイル現物を表示するようにしたいです
修正 4 〜 6 回目
ゲーム性はおおむね良くなってきていたのですがこの段階でも文字化けは解消していない状況です。 実際に動作する際のログを確認して、発生しているエラーメッセージを直接知らせることで修正を試みました。
README.md をもとに作成中のゲームの修正をしています。ゲーム性は問題なくなりましたが。日本語部分の文字化けが直っていません。「警告: 日本語フォントが見つかりませんでした。デフォルトフォントを使用します。」のエラーが表示されますが、実際には文字化けを起こしています。
上記のプロンプトを与えた実行の際に Noto Sans JP をダウンロードしたものの結局システムフォントが使われている状態となって文字化けが解消しました。
ただ、実行環境が macOS だったこともあり、ヒラギノ角ゴ を指定してハードコーディングされていました。
私個人の環境のみで動作させるのであればそのままでも良かったのですが、できたら配布したいと考えるのが人の常です。さらにそもそも上記のプロンプト実行時に Noto Sans JP をダウンロードしているのに結局使わないまま終わらせていたのももったいなく感じました。そのため、日本語フォントとして利用できるものをダウンロードしてマルチプラットフォームで動作できるように仕向けてみます。
マルチプラットフォームで動作できるようの assets/fonts/ に Noto Sans JP をインストールしてそのフォントファイルを利用する形の方が望ましいです。
プロンプトとして Noto Sans JP を指定しましたが、Amazon Q Developer for CLI がそれらしい URL からダウンロードを繰り返すなど試行錯誤する様子が見えました。
ただ、うまくいかなかったようで ipag.ttf を利用する方式に切り替えて、マルチプラットフォームで動作する方を優先してゴールに近づけていました。
4回目の修正の際に Amazon Q Developer for CLI 側が Noto Sans JP を導入しようと言い出したことに同調していただけなので、ここは結果オーライとしました。
動作も問題ないことを確認しました。配布して異なる環境でもゲームを導入できるようにしたいです。依存性のあるファイルやミドルウェア、パッケージの導入手順が setup.py に含まれているかを確認してください。そして、README.md の内容に前提条件と、導入方法を追記してください。
ゲームとしては成立していそうで、日本語者でも遊べるインターフェイスにはなったのでここで終了、としました。
最初に README.md を作成してくれていましたが、修正時には直してくれていませんでした。
さらに対話の中で依存性のあるファイルのダウンロードを行なっていました。そのことを前提としてゴールに近づけていたので、セットアップスクリプトを Amazon Q Developer for CLI が直していない点を確認しました。
そのためセットアップスクリプトの最新化と導入方法や動作の前提条件を README に書いてもらうよう指示をしました。
それら出来上がったプログラム一式を GitHub に上げていますので物好きな方がいらっしゃったらご覧いただけると幸いです。
スクリプト一式
出来上がったゲームで遊んでみる
動作の様子は以下のような感じになりました。
私自身がテクニカルサポートのロールで構成図をあまり見ないしそもそも書かないので、恐ろしく正答率が低いのはお許しください。
おわりに
投入したプロンプトをご覧いただくと分かる通り、詳細なゲームのロジックなどは説明しておらず、また得点計算の方法なども明記していないまま作成が完了しています。
それでも連続正解で「コンボ」などのゲーム性を適当に生み出してくれているところがまさに Generative AI なのだと感心するばかりです。
ただ、AWS のサービスアイコンのありかを教えたものを盲目的に利用したり、Noto Sans JP がうまく動作しない場面で ipag.ttf を代替案として勝手に採用している部分が気に掛かります。
私の見落としや認識違いによって思わぬ著作権の侵害などを犯している可能性はあります。
それらもプロンプトに組み込んでガードレールを設けることや、人間側がチェックして担保するなどは必要なんでしょうね。
出来上がった ゲームのプログラム 自体はもうメンテナンスしないのでこのまま置いておきますが、物好きな方がいらっしゃったらダウンロード&デプロイして遊んでいただけると幸いです。
出題範囲が存在しているアイコンベースなので、サービスとして意識していないようなものも含まれていて、なかなか難しかったです。
ではまた。