👕

Tシャツ欲しさにAmazon Q CLIでゲーム作ったら、未来のAWS学習法が爆誕してしまった件 #AmazonQCLI

に公開

Amazon Q CLIで作るStrands Agent活用のAWSアーキテクチャ学習クイズゲーム開発記

はじめに

Amazon Q CLIを使って、Strands AgentベースのAWSアーキテクチャ学習ゲームを開発した体験を記録します。
この記事では、実際の開発過程で起こった試行錯誤、問題解決、そして最終的な成果物について、
Amazon Q CLIとの対話を通じて進めた開発の全貌をお伝えします。

どんなものができた?

早速出来上がりから。
投稿したPostがこちら

https://x.com/snicker_jp/status/1933290968737845437

🎯 プロジェクトの始まり

同僚からの案内

同僚が参加したAWSのイベントにて案内された告知を
共有してくれました。

6/20までにAmazon Qを使用してゲームを作ったらオリジナルTシャツがもらえるらしいです

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

Amazon Q CLIでの相談

最初に私がAmazon Q CLIに相談したのは、
Strands Agent を使ったゲームを作りたいです。初めての利用なので調査から行って。その後、誰でも楽しめそうなネタを3つ考えてください。AWSリソースに関連するものがいいです。」という内容でした。

Amazon Q CLIは即座にStrands Agentの調査を開始し、以下の機能を確認してくれました:

  • Strands Agentの概要: Python SDKでAIエージェントを構築
  • 主な特徴: モデル、ツール、プロンプトの組み合わせ
  • デフォルトモデル: Amazon Bedrock(Claude 3.7)
  • 豊富なツール: AWS連携、ファイル操作、計算、画像生成など

3つのゲームアイデアの提案

Amazon Q CLIが提案してくれた3つのアイデア:

  1. 🏗️ AWS アーキテクチャ・クイズマスター ← 最終的に選択

    • シナリオベースのアーキテクチャ設計問題
    • リアルタイムコスト分析
    • スコアリングシステム
  2. 🚨 AWS インシデント・レスポンス・シミュレーター

    • 実際のAWSインシデントを模擬
    • 制限時間内での対応
  3. 🎯 AWS コスト最適化チャレンジ

    • 既存環境の最適化競争
    • 月次コスト削減率での評価

私が「1がいいです。」と選択すると、Amazon Q CLIは即座に実装に取り掛かってくれました。

🛠️ 実装フェーズ

プロジェクト構造の作成

Amazon Q CLIは以下のファイル構成を作成:

aws_architecture_quiz/
├── requirements.txt
├── __init__.py
├── quiz_game.py          # Strands Agent版
└── README.md

核となるゲームデータの設計

Amazon Q CLIが設計したゲームデータ構造:

SCENARIOS = [
    {
        "id": 1,
        "title": "スタートアップのWebアプリケーション",
        "description": "月間10万PVのWebアプリケーションを構築したい。コスト効率と拡張性を重視。",
        "requirements": ["高可用性", "自動スケーリング", "データベース", "静的コンテンツ配信", "SSL証明書"],
        "correct_services": ["EC2", "ALB", "Auto Scaling", "RDS", "S3", "CloudFront", "ACM"],
        "difficulty": "初級",
        "max_score": 100
    },
    # 中級・上級シナリオも含む
]

カスタムツールの実装

Amazon Q CLIが実装してくれた主要なカスタムツール:

1. コスト計算ツール

@tool
def check_architecture_cost(services: List[str], region: str = "us-east-1") -> Dict[str, Any]:
    """選択されたAWSサービス構成の概算月額コストを計算"""
    service_costs = {
        "EC2": {"t3.medium": 30.37, "m5.large": 70.08},
        "RDS": {"db.t3.small": 33.58},
        "ALB": 22.27,
        "S3": 23.00,
        # ... 他のサービス
    }
    # コスト計算ロジック

2. アーキテクチャ評価ツール

@tool
def evaluate_architecture(selected_services: List[str], scenario_id: int) -> Dict[str, Any]:
    """選択されたアーキテクチャを評価してスコアを計算"""
    # 正解率計算、ペナルティ計算、グレード判定

環境の問題と解決

実装中に環境の問題が発生しました:

# パッケージインストールでエラー
pip3 install -r requirements.txt
# bash: line 1: pip3: command not found

Amazon Q CLIは即座に問題を認識し、依存関係なしで動作するデモ版を作成してくれました:

# demo_game.py - 依存関係なしで動作

🎮 ゲーム機能の実装

3つの難易度レベル

Amazon Q CLIが設計した段階的な学習システム:

難易度 シナリオ 最大スコア 主要サービス
初級 スタートアップWeb 100点 EC2, RDS, S3, CloudFront
中級 データ分析基盤 150点 Kinesis, EMR, Redshift, SageMaker
上級 マイクロサービス 200点 EKS, API Gateway, X-Ray, WAF

評価システム

Amazon Q CLIが実装した詳細な評価システム:

  • スコア計算: 基本スコア × 正解率 - ペナルティ
  • グレード判定: S/A/B/C/D の5段階評価
  • 詳細フィードバック: 正解/不正解/見逃したサービスの表示

🔧 ユーザビリティの改善

第1の改善要求

私から
ユーザー名が必須になるようにして下さい。ユーザーの入力値で提案以外のものが出たら、Yes noで答えるように応答して下さい」という要求を出しました。

Amazon Q CLIは以下の機能を実装:

プレイヤー名必須化

def get_player_name():
    """プレイヤー名を必須入力として取得"""
    while True:
        player_name = input("プレイヤー名を入力してください: ").strip()
        if player_name:
            return player_name
        else:
            print("❌ プレイヤー名は必須です。名前を入力してください。")

入力検証とYes/No確認

def validate_service_input(selected_input, available_services):
    """提案以外のサービスがある場合はYes/Noで確認"""
    # 不正なサービスを検出
    if unknown_services:
        print(f"⚠️  以下のサービスは提案リストにありません:")
        for service in unknown_services:
            print(f"  • {service}")
        
        while True:
            confirm = input("これらのサービスを含めて続行しますか? (Yes/No): ")
            # Yes/No処理

プロンプト表示の問題

実際にデモを実行した際、「プレイヤー名を入力してください:が初回実行時プロンプトで見えていないです。」という問題が発生しました。

Amazon Q CLIは複数のアプローチを試行:

  1. 試行1: flush=Trueの使用
  2. 試行2: sys.stdout.write() + sys.stdout.flush()
  3. 最終解決: 標準的なinput()関数の使用
# 最終的に採用された方法
player_name = input("プレイヤー名を入力してください: ").strip()

🧪 テストと検証

機能テストの実装

Amazon Q CLIは以下のテストファイルを作成:

  • test_game.py: 正解例でのテスト実行
  • test_validation.py: 入力検証機能のテスト
  • interactive_test.py: 対話的なテストデモ

実際のテスト結果

# 正解例のテスト結果
🧪 テスト: シナリオ1 - 正解例
選択サービス: EC2, ALB, Auto Scaling, RDS, S3, CloudFront, ACM
スコア: 100/100点
グレード: S
正解率: 100.0%
月額コスト: $194.22

📊 完成したゲームの特徴

実装された機能

  • ✅ 3つの難易度レベル
  • ✅ 概算コスト分析
  • ✅ 詳細な評価システム
  • ✅ プレイヤー名必須入力
  • ✅ 入力検証とYes/No確認
  • ✅ エラーハンドリング

ゲーム体験

実際のゲーム画面:

🎮 AWS アーキテクチャ・クイズマスター (デモ版)
============================================================
プレイヤー名を入力してください: 田中太郎

👋 ようこそ、田中太郎さん!
AWSアーキテクチャの知識を試してみましょう!

📋 利用可能なシナリオ:
1. スタートアップのWebアプリケーション (初級) - 最大100点
2. エンタープライズのマイクロサービス (上級) - 最大200点
3. データ分析プラットフォーム (中級) - 最大150点

シナリオを選択してください (1-3, q=終了): 1

🎯 **スタートアップのWebアプリケーション**
📝 月間10万PVのWebアプリケーションを構築したい。コスト効率と拡張性を重視。

💡 **ヒント - 要件別推奨サービス:**
  • 高可用性: ALB, Auto Scaling, Multi-AZ RDS
  • データベース: RDS, DynamoDB, ElastiCache
  • 静的コンテンツ配信: S3, CloudFront

選択: EC2, ALB, Auto Scaling, RDS, S3, CloudFront, ACM

📊 **評価結果**
🏆 スコア: 100/100点
📈 グレード: S
💬 🌟 素晴らしい!完璧に近いアーキテクチャです。

💰 **コスト分析**
💵 月額概算コスト: $194.22

🎓 Amazon Q CLIとの開発で学んだこと

Amazon Q CLIの優れた点

  1. 即座の理解と実装: 要求を正確に理解し、すぐに実装に移る
  2. 段階的な改善: 問題が発生すると複数のアプローチを試行
  3. 実用的な解決策: 理論だけでなく、実際に動作するコードを提供
  4. 詳細なドキュメント: 実装と同時に詳細な説明も提供

開発プロセスの特徴

  1. 対話的な開発: 要求 → 実装 → テスト → 改善のサイクル
  2. 問題解決の透明性: 試行錯誤の過程も含めて説明
  3. 実践的なアプローチ: 環境の制約に応じた柔軟な対応

技術的な学び

  1. Strands Agentの活用: @toolデコレータによるカスタムツール作成
  2. ユーザビリティの重要性: プロンプト表示などの細かな配慮
  3. 段階的な機能実装: MVP → 機能追加 → 改善のアプローチ

🚀 プロジェクトの成果

最終的なファイル構成

aws_architecture_quiz/
├── requirements.txt              # 依存関係
├── __init__.py                  # パッケージ初期化
├── quiz_game.py                 # Strands Agent版(完全版)
├── demo_game.py                 # デモ版(依存関係なし)
├── test_game.py                 # テスト実行
├── test_validation.py           # 入力検証テスト
├── interactive_test.py          # 対話的テスト
├── quick_demo.py               # 新機能デモ
├── README.md                   # 使用方法ガイド
└── amazon_q_development_blog.md # この記事

実装された機能の詳細

  • ゲームエンジン: 3つのシナリオと段階的難易度
  • 評価システム: 正解率とペナルティを考慮したスコア計算
  • コスト分析: プログラム内に定義された概算料金に基づくコスト計算(実際のAWS料金とは異なります)
  • 学習支援: 要件別サービス推奨とヒント表示
  • 入力検証: 安全で使いやすいユーザーインターフェース

💡 Amazon Q CLIを使った開発の価値

開発効率の向上

  • 迅速なプロトタイピング: アイデアから実装まで短時間で実現
  • 問題解決の支援: 技術的な課題に対する複数のアプローチ提示
  • コード品質: エラーハンドリングやテストも含めた実装

学習効果

  • 実践的な学習: 実際のコードを通じた技術習得
  • ベストプラクティス: 適切な設計パターンの学習
  • 問題解決スキル: 試行錯誤を通じた解決能力の向上

プロジェクト管理

  • 段階的な開発: 機能を段階的に追加・改善
  • ドキュメント化: 開発過程の詳細な記録
  • 品質保証: テストとデモを通じた動作確認

🔮 今後の展開

Amazon Q CLIとの開発を通じて、以下の拡張計画が見えてきました:

短期的な改善

  • より多くのシナリオの追加
  • 実際のAWSコスト分析機能の追加(AWS Pricing APIとの連携)
  • アーキテクチャ図の自動生成

長期的な展望

  • Web版の開発
  • 多言語対応
  • 他のクラウドプロバイダー対応

まとめ

Amazon Q CLIを使ったStrands Agent活用のAWSアーキテクチャ学習ゲーム開発は、非常に効率的で学習効果の高い体験でした。

Amazon Q CLIの特に優れていた点:

  1. 理解力: 曖昧な要求も正確に理解し、適切な実装を提案
  2. 実装力: 理論だけでなく、実際に動作するコードを迅速に作成
  3. 問題解決力: 環境の制約や技術的課題に対する柔軟な対応
  4. 継続的改善: ユーザーフィードバックに基づく段階的な機能向上

この開発体験を通じて、Amazon Q CLIがただのコード生成ツールではなく、真の開発パートナーとして機能することを実感しました。特に、教育的なアプリケーション開発において、その価値は非常に高いと感じています。

今後も Amazon Q CLI を活用して、より多くの実用的なアプリケーション開発に挑戦していきたいと思います。


開発環境

  • OS: Ubuntu Linux
  • Python: 3.12
  • Amazon Q CLI: 1.12.0
  • 開発期間: 2025年6月12日 18:00-19:00くらい

プロジェクトリポジトリ:
https://github.com/snickerjp/aws_architecture_quiz/

この記事が Amazon Q CLI を使った開発に興味のある方の参考になれば幸いです。

使用したプロンプトは、AWSの方の記事を参考にさせていただきました。

https://qiita.com/inada_riku/items/f6d9d83a47ef93ad38ef

Discussion