【Amazon Q CLI】プログラミング苦手なSEだけどゲームアプリ作ってみたよ

## はじめに
**職業SEなのにプログラミングが嫌い、やりたくない、できない** 私が、今話題のこちらのキャンペーンに参加しました。
[「Amazon Q CLI でゲームを作ろう Tシャツキャンペーン」](https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/)

Amazon Q CLIを使用し、プロンプトだけでゲームアプリを開発します。そしてキャンペーンに応募すればTシャツも貰えます。

## ゲームの概要
ゲーム内容：
　トランプを使用した記憶力を試すシンプルなゲーム
  　・複数枚のトランプの絵柄を５秒見せて裏返す
  　・次にその中から１枚お題をあげ、お題のカードがどこにいるかをあてる
  　・ゲームモードと難易度も選択できる
  
特徴：
　・簡単操作（マウスクリックのみ）
　・ランダム配置で毎回違う挑戦
　・ゲームモードと難易度を選べる
      　　ゲームモード　
      　　　5Rounds：5回勝負でスコアを競う
      　　　Endless：失敗するまで続ける　
      　　難易度　
      　　　Easy　：カード3枚
      　　　Normal：カード5枚
      　　　Hard　：カード6-8枚をランダム
         
## 進め方
**※Amazon Q CLIとのやり取りは、すべて日本語で行いました。**

１．事前準備（環境準備と作るゲームのイメージ固め）
２．まずはシンプルなバージョンをQ CLIに依頼して実装
３．動かしてみて、デザインや動作で気になった点を順次フィードバックして修正
４．機能追加（ゲームモード・難易度）で完成度を高めていく
５．Amazon Q CLIに「もっと面白くするには？」と聞いて、遊び心のある機能も追加

## １.事前準備
### 環境準備
会社用PCを使用すると、社内プロキシの問題で思うようにできなかったため、インターネット接続できるWindowsOSのEC2をたて、そこから作業しました。
手順はこちらを参考にしました。
[Fleet ManagerでハマりつつAmazon Q CLI でゲームを作る](https://qiita.com/kuma67/private/bc89abac74342a44d683)

### 作るゲームのイメージ固め
漠然として思いつかない人はAIと相談しながら考えるとやりやすいです。
私の場合は、シンプルで簡単に時間つぶしができるようなものをつくろうと、パッと思いついたもので作り始めました。

## ２．まずはシンプルなバージョンをAmazon Q CLIに依頼して実装
Amazon Q CLIを起動し、最初に下記プロンプトで作ってもらいました。
### 実際に使ったプロンプト
```
日本語で会話しながら一緒にゲームを作りましょう。
まずは、前提条件が２つあります。
　 ①PYGAMEで動くゲームをつくる
 　②ファイルは表示でなく出力する　でお願いします
では、ゲームの仕様を考えていきましょう。
トランプを使用して、記憶力を試すゲームを作りたいです。
例えば、初級では、トランプの絵柄3枚を５秒見せて裏返す。
次に3枚の中から１枚お題をあげ、そのカードがどこにいるかをあてるゲームです
```
これで出来上がったものがコチラ

　↓　↓　↓　↓
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/dd80e167-5193-45bd-a2ef-715da8b21b34.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/72fa6279-d5e4-412e-995a-e870ebe5327b.png)

文字化けしてました。
また、遊んでみると毎回同じ絵柄しか出てきませんでした。

## ３．動かしてみて、デザインや動作で気になった点を順次フィードバックして修正
改善点を伝える→動かしてみる→気になる点があればまた改善点を伝える・・・
これを繰り返し、Easyレベルのものは形になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/65d13ec9-1803-4b13-8f1f-af2bc4ef611f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/e62acdf3-c328-4b01-91d5-26e50b5026fa.png)

※Ec2の仕様か日本語化はできなかったため、諦めて英語表記にしました

## ４．機能追加（ゲームモード・難易度）で完成度を高めていく
ゲームの最終形として、ゲームモード選択と難易度選択はいれたかったので、これもAmazon Q CLI に伝えて作ってもらいました。
### 実際に使ったプロンプト
```
ゲームの追加要望です。
・最初の画面でゲームモードと難易度を選択したいです
・モードは「5回勝負」（5回繰り返してスコアを競う）「エンドレスモード」（失敗するまで続けて、連続正解数を競う）の2種類
・難易度は初級（カード3枚）、中級（カード5枚）、上級（カード6～8枚がランダム）にできますか
```
これで出来上がったものがコチラ

　↓　↓　↓　↓
 
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/3bd4ca2f-ec24-47a8-a7ac-5471586c5370.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/23b23eda-386b-4373-acdc-669f77b9ff07.png)

いい感じですね。
そして、また動かしながら改善点を伝えて、Version.1としてのゲームが完成しました。

## ５．Amazon Q CLIに「もっと面白くするには？」と聞いて、遊び心のある機能も追加
Version.1のゲームで十分遊べますが、もっと面白くできないか聞いてみました。
### 実際に使ったプロンプト
```
ここからさらに面白くするアイディアがあれば教えて
```

　↓　↓　↓　↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/71ac3117-693a-46af-b894-d6e7a639cd16.png)

10個近く出してくれました。
その中からいくつかピックアップして機能をさらに追加します。

### トラブル発生！？
機能追加を依頼したあと、Thinking... が中々終わらない。
例外も出ている？見守ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/eb9aac94-447c-46e8-be0b-af9f11c4bd23.png)

何とかビルドは終わったみたいですが、今度はゲームが起動できません。
Amazon Q CLIに何とかしてもらいましょう。
### 実際に使ったプロンプト
```
ゲームが起動できません。問題点がないか確認してください
```

 ↓　↓　↓　↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/06dc1c9a-f3fd-43ac-9e10-c760c07ff21c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/55286a5b-50bc-4a06-8c1c-603f62cd8095.png)

自動でエラーを発見し、修正・テストしてくれました。
すごい。

### 最終形
カードはよりトランプっぽくし、設定画面も追加しました。
他にもいろいろ機能追加しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/90212dcd-1007-44e8-a785-494195bbb9a5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/ed74c2f3-444c-47c4-83e7-6ad1ca519b2c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043663/04c29dbc-ca53-4217-8e44-dd3ac0c2f923.png)


## Amazon Q CLIとの開発を通して感じたこと
　・プログラミングが苦手でも、対話形式で少しずつ作れる安心感がある
　・曖昧な指示でも意図を汲み取ってくれる柔軟さがすごい
　・「詰まったら聞ける」安心感が、開発を楽しいものにしてくれた
 
## おわりに
SEとして入社し、10年ほどプログラミングから逃げてきた私でも、ちゃんとゲームを作ることができました。
プロンプトで指示を出し、レビューしながら作り上げていく過程が楽しかったです。
小学生でも出来る内容なので、子どもと遊びながらやってみるのもいいかもしれません。

### 完成コード
コードなどはコチラなので、遊んでみてください。
https://github.com/mfunamfuna/card-memory-game

※Githubへの登録も、Amazon Q CLIにフォローしてもらいました。
　ローカル環境でのリポジトリ作成やコミット、Readmeの作成などやってくれて大変楽でした