Tシャツ欲しさにAmazon Q CLIでゲーム作ったら、未来のAWS学習法が爆誕してしまった件 #AmazonQCLI
Amazon Q CLIで作るStrands Agent活用のAWSアーキテクチャ学習クイズゲーム開発記
はじめに
Amazon Q CLIを使って、Strands AgentベースのAWSアーキテクチャ学習ゲームを開発した体験を記録します。
この記事では、実際の開発過程で起こった試行錯誤、問題解決、そして最終的な成果物について、
Amazon Q CLIとの対話を通じて進めた開発の全貌をお伝えします。
どんなものができた?
早速出来上がりから。
投稿したPostがこちら
🎯 プロジェクトの始まり
同僚からの案内
同僚が参加したAWSのイベントにて案内された告知を
共有してくれました。
6/20までにAmazon Qを使用してゲームを作ったらオリジナルTシャツがもらえるらしいです
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つのアイデア:
-
🏗️ AWS アーキテクチャ・クイズマスター ← 最終的に選択
- シナリオベースのアーキテクチャ設計問題
- リアルタイムコスト分析
- スコアリングシステム
-
🚨 AWS インシデント・レスポンス・シミュレーター
- 実際のAWSインシデントを模擬
- 制限時間内での対応
-
🎯 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:
flush=True
の使用 -
試行2:
sys.stdout.write()
+sys.stdout.flush()
-
最終解決: 標準的な
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の優れた点
- 即座の理解と実装: 要求を正確に理解し、すぐに実装に移る
- 段階的な改善: 問題が発生すると複数のアプローチを試行
- 実用的な解決策: 理論だけでなく、実際に動作するコードを提供
- 詳細なドキュメント: 実装と同時に詳細な説明も提供
開発プロセスの特徴
- 対話的な開発: 要求 → 実装 → テスト → 改善のサイクル
- 問題解決の透明性: 試行錯誤の過程も含めて説明
- 実践的なアプローチ: 環境の制約に応じた柔軟な対応
技術的な学び
-
Strands Agentの活用:
@tool
デコレータによるカスタムツール作成 - ユーザビリティの重要性: プロンプト表示などの細かな配慮
- 段階的な機能実装: 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の特に優れていた点:
- 理解力: 曖昧な要求も正確に理解し、適切な実装を提案
- 実装力: 理論だけでなく、実際に動作するコードを迅速に作成
- 問題解決力: 環境の制約や技術的課題に対する柔軟な対応
- 継続的改善: ユーザーフィードバックに基づく段階的な機能向上
この開発体験を通じて、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くらい
プロジェクトリポジトリ:
この記事が Amazon Q CLI を使った開発に興味のある方の参考になれば幸いです。
使用したプロンプトは、AWSの方の記事を参考にさせていただきました。
Discussion