[Amazon Q CLI] チャット指示だけで神経衰弱ブロック崩しゲームを作ってみた
次のキャンペーンがあります。
頭の片隅に置きつつ、ゲームってなんかあるかなぁ、とぼんやり考えていたら、良く分かんない謎の閃きが出現したので、挑戦してみました。
おすすめの方
- Amazon Q CLIをインストールしたい方
- Amazon Qの雰囲気を知りたい方
今回作成したゲーム
ふと「同じ見た目だけと違う文字」で神経衰弱を作ったら面白いかな?と閃きました。そしてさらに「ブロック崩し」と合体させてみようという発想になりました。なぜか。
今回のポイント
チャットで指示できるが、別ファイルに書いた仕様を読み込ませることもできます。チャットだと下記の点が惜しいので、使い分けることができ便利です。
- 誤送信
- 送信ごとに少し待つので、「やっぱりこうしたい」と思っても待たなくて良い
- 別ファイルを仕様書として残せる
そして、段階的に小さく指示をするほうが、求める結果に近くなる印象です。一度にいろいろお願いすると予期せぬ不具合などが生まれ、その不具合を修正しようとしても簡単に修正できないこともあったためです。
Amazon Q CLIのインストール
下記を参考にインストールします。
私はHomebrewでインストールしました。
brew install amazon-q
必要に応じて、下記も参考にしてください。
Amazon Q CLIを起動し、チャット指示だけでゲームを作成する
今回のやり方として、簡単な仕様書(text)を作成しておきます。この仕様書を読んで作業をしてもらう方針で進めます。
コマンドラインでチャットセッションを開始する
q chat
初期仕様書を作成する
touch spec1.md
神経衰弱の簡単なルールと初期のゲーム案を記載しました。
# 神経衰弱ゲームの初期仕様
## 神経衰弱とは
- カードを裏面にして、場に並べます
- カードを2枚ずつめくります。
- カードの表面の文字やイラストが同じなら、ペアです
- ペアになったカードは表面を維持します
- ペア以外の場合は、カードを裏に戻します
- これを繰り返し、すべてのカードを取得します
## 今回の神経衰弱の仕様
- カードは、全8枚です(4つのペア)
- カード表面には、次の文字が記載されています。
- あ
- お
- ぬ
- め
## ゲームの仕様
- HTMLで動作すること
- 3つのファイルに分離すること
- HTMLファイル
- JavaScriptファイル
- CSSファイル
作成した仕様書を使ってゲームを作ってもらう
ゲームを作ってください。spec1.mdに仕様が書いてあるので、従ってください。
動き始めました。
仕様書を読み込んで、まずはHTMLファイルを作成するようです。
HTMLファイルを保存して良いかと聞かれました。めんどくさいので今回は「t(すべてYes)」で進めます。
続いてCSSファイル、JavaScriptファイルが作成されました。
作成完了しました。どうやら、追加機能もあるようです。
ゲームを起動する
チャットでお願いしたら、実行して良いかを聞かれ、開いてくれました。
index.htmlをブラウザで開いてください
実際のゲームが下記です。思ってたよりもちゃんとしてました。
git commitしてもらう
gitにコミットしてください。
次のコマンドを実行していました。
- git status
- git add
- git commit
とはいえ、コマンド実行を待つ時間も十数秒ほどあるので、自分で実行したほうが早いです。ただし、コミットメッセージはしっかりと書いてくれます。
仕様書2: 難易度機能を追加する
touch spec2.md
難易度を追加してもらいましょう。
# 神経衰弱ゲームの仕様2
難易度を選択できるようにしてください。
- かんたん
- 普通
- 難しい
カード表面の文字は、難易度によって変えてください。
## かんたん
- あ
- お
- ぬ
- め
## 普通
- ソ
- ン
- ㇱ
- ツ
## 難しい
- ‐ (HYPHEN)
- - (HYPHEN-MINUS)
- ‑ (NON-BREAKING HYPHEN)
- ⁃ (HYPHEN BULLET)
なお、カッコ部分はカードに含めないでください。ハイフンの記号のみをカードに記載してください。
仕様書2に対応してもらう
ゲームを更新しましょう。spec2.mdに仕様が書いてあるので、従ってください。
良い子ですねぇ。
終わりました。自動でブラウザを開いてくれました。賢いですね。
更新されたゲーム画面がこちらです。
難しいは難しいですね……。
git commitしてもらう
ゲームファイルをgitにコミットしてください。
仕様書3: 点数機能を追加する
touch spec3.md
点数を追加してもらいましょう。
# 神経衰弱ゲームの仕様3
点数を表示できるようにしてください。
## 点数の仕様
- 1ペアで1点を基本とする
- ペアを連続で見つけると、獲得点数が前回の倍になる
- 1回目: 1点
- 2回目: 2点
- 3回目: 4点
- 4回目: 8点
- ペアを連続で見つけれなかった場合、連続得点をリセットし、次回の獲得を1点とする
仕様書3に対応してもらう
ゲームを更新しましょう。spec3.mdに仕様が書いてあるので、従ってください。
最高得点は15点らしいです。更新されたゲームで遊んでみましょう。
仕様書4: 挑戦回数を表示する
touch spec4.md
挑戦回数を表示してみます。
# 神経衰弱ゲームの仕様4
ペアを選択した回数を表示してください。
仕様書4に対応してもらう
ゲームを更新しましょう。spec4.mdに仕様が書いてあるので、従ってください。
更新が始まりました。要素ごとに差分が出てくるのは分かりやすいですね。
では、ゲームを始めます。
試行回数が表示されました。
仕様書5: 「難易度:難しい」は、ペアを正解すると文字名称を表示する
touch spec5.md
# 神経衰弱ゲームの仕様5
「難易度:難しい」は、ペアを正解すると、ハイフンの名称をカードに表示してください。
仕様書5に対応してもらう
ゲームを更新しましょう。spec5.mdに仕様が書いてあるので、従ってください。
ここからは、更新途中の様子(スクリーンショット)を省略することがあります。
ゲームは下記になりました。
「spec5.md」にはハイフンの種類を記載していませんが、画面には表示されています。過去のコンテキスト(またはspec2.md)を参照していそうですね。
仕様書6: 経過時間を表示する
touch spec6.md
# 神経衰弱ゲームの仕様6
各難易度について、ゲーム開始時からの経過時間を表示してください。
すべてのペアが揃った時点で、経過時間の計測を終了してください。
仕様書6に対応してもらう
ゲームを更新しましょう。spec6.mdに仕様が書いてあるので、従ってください。
経過時間が表示されました。
仕様書7: 地獄モードを追加
touch spec7.md
# 神経衰弱ゲームの仕様7
地獄モードを追加してください。
## 地獄モード
- それぞれの難易度ごとに、地獄モードを選択できる
- 地獄モードは、神経衰弱にブロック崩しを取り入れたゲームである
- ブロックの代わりに神経衰弱のカードを表示する
- カードは、すべて横1列に並んでいる
- ボールがカードにあたったとき、カードを表面にする
- 他のルールは神経衰弱と同じである
- ボールの初期数は、難易度で異なる
- かんたん: 5個
- 普通: 4個
- 難しい: 3個
仕様書7に対応してもらう
ゲームを更新しましょう。spec7.mdに仕様が書いてあるので、従ってください。
段階的に実装するとのこと。
ゲームはこうなりました。地獄っぽいボタンがありますね。
なんか思ってたんと違う……。地獄やんけ。一度の指示が多すぎたのかもしれません。
仕様書8: 地獄モードを更新
touch spec8.md
# 神経衰弱ゲームの仕様8
地獄モードを更新します。
## 地獄モード
- ボールは、1度に1個を扱う
- ボールのストック数は、下記とする
- かんたん: 5個
- 普通: 4個
- 難しい: 3個
- 操作できるボールが0個になったとき、ゲームを終了する
- カードは、全8枚を横1列に並べる
仕様書8に対応してもらう
ゲームを更新しましょう。spec8.mdに仕様が書いてあるので、従ってください。
ゲームが更新されました。いい感じです。
仕様書9: 地獄モードを更新
touch spec9.md
Phaserを利用して、最初から作り直してもらいます。
# 神経衰弱ゲームの仕様9
ゲームフレームワーク「phaser.io」を利用して、ゲームのクオリティをもっと高めましょう。
- phaser.ioを利用する
- 最初から作り直す
- 今までの spec1.md 〜 step8.md の内容を順番に実装する
仕様書9に対応してもらう
ゲームを更新しましょう。spec9.mdに仕様が書いてあるので、従ってください。
更新が終わりました。
ゲームは下記となりました。よりゲームっぽくなった気がします。
実際に触ってみると、細かいところがまだまだ気になります。
追加のプロンプトと結果
テキストファイルではなく、チャットで直接指示をしてみました。
「難しい」モードでハイフンの名称を表示していますが、カードからはみ出ています。フォントサイズを小さくしたり、改行するなどをして、カードからはみ出さないようにしてください。
「難しい」モードでハイフンの名称を表示していますが、まだテキストが少しだけはみ出ています。フォントサイズを少し小さくしてください。
「難しい」モードでハイフンの名称を表示していますが、カードが表面になったとき、ハイフンが左寄せになっています。中央寄せにしてください。
/usage コマンドを実行してみる
ファイルの変更差分が多かったのか、「Q response」が多めですね。
> /usage
Current context window (86520 of 200k tokens used)
|████████████████████████████████████████████████████████████████████████████████ 43.26%
█ Context files: ~220 tokens (0.11%)
█ Q responses: ~74660 tokens (37.33%)
█ Your prompts: ~11640 tokens (5.82%)
💡 Pro Tips:
Run /compact to replace the conversation history with its summary
Run /clear to erase the entire chat history
Run /context show to see tokens per context file
さいごに
Amazon Q CLIでゲームを作成してみました。ゲーム作成のめんどくさいコーディングをすべてお任せできるので、人間はゲームの楽しい部分に集中できるのが良いですね。
また、Step by Stepで指示をしたほうが、求めている更新をしてくれる印象です。
今回は試していませんが、初手で「最高の神経衰弱を〜」みたいに指示していると、最初からスコアや時間計測が実装されていたかもしれません。
おまけ
誤爆しても意図を汲んでくれました。すごい。
参考
- Amazon Q CLI でゲームを作ろう Tシャツキャンペーン | Amazon Web Services ブログ
- コマンドライン用の Amazon Q をインストールする - Amazon Q Developer
- Amazon Q CLIをインストールして実行したら「command not found: q」と表示されたときにやること(brew install) | DevelopersIO
- GettingStarted - pygame wiki
- コマンドラインでのチャットの使用 - Amazon Q Developer
- Phaser - A fast, fun and free open source HTML5 game framework