Amazon Q CLIでオセロゲームを作ってみた - AIペアプログラミングの実践

Amazon QAIゲーム開発PythonデザインパターンOpenAI

Amazon Q CLIでオセロゲームを作ってみた - AIペアプログラミングの実践

AWSが提供するAIコーディングアシスタント「Amazon Q CLI」を使って、本格的なオセロ(リバーシ)ゲームを開発してみました。この記事では、AIとのペアプログラミングで学んだことや、実装した機能について詳しく紹介します。

プロジェクト概要

今回作成したオセロゲームは、以下の特徴を持つCLIアプリケーションです:

🎮 ゲーム機能

  • 5つのゲームモード: 人間 vs AI、人間 vs OpenAI、AI vs AI、OpenAI vs OpenAI、人間 vs 人間
  • AI難易度設定: Easy(ランダム)、Medium(貪欲法)、Hard(戦略的)
  • OpenAI API連携: GPT-4o-mini、GPT-4o、GPT-3.5-turboから選択可能
  • 美しいUI: 8x8ボードの視覚的表示、リアルタイムスコア表示
  • 🏗️ 技術的特徴

  • Factory デザインパターン: プレイヤーインスタンスの生成を抽象化
  • Interface パターン: 拡張性の高い設計
  • Builder パターン: 設定の柔軟な構築
  • Docker対応: 環境に依存しない実行環境
  • 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 を使用した実際の開発体験に基づいて書かれています。