はじめに
こんにちは、愛猫リンゴちゃんのローです。 Amazon Q Developerのロゴが入ったTシャツがほしいので、こちらのイベントに参加してAmazon Q Developer CLIでゲームを作ってみました!
Amazon Q Developer CLIの利用方法については弊社ブログでも紹介されましたのでぜひご覧ください。
また、今回はVibe Coding手法で開発を進めていくので、ほぼ何も考えずに直感でゲームを作ります。
なぜ数独(ナンプレ)
今回は数独(ナンプレ)を作ってみたいと思います。かなり歴史のあるゲームで、聞いたことがある方もいらっしゃるのではないでしょうか。ネットワークを必要としないので、帰省中の飛行機でよくやっていました。
同じ種類のゲームでは、ソリティアやテトリスなどもありますが、数字の視覚的な関係性を見出す数独が一番はまりました。また、自分が新卒研修時にPythonで数独ゲームを開発したので、今回はAmazon Q Developer CLIで改善版を作ってみたいと思います。
開発過程
PyGameのインストール
まずはPyGamesのインストールからはじめます。
> install pygame for me I'll install pygame for you using pip. Let me run the installation command: 🛠️ Using tool: execute_bash ⋮ ● I will run the following shell command: pip install pygame ⋮ ↳ Purpose: Install pygame Python package using pip ... 略 ... Great! Pygame has been successfully installed. The installation completed with pygame version 2.6.1. You can now import and use pygame in your Python projects. To verify the installation works, you can test it with: python import pygame print(pygame.version.ver) This should display the pygame version (2.6.1) confirming it's properly installed and ready to use.
初期バージョンの作成
エラーが出なかったのでこのまま進めます。
create a new sudoku game using pygame library. provide an interface for players to interact with.
新卒研修時はPython課題で数独を作りましたが、ターミナル上でしか動けず、かつ操作がやや手間だったので、インターフェースを提供するようお願いしてみました。その結果、かなりいい感じのものが出来上がりました。

早速試してみたところ、機能的には特に問題なくクリアまで遊べます。 プロトタイプとしてはかなりハイクオリティなものが1プロンプトで出来上がりましたと思います。
機能拡張の要件定義
このまま終わったら面白くないので、自分が欲しい非機能要件(non-functional-requirements.md)をまとめてみました。
1. Undo Players should be able to undo their decisions 2. Error feedbacks Players should receive feedbacks when they conducted a wrong input 3. Difficulty Players can choose to play with a 5-levels difficulty (from easy to extremely hard) 4. Memo Players should be able to note possible choices for each cell
機能拡張の実装
Qに開発依頼をします。
Further develop based on the list in the non-functional-requirements.md.
途中で何回かエラーが発生しましたが、自律的に解決してくれました。 余談ですが、エラーが解決されずにこのままゲーム作りが終わりになってしまうのではないかとひやひやしました。

課題の発見と修正
バージョン1.0.1を実際に試したところ、実装された機能に細かい修正点がありますが、それらよりもっと大きいな課題が2つ見つかりました。
- Extremely Hardのヒント数が16と少なく、解が複数存在したり、または解が存在しない場合があります
- 唯一解のバリデーションロジックが正しく機能していない
研修の時に自力でロジックを組み立てた時も同じ問題に直面したので、自分が書いたもの(sudoku.py)をヒントとしてQに与えます。
The validation logic for unique solution is problematic. Refer to the method used in sudoku.py and rewrite the unique solution validation part.
ロジックが改修されましたが、唯一解のバリデーションに試行回数の上限が設けられており、課題が完全に解決できていないので、もう一回プロンプトします。
the limit for count_solutions() leads to a problem where the solution maybe not be unique. Futhermore, it is known that the least possible hint cells fo r a unique solution is 17.
テストケースまで作られて、いろいろと模索しましたが、ゲームがうまく起動しなかったため、3回のやり取りを繰り返しました。
修正の試行錯誤:
トライ1回目:Modify sudoku_game_enhances.py to conduct a thorough validation check on unique solution for the puzzle. Do not attempt to make assumption since this prerequisite is mandatory for sudoku. トライ2回目:The game freezes when switch to the Extremely hard difficulty トライ3回目:While the game does not freeze anymore, it automatically shut down when switched to Extremely hard difficulty.
最後はテスト結果も添えて、ゲームも無事起動し、Extremely Hardに切り替えた時も無事プレイできました。

難易度も高く、解くのに時間がかかるため、クリアまではプレイしませんでした。
ドキュメント作成とGitHubアップロード
機能の部分は自分が納得いくまで実装を進めました。
Githubにアップロードする前に、README.mdの生成を依頼しました。
※ IDE上のQでは/doc
機能でドキュメント生成できますが、本記事執筆時点のAmazon Q Developer CLIではまだサポートされていないので、普通にプロンプトで依頼します。
Generate a README file with regard to sudoku_game_enhanced.py and test_all_difficulties.py.
最後に、Github上にリポジトリを新規作成したので、アップロードまでお願いしました。
Help me push my local to https://github.com/Ivanhei/q-dev-cli-game
完成したリポジトリ:github.com
まとめ
途中で集中力が切れてリンゴちゃんと遊んでいたので、結果的に6~7時間かかりました。 ロジック自体がうまくいけば、3時間以内にはここまでできるかと思います。
新規開発なので最初からコンテキストが把握されて開発を進めました。既存プロジェクトの場合、どうやってコーディングエージェントにコンテキストを与えるかが課題になると思いました。
また、生成AIコンテンツに対して不安を抱いている中、信頼性を担保するために品質管理がカギになると思いました。例えば、今回の品質管理手法としてテストケースが用意されました。おかげで生成されたコードを精査するよりも、実現したいことだけに専念することができました。もちろん、後続開発する際にコードの品質も精査すべきだと思いますが、今回はゲームが思い通りに稼働できればゴール達成です。
コード品質について
Amazon Q Developerによって生成されたコードのタイムパフォーマンスは非常に高く、1プロンプトで完成度が高いものができました。 ただし、一発で作りたいものが完成することを期待するのはハードルが高く、現実的ではありません。 コードレビューを重ねてゴールに近づくことを目指すべきだと思いました。
今回の開発で一つ感心したのが、Q Developerの問題解決能力です。コード改修を進める中で、ゲームが起動時にフリーズしたりクラッシュしたりした際に自律プロセスが中断されましたが、その後プロンプトで状況を伝えるだけで、考えられる原因を調査し、解決を試みます。こういったデバッグプロセスを時短できることがコーディングエージェントの強みだと思います。
今後の発展予想
コーディングエージェントを活用した開発場面が今年からかなり増えていると感じています。エージェントの精度やコンテキストウィンドウが進展するにつれ、いずれコーディングすること自体、生成AIがすべてやってくれではないかと考えたりします。
ロータッヘイ(執筆記事の一覧)
24年4月入社 AWS資格絶賛勉強中 リンゴちゃん(デボンレックス)にいつも癒されています。