⚔️

Amazon Q CLI を用いてゲーム作成に挑戦してみた

に公開

はじめに

初投稿です。お手柔らかにお願いします。
Amazon Q ブランドの T シャツを獲得できるキャンペーンが 2025年6月20日 まで開催されています。自分だけのゲームを作り、ブログ等に投稿してみましょう。
Https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

事前準備

キャンペーンに応募するための事前準備については こちら を参照してください。

筆者の環境

  • 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要素が組み込まれます。

ゲームの流れ:

  1. プロローグ:

    • Amazon Q CLI: 「あなたは伝説の秘宝『無限の拡張性』を求め、アマゾンの森の奥深くへと足を踏み入れた。しかし、この森はただの森ではない。太古のAWSの力が宿る、神秘の領域だ。七つの試練が、お前を待ち受ける...」
    • プレイヤーは名前を入力。
    • 初期ステータス(「やる気」「知識」「集中力」など)が提示される。
  2. エリア探索と試練の遭遇:

    • Amazon Q CLI: 「あなたは〇〇(森のエリア名、例:S3バケットの湿地帯、EC2インスタンスの迷いの森)にたどり着いた。どうする?(1. 周囲を探索する、2. 休憩する、3. 次のエリアに進む)」
    • 「探索」を選択すると、ランダムに敵であるAWS守護者が出現したり、アイテム(ヒント)が見つかったりする。
    • 「次のエリアに進む」と、自動的に試練が発生。
  3. 試練(AWS守護者とのバトル):

    • 守護者のランダム出現: 7つの守護者の中からランダムに1体が選ばれ、プレイヤーの前に立ちはだかる。
      • 例: 「【第一の試練】あなたはS3バケットの湿地帯の奥で、異様な存在に遭遇した...!守護者『S3の巨大バケツ』が、その巨大な口を大きく開け、君の持ち物を次々と飲み込もうとしている!どうする?」
    • 行動選択: プレイヤーは、提示された選択肢の中から行動を選ぶか、AWSサービスの特性を想像させる「コマンド」をテキストで入力する。
      • 例(S3の巨大バケツ戦):
        1. 「アイテムを投げつける」
        2. 「隠れてやり過ごす」
        3. ライフサイクルルールを設定する」(←正解に近いヒント)
        4. バケットポリシーを変更する」(←別の正解に近いヒント)
        • CLIがプレイヤーの入力に対して、ユーモラスなリアクションを返す。
    • 試練のクリア: 適切な行動やコマンドを選ぶと、守護者は「説得」されたり、「沈静化」されたりして試練クリアとなる。
      • 例: 「あなたは『ライフサイクルルール』を唱えた!S3の巨大バケツは、飲み込んだアイテムを自動的に『古いものから削除』し始めた!バケツは満足げに頷き、静かに森の奥へと去っていった...。S3の試練をクリアした!」
    • 失敗とペナルティ: 不適切な行動は、プレイヤーのステータス減少(例: やる気ダウン、知識が混乱)や、一時的な足止め(例: 強制的に休憩させられる)といったユーモラスなペナルティになる。
      • 例: 「あなたはS3バケツに、食べかけのサンドイッチを投げつけた!しかし、バケツはそれを『無効なオブジェクト』と判断し、瞬時に『削除』した!君の『やる気』が5ポイント下がった!」
    • 経験値と成長: 各試練をクリアすると、「AWS知識ポイント」や「冒険スキル」が上がり、新たなコマンドが使えるようになる。
      • 例: S3の試練をクリアすると「ストレージ最適化」スキルが上昇し、EC2の試練で「インスタンスタイプ最適化」コマンドが使えるようになる、など。
  4. 守護者の例と特徴(深掘り):

    • S3の巨大バール(バケツ):
      • 特性: 無限のストレージ。何でも飲み込む。
      • 弱点(対処法): ライフサイクルルール、バケットポリシー、データ削除、バージョン管理。
      • ユーモア: 食べ物を投げつけると「オブジェクトサイズが不正です」と怒る。
    • EC2の暴走インスタンス(幻獣):
      • 特性: 高速だが不安定。予測不能な動き。
      • 弱点(対処法): インスタンスタイプの最適化、オートスケーリングの調整、停止・再起動。
      • ユーモア: 「もっとデカい(インスタンスタイプ)のが欲しい!」と叫びながら暴れまわる。
    • Lambdaの気まぐれ妖精:
      • 特性: イベント駆動で現れたり消えたり。短い時間しか姿を現さない。
      • 弱点(対処法): トリガー設定、同時実行数の制御、メモリ割り当て。
      • ユーモア: 「イベントがないと動けないの!」「え、まだファンクションが終わってないのに時間切れ!?」と文句を言う。
    • DynamoDBの頑固な石像:
      • 特性: 強固で高速だが、構造に融通が利かない。
      • 弱点(対処法): プライマリキー、パーティションキー、ソートキー。
      • ユーモア: 「スキーマレスはわかるけど、適当なデータは受け付けないぞ!」と、投げられたアイテムをキーが違うと弾き返す。
    • CloudWatchの監視の目:
      • 特性: 全てを監視し、アラームで警告。過剰に反応することもある。
      • 弱点(対処法): アラーム設定の調整、ログフィルタリング、メトリクスの閾値変更。
      • ユーモア: プレイヤーが少し動いただけで「高負荷アラーム!」と大声で叫び、耳元で警告音を鳴らす。
    • IAMの門番:
      • 特性: 厳格なアクセス制御。正しい権限がないと通さない。
      • 弱点(対処法): ロールとポリシーの付与、ユーザーのグループ管理。
      • ユーモア: 「君にはこの先へ進む『ListBucket』権限がない!」「『DeleteAll』権限を要求だと!?とんでもない奴め!」と、権限を巡って問答を繰り広げる。
    • VPCの迷宮ゲート:
      • 特性: ネットワークの境界を作り、安全に隔離する。設定を間違えるとどこにも繋がらない。
      • 弱点(対処法): サブネット、ルートテーブル、セキュリティグループ、ACL。
      • ユーモア: 「プライベートIPで話しかけてくれないと分からないよ!」「おっと、そのポートは閉じているよ!」と、ネットワーク設定の不備を指摘しながら通せんぼする。
  5. エンディング:

    • 全ての試練をクリアすると、最終的に秘宝「無限の拡張性」が手に入る。
    • 秘宝の力によって、プレイヤーは森の真の守護者となり、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.Fontrender()メソッドでテキストを画面に描画。
  • 衝突判定: プレイヤーとオブジェクト間のインタラクションで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 が一生懸命に修正してくれます。

完成品

文字の一部が見切れている・・・。しかしながら、良く出来ていると思います。

https://github.com/ainatsuptr/game-with-amazon-q-cli

作業時間

  • 事前準備:20分
  • アイデア出し:15分
  • コード生成+エラー解消:40分

おわりに

Amazon Q CLI の驚くべき能力により、ノーコードでゲームを作成することができました。事前準備も簡単で、筆者は WSL のインストールから行いましたが、問題なくスムーズに終えました。皆さんもこのキャンペーンを機に、Amazon Q CLI の可能性を体験してみてはいかがでしょうか。

GitHubで編集を提案

Discussion