Amazon Q CLIでオセロゲームを作ってみた - AIペアプログラミングの実践
Amazon QAIゲーム開発PythonデザインパターンOpenAI
Amazon Q CLIでオセロゲームを作ってみた - AIペアプログラミングの実践
AWSが提供するAIコーディングアシスタント「Amazon Q CLI」を使って、本格的なオセロ(リバーシ)ゲームを開発してみました。この記事では、AIとのペアプログラミングで学んだことや、実装した機能について詳しく紹介します。
プロジェクト概要
今回作成したオセロゲームは、以下の特徴を持つCLIアプリケーションです:
🎮 ゲーム機能
🏗️ 技術的特徴
Amazon Q CLIとの開発体験
AIアシスタントの活用場面
Amazon Q CLIは開発の様々な場面で力を発揮しました:
#### 1. アーキテクチャ設計
q chat "オセロゲームのクラス設計を考えて。Factory パターンを使いたい"
Q CLIは適切なクラス構造とデザインパターンの実装方法を提案してくれました。
- #### 2. コード生成と最適化
- ボードの表示ロジック
- AI戦略アルゴリズムの実装
- OpenAI API連携コード
- エラーハンドリング
#### 3. テストコード作成
# Q CLIが生成したテストコードの例
def test_create_ai_player(self):
"""Test creating AI player"""
config = PlayerConfig(
player_type=PlayerType.AI,
name="Test AI",
ai_difficulty=AIDifficulty.MEDIUM
)
player = PlayerFactory.create_player(config, Stone.WHITE)
self.assertIsInstance(player, AIPlayer)
self.assertEqual(player.difficulty, "medium")
実装のハイライト
Factory パターンの実装
プレイヤーの生成を抽象化するためにFactory パターンを採用しました:
class PlayerFactory:
"""Factory class for creating player instances"""
@staticmethod
def create_player(config: PlayerConfig, stone: Stone) -> IPlayer:
"""Create player instance based on configuration"""
if config.player_type == PlayerType.HUMAN:
return PlayerFactory._create_human_player(config, stone)
elif config.player_type == PlayerType.AI:
return PlayerFactory._create_ai_player(config, stone)
elif config.player_type == PlayerType.OPENAI:
return PlayerFactory._create_openai_player(config, stone)
OpenAI API連携
OpenAI APIを使ったAIプレイヤーも実装しました:
def _get_openai_move(self, board: Board, valid_moves: list) -> Optional[Move]:
"""Get move from OpenAI API"""
prompt = f"""You are playing Othello. You are {stone_name} stones.
{board_str}
Available moves: {moves_str}
Choose the best move considering:
1. Corner positions are very valuable
2. Edge positions can be good
3. Avoid positions next to corners unless you can take the corner
"""
美しいボード表示
ユーザビリティを重視したボード表示を実装:
┌───────────────────────────────────────┐
│ A B C D E F G H │
├───────────────────────────────────────┤
│ 1 │ · · · 1 · · · · │ 1 │
│ 2 │ · · · · · · · · │ 2 │
│ 3 │ · · · · · · · · │ 3 │
│ 4 │ · · 2 ○ ● · · · │ 4 │
│ 5 │ · · · ● ○ 3 · · │ 5 │
│ 6 │ · · · · 4 · · · │ 6 │
│ 7 │ · · · · · · · · │ 7 │
│ 8 │ · · · · · · · · │ 8 │
├───────────────────────────────────────┤
│ A B C D E F G H │
└───────────────────────────────────────┘
開発で学んだこと
1. AIとのペアプログラミングの効果
Amazon Q CLIとの開発で感じたメリット:
- 高速なプロトタイピング: アイデアを素早く形にできる
- コード品質の向上: ベストプラクティスを自然に学べる
- 学習効率の向上: 新しい技術やパターンを実践的に習得
2. デザインパターンの重要性
Factory パターンやInterface パターンを使うことで:
- 拡張性: 新しいプレイヤータイプを簡単に追加可能
- 保守性: 各クラスの責任が明確
- テスタビリティ: モックやスタブを使ったテストが容易
3. Docker化の利点
開発環境をDocker化することで:
- 環境の統一: 開発・テスト・本番環境の一致
- 依存関係の管理: Pythonライブラリの競合回避
- デプロイの簡素化: どこでも同じように動作
プロジェクト構成
othello/
├── main.py # エントリーポイント
├── config.py # 設定管理
├── game/ # ゲームロジック
│ ├── board.py # ボード管理
│ ├── game.py # ゲーム制御
│ ├── move.py # 手の情報
│ └── game_state.py # ゲーム状態
├── players/ # プレイヤークラス
│ ├── player_interface.py # インターフェース
│ ├── player_factory.py # ファクトリー
│ ├── human_player.py # 人間プレイヤー
│ ├── ai_player.py # AIプレイヤー
│ └── openai_player.py # OpenAIプレイヤー
└── tests/ # テストファイル
実行方法
Docker を使用(推奨)
# リポジトリをクローン
git clone <repository-url>
cd othello
# Docker でゲームを実行
make docker-run
# テストを実行
make docker-test
ローカル環境での実行
# 依存関係をインストール
make install
# ゲームを実行
make run
今後の拡張予定
- MinMax アルゴリズム: より高度なAI戦略
- ゲーム履歴機能: 対戦記録の保存・再生
- GUI版: グラフィカルユーザーインターフェース
- ネットワーク対戦: オンラインマルチプレイヤー
まとめ
Amazon Q CLIを使ったオセロゲーム開発は、AIアシスタントの可能性を実感できる素晴らしい体験でした。単なるコード生成ツールではなく、設計思想から実装詳細まで、開発のあらゆる段階でサポートしてくれる頼もしいパートナーです。
特に印象的だったのは:
- 学習効率の向上: 新しい技術やパターンを実践的に学べる
- 品質の向上: ベストプラクティスを自然に取り入れられる
- 開発速度の向上: アイデアを素早く形にできる
皆さんもAmazon Q CLIを使って、創造的なプロジェクトに挑戦してみてはいかがでしょうか。きっと新しい発見があるはずです!
リンク
- [プロジェクトリポジトリ](https://github.com/your-username/othello-cli)
- [Amazon Q CLI 公式ドキュメント](https://docs.aws.amazon.com/amazonq/)
- [Amazon Q CLI でゲームを作ろう キャンペーン](https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/)
---
この記事は Amazon Q CLI を使用した実際の開発体験に基づいて書かれています。