Amazon Q CLIでAIに仕事を依頼してネットワークルーティングゲームを作成してもらう。

# はじめに
2025年5月20日〜2025年6月20日まで`Amazon Q CLI`でゲームを作ってブログやソーシャルメディアに投稿することでAmazon QブランドのTシャツをもらえるキャンペーンが開催されております。

https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

私はこれまで`Amazon Q`を使ったことがありませんでしたが、せっかくキャンペーンが開催されていることもあり、今後`Amazon Q CLI`を使いこなしていくために~~Tシャツ欲しさに~~入門してみました。

# ゲーム作成の準備
`Amazon Q CLI`でゲームを作成していくため、サクッと準備を行います。

`Amazon Q CLI`は以下公式ページよりパッケージをダウンロードしてインストールを行います。

- [コマンドライン用の Amazon Q をインストールする](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-installing.html)

キャンペーンページの「**ステップバイステップガイド**」では`PyGame`のインストールを行う手順となっているため、`PyGame`も以下でインストールします。

```bash:PyGameのインストール
python3 -m pip install pygame
```

`Amazon Q CLI`のAIモデルのデフォルトは`Claude 3.7`のようですが、`Claude 4.0`も使用できるようなので、どうせなら新しいモデルを使用してみようと言うことで`Claude 4.0`にデフォルトを変更します。

`Amazon Q CLI`のコマンドより`/model`と入力して、`Claude 4.0`を選択することもできますが、この方法で設定した場合、ログオフすると元に戻ってしまうため、以下コマンドを実行して、デフォルト値を修正します。

```bash:デフォルトAIモデルの変更
q settings chat.defaultModel claude-4-sonnet
```

事前準備はできたため、以下のようにコマンド実行することで`Amazon Q CLI`のチャットモードが起動します。

あとはプロンプト上にやりたいことを入力すればOKです。

```bash:Amazon Q CLIチャットモードの起動
q chat
```

![スクリーンショット 2025-06-12 8.43.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/890c2334-3aa5-48b8-b672-2a673c0e65b9.png)

# AWS関連クイズゲームの作成
ひとまずどんなことができるか確認するため簡単なクイズゲームを作成してみます。

「**Ctrl + j**」で複数行の入力ができるようなので以下のようにお願いしてみました。

```bash:チャットで命令した内容
> PyGameを使用してAWS関連のクイズゲームを作成してください。
> コードはローカルに保存してください。
```

Enterで実行することで、日本語でコメントが返ってきて、コードの生成が開始されます。

途中、コード生成して良いかの確認が出たので、「**t**」と入力して、すべて信頼するようにしました。

```bash:コード生成
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:
```

コード生成後、早速実行してみましたが、文字化けして読めなかったので追加で以下をお願いしました。

```bash:追加で命令した内容
> 文字化けしているので日本語で表示できるように修正してください。
```

コードをローカルに保存するよう指定していたため、`aws_quiz_game.py`が生成されておりました。

生成されたコードは以下のようにPythonで実行することでゲームが開始されます。

```bash:生成されたゲームの実行
python aws_quiz_game.py
```

というわけでたった数行、チャットでお願いしただけで以下のようなクイズゲームが完成しました。

また、追加で改善点などを指定したとしても、先ほど生成したファイルをそのまま更新してくれるので簡単にアップデートできました。

![スクリーンショット 2025-06-12 9.02.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/0203bdb9-bcfb-426f-abe8-a7406e43366f.png)

# ネットワークルーティングゲーム
他にもいくつか簡単なゲームを作成して、ある程度使い方や依頼の仕方もわかったので本格的にゲームを作成してみようと思います。

今回はキャンペーンに投稿することが目的のひとつということもあり、あまり既存のゲームに似すぎているものはよろしくないと思うので、他の既存ゲームとあまり被らないものを作成します。

とはいえ良いゲームのネタを持っているわけではないので、以前、新人教育するときなどに欲しいなぁと思っていた「**ルーティング設定追加ゲーム**」を作成してみようと思います。

以下指定した内容一覧

```bash:最初にお願いしたこと一覧
> サーバやネットワーク機器に足りないルーティングを確認し、足りない設定を加えるまでの時間を競うゲームをPyGameで作成してください。
> コードは~/work/AmazonQ配下に生成してください。
> 日本語で表示できるようにしてください。
> 画面のレイアウトは添付の画像のように「問題」を表示する部分と、ネットワーク構成と各ノードのIP、ルーティングを表示する「ネットワーク構成」部分に分けてください。
> ネットワーク構成のノードアイコンを選択すると、ネットワーク構成の下にIP、ルーティングの表を表示してください。
> IP、ルーティングのアイコンを選択すると、画面のようにそれぞれの表に切り替えるようにしてください。
> ルーティングの表の最下行は空欄として、追加する設定を入力できるようにしてください。
> 必要な設定を表に入力できたら「問題」の部分にある「回答終了」ボタンを押すことで画面を切り替え、正解か不正解を表示するようにしてください。
> 不正解の場合は不正解の理由を表示するようにしてください。
> 初級編、中級編、上級編を選択できるようにしてください。
> 初級編はノード数が３つで誤りの箇所が１つ、中級編はノード数が５つで誤りの箇所が２つ、上級編はノード数が６つで誤りの箇所が３つとしてください。
> ルーティングの設定はデフォルトルートでの表記だけではなく、宛先のルーティングを設定した場合でも正解とするようにしてください。
```

また、2025年5月21日の以下公開記事より、`Amazon Q CLI`への画像のドラッグ＆ドロップに対応したとのことで、AIに具体的な完成イメージを共有するため、以下の完成イメージ図も合わせて指定しました。

- 完成イメージ図

![layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/e94f00d3-e84e-425e-b5ac-d62d712c61ba.png)

- [Amazon Q Developer CLI がターミナルでの画像入力をサポート](https://aws.amazon.com/jp/blogs/news/amazon-q-developer-cli-supports-image-inputs-in-your-terminal/)

上記の指定だけでは文字が見切れていたりノードアイコンがズレていたりしたので、以下追加でお願いしました。

```bash:追加でお願いしたこと一覧
> 初級編、中級編、上級編ともにノード数が６つとなっているので修正してください。
> ネットワーク構成には対象となるノードのみ表示させるようにしてください。（初級編なら３ノード、中級編なら５ノード、上級編なら６ノード）
> /Users/user/Desktop/スクリーンショット\ 2025-06-15\ 13.50.29.png
　初級編でも６つのノードが表示されているので修正してください。
> Routerのルーティングの表にIFが足りないので修正してください。
> IP、ルーティングの表示を表形式にして見やすくしてください。
> IPの表が最初に画像で指定した異なっているので修正して複数のIFのIPがわかるようにしてください。
> 不正解となったとき、何の設定が足りなかったのか詳細を表示するようにしてください。
> 初級編で確認してみましたが、ルーティング上、デフォルトルートを追加しなくても通信できるのに追加しないと不正解となるようになっています。
> ルーティングの表からインターフェースの列を削除してください。
> ルーティングテーブルの「新規追加:」の文字がネットワーク構成と被って見づらいのでルーティングテーブルの右側に表示するようにしてください。
> 上級編のノードアイコンがネットワーク構成の文字に被っているので被らないように修正してください。
> ノードアイコンを丸ではなく長方形に変更してください。
> ノードアイコンに記載されているノードの名前とIPアドレスの区切りが分かりづらいので、ノードの名前は太文字にしてください。
> 中級編の図がネットワーク構成の枠からはみ出しているのではみ出さないように修正してください。
> 設定を入力した際、空欄が含まれていた場合、空欄を削除するようにしてください。
```

実際に完成したゲームをプレイしている動画が以下です。

![Monosnap_20250615_160447.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/1cb7acec-bce2-4542-9b24-843cbd4cb6b7.gif)

ネットワーク構成部分とIP・ルーティング部分が横並びで表示されるようになっていたり、経過時間が表示されていなかったりと、私が最初に作成した完成イメージ図とは若干異なっておりましたが、概ねやりたかったことは盛り込めたと思います。

ちなみにゲーム本体だけではなく、操作方法など記載された`README`ファイルも生成してくれたため、他の人にプレイしてもらう場合でも一式そのまま渡すだけで済んでしまいます。

まだ改善点などは多いですが、見栄えは整ったので今回はこれくらいにしておこうと思います。

なお、AIに作成してもらったコードは以下GitHubに格納したので興味がある方は見てみてください。

- https://github.com/sakai00kou/qiita/tree/master/AmazonQ

# 実際にAmazon Q CLIを使ってゲームを作ってみた感想
人にお願いする場合でも同じですが、何かをお願いしたり、仕事を依頼したりする際、考えているイメージをわかりやすく説明するために文章だけではなく、図や表を駆使して、お互い考えているイメージを合わせていくという点に関して言えば人もAIも変わらないなと感じました。

また、今回のように何かしらのサービス開発を行うことを想定した場合、お願いする対象が人からAIに変わっただけなので、（AI用にブラッシュアップは必要ですが）いわゆる以下のようなソフトウェア開発工程の仕組みを組み込むことで良いコード・良いサービスが作れるのではないかと感じました。

- お願いしたいことを文章や図を使用しながら、やりたいことを正確に伝える（要件定義）
- 手戻りを減らすなら、詳細に仕様を決めた上でAIに指定する（設計）
- プロトタイプを見ながら決めていく場合はある程度ざっくり指定して対話で調整（設計）
- AIが指示された内容に沿ってコード作成（構築）
- 画面崩れなど結構多いので完成後の確認はしっかりやる（受入試験）

個人的な感想ですが、ソフトウェア開発において、上流工程の作業からしっかりした完成イメージを持っており、イメージ通りに設計・構築を進めていける人はAIに作業を依頼する場合でも品質が高いものを作れるんじゃないかなぁと感じました。

# おわりに
キャンペーンやっているみたいだし~~Tシャツにつられて~~勉強がてらゲームを作ってみようかなぁと思って最初のAWS関連クイズゲームといくつかのサンプルゲームを作ってみたのが合計３時間ほど、ネットワークルーティングゲームを考えてレイアウト図の作成と質問内容を考えて作り終わるまでの時間が４〜５時間ほどだったかと思います。

今回は記事を書くために整理しながらやりましたが、それでも休みの日の４時間程度でできましたので、慣れればもっと早くもっと品質が良いゲーム・サービスを作成することができるかと思います。

AIの台頭で、今回のようなプログラムを書く速度は格段に上がりましたが、とはいえ、中身がどのようなロジックで組まれているか、どのような設計思想で作られているのかを判断して、なにか問題があった場合に説明する説明責任としては少なくとも社会の常識が変わるまでは人であると思うので、日々の知識・技術の積み重ねは怠らずに進めていく必要があるなと感じました。