Amazon Q CLI を用いてゲーム作成に挑戦してみた
はじめに
初投稿です。お手柔らかにお願いします。
Amazon Q ブランドの T シャツを獲得できるキャンペーンが 2025年6月20日 まで開催されています。自分だけのゲームを作り、ブログ等に投稿してみましょう。
事前準備
キャンペーンに応募するための事前準備については こちら を参照してください。
筆者の環境
- Windows 11 Version 24H2
- Ubuntu 24.04.2 LTS (GNU/Linux 6.6.87.1-microsoft-standard-WSL2 x86_64)
- 真新しいです
ゲームのアイデアと仕様書について
移動中にこれらを考えてもらいました。筆者は Android スマホを利用していることもあり、Gemini App (Gemini 2.5 Pro) を利用しました。
アイデア出しを依頼
これからミニゲームを作ります。RPG が好きです。
Amazon Q CLI を使いますから、Amazon の森の中をテーマにしましょうか。
森の中から AWS サービスが登場します。
ユーモア溢れるゲームのアイデアを教えてください。
出力されたアイデア
長文です
Amazon Q CLI を利用してミニゲームを作成するとのこと、素晴らしいですね!
RPG 要素とユーモアを強化した具体的なゲームデザインを考案します。
ゲームタイトル案:
「アマゾン・フォレスト・クエスト:秘宝と七つのAWS守護者」
概要:
プレイヤーは、太古の昔からアマゾンの森に隠されたという伝説の秘宝「無限の拡張性(Scalability of Infinity)」を探す冒険者です。しかし、森にはその秘宝を守る「7つのAWS守護者」が立ちはだかります。守護者たちはそれぞれAWSサービスを模した姿と能力を持ち、プレイヤーは彼らの「試練」をクリアしなければなりません。各試練には、ランダムに選ばれたAWS守護者が登場し、その特性を理解した「コマンド(テキスト入力)」で対抗するRPG要素が組み込まれます。
ゲームの流れ:
-
プロローグ:
- Amazon Q CLI: 「あなたは伝説の秘宝『無限の拡張性』を求め、アマゾンの森の奥深くへと足を踏み入れた。しかし、この森はただの森ではない。太古のAWSの力が宿る、神秘の領域だ。七つの試練が、お前を待ち受ける...」
- プレイヤーは名前を入力。
- 初期ステータス(「やる気」「知識」「集中力」など)が提示される。
-
エリア探索と試練の遭遇:
- Amazon Q CLI: 「あなたは〇〇(森のエリア名、例:S3バケットの湿地帯、EC2インスタンスの迷いの森)にたどり着いた。どうする?(1. 周囲を探索する、2. 休憩する、3. 次のエリアに進む)」
- 「探索」を選択すると、ランダムに敵であるAWS守護者が出現したり、アイテム(ヒント)が見つかったりする。
- 「次のエリアに進む」と、自動的に試練が発生。
-
試練(AWS守護者とのバトル):
-
守護者のランダム出現: 7つの守護者の中からランダムに1体が選ばれ、プレイヤーの前に立ちはだかる。
- 例: 「【第一の試練】あなたはS3バケットの湿地帯の奥で、異様な存在に遭遇した...!守護者『S3の巨大バケツ』が、その巨大な口を大きく開け、君の持ち物を次々と飲み込もうとしている!どうする?」
-
行動選択: プレイヤーは、提示された選択肢の中から行動を選ぶか、AWSサービスの特性を想像させる「コマンド」をテキストで入力する。
- 例(S3の巨大バケツ戦):
- 「アイテムを投げつける」
- 「隠れてやり過ごす」
- 「ライフサイクルルールを設定する」(←正解に近いヒント)
- 「バケットポリシーを変更する」(←別の正解に近いヒント)
- CLIがプレイヤーの入力に対して、ユーモラスなリアクションを返す。
- 例(S3の巨大バケツ戦):
-
試練のクリア: 適切な行動やコマンドを選ぶと、守護者は「説得」されたり、「沈静化」されたりして試練クリアとなる。
- 例: 「あなたは『ライフサイクルルール』を唱えた!S3の巨大バケツは、飲み込んだアイテムを自動的に『古いものから削除』し始めた!バケツは満足げに頷き、静かに森の奥へと去っていった...。S3の試練をクリアした!」
-
失敗とペナルティ: 不適切な行動は、プレイヤーのステータス減少(例: やる気ダウン、知識が混乱)や、一時的な足止め(例: 強制的に休憩させられる)といったユーモラスなペナルティになる。
- 例: 「あなたはS3バケツに、食べかけのサンドイッチを投げつけた!しかし、バケツはそれを『無効なオブジェクト』と判断し、瞬時に『削除』した!君の『やる気』が5ポイント下がった!」
-
経験値と成長: 各試練をクリアすると、「AWS知識ポイント」や「冒険スキル」が上がり、新たなコマンドが使えるようになる。
- 例: S3の試練をクリアすると「ストレージ最適化」スキルが上昇し、EC2の試練で「インスタンスタイプ最適化」コマンドが使えるようになる、など。
-
守護者のランダム出現: 7つの守護者の中からランダムに1体が選ばれ、プレイヤーの前に立ちはだかる。
-
守護者の例と特徴(深掘り):
-
S3の巨大バール(バケツ):
- 特性: 無限のストレージ。何でも飲み込む。
- 弱点(対処法): ライフサイクルルール、バケットポリシー、データ削除、バージョン管理。
- ユーモア: 食べ物を投げつけると「オブジェクトサイズが不正です」と怒る。
-
EC2の暴走インスタンス(幻獣):
- 特性: 高速だが不安定。予測不能な動き。
- 弱点(対処法): インスタンスタイプの最適化、オートスケーリングの調整、停止・再起動。
- ユーモア: 「もっとデカい(インスタンスタイプ)のが欲しい!」と叫びながら暴れまわる。
-
Lambdaの気まぐれ妖精:
- 特性: イベント駆動で現れたり消えたり。短い時間しか姿を現さない。
- 弱点(対処法): トリガー設定、同時実行数の制御、メモリ割り当て。
- ユーモア: 「イベントがないと動けないの!」「え、まだファンクションが終わってないのに時間切れ!?」と文句を言う。
-
DynamoDBの頑固な石像:
- 特性: 強固で高速だが、構造に融通が利かない。
- 弱点(対処法): プライマリキー、パーティションキー、ソートキー。
- ユーモア: 「スキーマレスはわかるけど、適当なデータは受け付けないぞ!」と、投げられたアイテムをキーが違うと弾き返す。
-
CloudWatchの監視の目:
- 特性: 全てを監視し、アラームで警告。過剰に反応することもある。
- 弱点(対処法): アラーム設定の調整、ログフィルタリング、メトリクスの閾値変更。
- ユーモア: プレイヤーが少し動いただけで「高負荷アラーム!」と大声で叫び、耳元で警告音を鳴らす。
-
IAMの門番:
- 特性: 厳格なアクセス制御。正しい権限がないと通さない。
- 弱点(対処法): ロールとポリシーの付与、ユーザーのグループ管理。
- ユーモア: 「君にはこの先へ進む『ListBucket』権限がない!」「『DeleteAll』権限を要求だと!?とんでもない奴め!」と、権限を巡って問答を繰り広げる。
-
VPCの迷宮ゲート:
- 特性: ネットワークの境界を作り、安全に隔離する。設定を間違えるとどこにも繋がらない。
- 弱点(対処法): サブネット、ルートテーブル、セキュリティグループ、ACL。
- ユーモア: 「プライベートIPで話しかけてくれないと分からないよ!」「おっと、そのポートは閉じているよ!」と、ネットワーク設定の不備を指摘しながら通せんぼする。
-
S3の巨大バール(バケツ):
-
エンディング:
- 全ての試練をクリアすると、最終的に秘宝「無限の拡張性」が手に入る。
- 秘宝の力によって、プレイヤーは森の真の守護者となり、AWSサービスたちと共存する未来が描かれる。
- エンディングもユーモラスに、「あなたの『無限の拡張性』が、あなた自身の『人生の可用性』をも高めるだろう!」といったメッセージで締めくくる。
このRPG要素とユーモア、そしてAWSサービスへの言及を組み合わせることで、ITに詳しい人はニヤリとし、そうでない人もその状況のシュールさに笑える、ユニークなゲーム体験が提供できるでしょう。
仕様書の作成を依頼
素晴らしいアイデアです。
では、このゲームの仕様書を作ってください。
このゲームは PyGame で実行される予定です。
ゲーム開発のベストプラクティスを取り込みなさい。
出力されたゲームの仕様書
長文です
ゲーム仕様書:「アマゾン・フォレスト・クエスト:秘宝と七つのAWS守護者」(Pygame版)
1. はじめに
このドキュメントは、Pygame を使用して実装されるグラフィカルなRPGミニゲーム「アマゾン・フォレスト・クエスト:秘宝と七つのAWS守護者」の要件定義および主要な仕様を記述します。テキストベースの面白さを残しつつ、視覚的な要素とユーザーインターフェースを強化し、より没入感のあるゲーム体験の提供を目指します。
2. ゲームの目的
- プレイヤーに、視覚的なユーモアを交えながらAWSサービスとその特性への理解を深める機会を提供する。
- グラフィカルなRPGの楽しさと、インタラクティブなUIによる選択肢と物語の変化を体験させる。
- AWSサービスを擬人化したキャラクターの魅力を引き出す。
3. 対象ユーザー
- AWSサービスに興味がある、または現在学習中のユーザー。
- ライトなRPGやユーモアあふれるゲームが好きなユーザー。
- AWSの基本概念を知っているとより楽しめる。
4. 主要機能
4.1. ゲームの開始とプロローグ
- タイトル画面: ゲームタイトル、開始ボタン、クレジット表示。
- プレイヤー名の入力: テキスト入力ボックスでの名前入力。
- プロローグ表示: ゲームの世界観と目的を説明する、背景画像付きのテキストスクロール表示。
- 初期ステータスの表示: やる気、AWS知識、集中力をUI上に表示。
4.2. エリア探索とイベント発生
- マップ表示: 簡略化された森のマップが表示され、プレイヤーキャラクターが移動可能。各エリアは特徴的なビジュアルを持つ。
- エリア移動: キーボード入力またはUIボタンで、隣接するエリアへ移動。
- ランダムイベント: エリア移動中に、ランダムでアイテム発見、ヒントイベント、または試練の遭遇が発生。イベントはポップアップウィンドウや専用のUIで表示。
4.3. 試練(AWS守護者とのバトル)
-
守護者の出現: 7体のAWS守護者の中からランダムに1体が出現。背景がバトル画面に切り替わり、守護者のキャラクター画像と体力ゲージが表示される。
- 守護者の描画: 各守護者は、AWSサービスの特徴を捉えた、ユーモラスなイラストで表現されます。
-
守護者の特性と行動:
- 各守護者は、対応するAWSサービスの特性を模したユニークなアニメーションやエフェクトで行動。
- 守護者のセリフは、会話ウィンドウに表示される。
-
プレイヤーの行動選択:
- 画面下部に行動選択用のボタンUIが表示されます(例: 「攻撃」「アイテム」「逃げる」)。
- 「攻撃」を選択すると、さらに「コマンド選択UI」が表示され、**習得済みのコマンド(AWSスキル)**がリストとして表示されます。
- テキストコマンド入力: 特定の行動(例: 「話しかける」「提案する」)を選択すると、テキスト入力フィールドが表示され、プレイヤーが自由なテキストコマンドを入力できます。
-
試練の判定と演出:
- プレイヤーの選択または入力したコマンドに対し、ゲームロジックが正誤や効果を判定。
- 成功時: 守護者の体力ゲージが減少し、ユーモラスな成功エフェクトや勝利アニメーションが表示されます。守護者は「説得」または「沈静化」され、試練クリア。
- 失敗時: 守護者が反撃アニメーションを行い、プレイヤーのステータス減少エフェクトが表示されます。ユーモラスな失敗メッセージがポップアップで表示され、再挑戦やゲームオーバーの選択肢が提示されます。
- ステータスの変化: 試練の成否に応じて、プレイヤーのやる気、AWS知識、集中力といったステータスがリアルタイムでUI上に増減表示されます。
4.4. 成長要素
- AWS知識ポイントとレベル: 試練クリアで獲得し、UI上のゲージとレベル表示が更新されます。
- スキル解放: AWS知識レベルの上昇や特定の試練クリアで、新たなコマンドが「スキルツリー」のようなUIでアンロックされ、バトル中のコマンド選択肢に追加されます。
- やる気ゲージ: プレイヤーのモチベーションを示すゲージ。UI上で常に表示され、0になるとゲームオーバー(または一時中断)となります。休憩や特定のイベントで回復可能です。
4.5. アイテムとヒント
- アイテムUI: 所持アイテムはインベントリ画面で確認でき、クリックすることで説明が表示されます。
- ヒント表示: 探索中に見つかったヒントや情報は、専用の「ログブック」のようなUIに記録され、いつでも参照できます。
- 使用可能なアイテム: バトル中にアイテムUIから選択し、守護者に対して使用できます。
4.6. エンディング
- 全ての7つの試練をクリアすると、特別なアニメーション演出とともに伝説の秘宝「無限の拡張性」が手に入ります。
- プレイヤーの最終ステータスに応じた、ユーモラスなエンドロールが表示されます。
- ゲームクリア後、自由に森を探索できるフリーモードも検討。
5. 技術仕様
5.1. 開発環境
- プログラミング言語: Python 3.x
- フレームワーク: Pygame
- グラフィックツール: 必要に応じて任意の画像編集ソフト(例: GIMP, Krita)
5.2. アセット仕様
-
グラフィック:
- 背景画像: 各エリア(S3湿地帯、EC2迷いの森など)とバトル画面の背景画像。
- キャラクター: プレイヤーキャラクター、7体のAWS守護者(静止画とシンプルなアニメーション用スプライトシート)。
- UIエレメント: ボタン、ゲージ、ウィンドウ、アイコンなど。
- エフェクト: 攻撃、回復、成功/失敗時のエフェクト画像。
-
サウンド:
- BGM: 各エリア、バトル、タイトル画面、エンディング用のBGM。
- SE: UIクリック、攻撃、成功、失敗、アイテム使用などの効果音。
- フォント: ゲーム内で使用するフォントファイル(.ttfなど)。
5.3. データ構造 (Pygameでの表現)
- プレイヤーデータ: スプライトオブジェクト、ステータス属性、位置情報、所持アイテムリストなど。
- AWS守護者データ: スプライトオブジェクト、体力、攻撃パターン、有効なコマンド/キーワード、セリフ、ユーモラスな反応など。
- エリアデータ: 背景画像パス、イベント発生確率、守護者出現リストなど。
- アイテム/スキルデータ: アイテム画像パス、効果、説明、スキル名、関連コマンドなど。
5.4. Pygame特有のロジック
- ゲームループ: メインのイベントループで、ユーザー入力、ゲーム状態の更新、画面描画を処理。
- イベントハンドリング: キーボード入力、マウスイベント(クリックなど)をPygameのイベントシステムで処理。
-
スプライトとグループ: 描画対象となるキャラクターやオブジェクトを
pygame.sprite.Sprite
クラスで管理し、pygame.sprite.Group
で効率的に描画。 -
UIシステム: ボタン、テキストボックス、ゲージなどのUI要素をPygameで独自に構築するか、既存のUIライブラリ(例:
pygame_gui
)の活用も検討。 -
画像・音声ロード:
pygame.image.load()
,pygame.mixer.Sound()
,pygame.mixer.music.load()
を使用。 -
テキスト描画:
pygame.font.Font
とrender()
メソッドでテキストを画面に描画。 -
衝突判定: プレイヤーとオブジェクト間のインタラクションで
sprite.collide_rect
などの関数を使用。
6. 開発のベストプラクティス
- リソース管理: 画像、音声、フォントなどのアセットを効率的にロード・管理し、メモリ使用量を最適化。
- モジュール化: ゲームの各要素(プレイヤー、敵、UI、シーン管理など)をクラスや関数としてモジュール化し、コードの再利用性と保守性を高めます。
- ステート管理: ゲームの様々な状態(タイトル、探索、バトル、ポーズなど)を明確に定義し、ステートマシンパターンで遷移を管理します。
-
FPS制御:
pygame.time.Clock
を使用してフレームレートを一定に保ち、スムーズなアニメーションとゲームプレイを実現します。 - テストとデバッグ: グラフィックとロジックの両面でテストを行い、特に描画順序やイベント処理のバグに注意します。
- Amazon Q CLIとの連携: バックエンドでAmazon Q CLIを呼び出し、その応答をPygameのUIに表示する形式になります。Pygame側はあくまでフロントエンドの描画と入力処理を担当します。
- パフォーマンス: 大量のスプライトや複雑な描画処理を避けることで、パフォーマンスを最適化します。
7. 今後の展望(オプション)
- AWS守護者の追加と、それぞれに異なるグラフィックとアニメーションの実装。
- ミニマップ機能や、発見した秘宝のギャラリーモード。
- オンラインランキングや成果(アチーブメント)システム。
- カスタムスキンやアバターの追加。
このPygame版の仕様書は、テキストベースの魅力を保ちつつ、より視覚的でインタラクティブなゲーム体験を提供するための基盤となります。
ゲーム作り開始
Amazon Q CLI とのチャットセッションを開始します。
$ q chat
せっかくなので、Anthropic の最新モデルである Claude Sonnet 4 を選択しました。
> /model
? Select a model for this chat session ›
❯ claude-4-sonnet (active)
claude-3.7-sonnet
claude-3.5-sonnet
ゲームの仕様書を貼り付けて、プログラムを生成してもらいます。
> 次の仕様書をもとにゲームを作ってください。 [ここに仕様書の全文をペースト]
完成するのを待ちましょう。
エラーが出力されたとしても、くじけないでください。
Amazon Q CLI が一生懸命に修正してくれます。
完成品
文字の一部が見切れている・・・。しかしながら、良く出来ていると思います。
作業時間
- 事前準備:20分
- アイデア出し:15分
- コード生成+エラー解消:40分
おわりに
Amazon Q CLI の驚くべき能力により、ノーコードでゲームを作成することができました。事前準備も簡単で、筆者は WSL のインストールから行いましたが、問題なくスムーズに終えました。皆さんもこのキャンペーンを機に、Amazon Q CLI の可能性を体験してみてはいかがでしょうか。
Discussion