🐻

Qに指示してゲームが進化!?Amazon Q CLIで作る拡張型シミュレーション

に公開

はじめに

こんにちは!本記事はAWSが開催しているキャンペーン「Build Games with Amazon Q CLI and score a T-shirt」に参加するために、Amazon Q CLIを使ってゲーム開発を行った記録です。
https://community.aws/content/2xIoduO0xhkhUApQpVUIqBFGmAc/build-games-with-amazon-q-cli-and-score-a-t-shirt

Amazon Q CLIは、開発者のアクシビティを助けるAIアシスタントで、コード書きからデバッグ、テスト、構成設定まで完結して支援してくれる最新のツールです。

この記事では、Qの動的な機能拡張性に着目しQに指示してゲームが進化するシュミレーションゲームを作りました。

以下では、Amazon Qの本格的な活用、ゲーム内の抽象形状や意図を実装するまでの流れを解説していきます。

Amazon Q CLIの面白さや形にならない力を実感して頂けると幸いです。

ゲームの設計とコンセプト

今回開発したのは、「Qに指示することでゲーム世界が動的に進化していく」という、AIとの対話をベースにしたシミュレーションゲームです。

コンセプト概要

このゲームでは、プレイヤーが「Q」にゲーム上のコマンドで命令を与えることで、村や世界を発展させていきます。例えば「畑を作りたい」「家を建てたい」「お祭りを開きたい」といったコマンドに対し、Qがその意図を理解し、対応するゲーム機能をリアルタイムで追加・実行してくれます。

ゲームの実装と仕組み

このセクションでは、QとJavaScriptを連携させて構築したゲームの実装方法と、その内部の仕組みについて解説します。

  1. 実装の構成
    ゲームは以下の3つの主要ファイルで構成されています:
my-game/
├── village-sim.html
├── village-sim.css
└── village-sim.js
└── README.md 

2. ユーザー入力とQのやり取り

index.html 上に配置された入力欄に、プレイヤーが自然言語でコマンドを入力します。
village-sim.js でその入力を processCommand() 関数が受け取り、既存のコマンドかどうかを判定します。
未知のコマンドであれば handleUnknownCommand() を呼び出し、Qにコマンドの意味や処理方法を問い合わせます。
Qはそれを解析し、gameState.customFeatures に新しいコマンド定義を動的に追加します。

function processCommand(input) {
  const command = input.trim();
  if (command === "help") {
    showHelp();
  } else if (gameState.customFeatures?.commandPatterns?.includes(command)) {
    executeCustomFeature(command);
  } else {
    handleUnknownCommand(command);
  }
}

3. メモリ上での機能拡張

未知のコマンドに対しては、Qが内容を分析し、ゲームの状態に新たな機能を動的に追加します。これが「進化するゲーム」のコアです。
追加された機能はメモリ上にあるため、ブラウザをリロードすると消えてしまいます。永続化したい場合は localStorage 等との連携することで可能です。

function handleUnknownCommand(command) {
  const featureName = extractFeatureName(command);
  if (!featureName) return showError("コマンドが理解できませんでした");

  const newFeature = {
    name: featureName,
    description: `${featureName}機能を追加しました!`,
    execute: () => {
      log(`🆕 ${featureName} が発動しました!`);
    }
  };

  gameState.customFeatures = {
    ...(gameState.customFeatures || {}),
    [featureName]: newFeature,
    commandPatterns: [
      ...(gameState.customFeatures?.commandPatterns || []),
      command
    ]
  };

  log(`${featureName} 機能を登録しました!次回からは直接使えます。`);
}

完成品を遊んでみる

初期画面では数行の説明とともにテキスト入力欄が表示されます。ここに指示を打ち込むことで、ゲームが展開されていきます。

未知のコマンドを入れるとその場で機能が登録され、次回から直接使えるようになります。これは、Qが指示を解釈してgameState.customFeaturesに自動で処理を追加してくれているからです。

Q CLIを使ってみた所感・評価

良かった点・メリット

  • 実装手段を細かく説明しなくても自然言語だけでやり取りできる

  • 指示が足りなくても補完してくれる柔軟性

  • 動作を試しながらリアルタイムに修正・拡張できる開発サイクル

改善点・課題

  • ローカル開発では q dev のセッションに依存しているため、継続的な保存やチーム開発に展開するには工夫が必要

評価

特に印象的だったのは、「未知の指示に応じて新機能を生成する能力」です。
これは従来のコード補完ツールとは一線を画しており、まさに「共創するAI」という印象を受けました。
試行錯誤を繰り返す中で、設計→実装→試行→改善のループが自然言語だけで高速に回せる体験は非常に新鮮で、これからの開発体験がどう変わっていくかを肌で感じることができました。
今後はこのようなAIと人間の共創開発スタイルが、個人開発・教育・業務においてますます拡がっていくと感じています。

まとめ

Amazon Q CLIは、単なるAIコーディング支援を超えて「一緒に開発を進める相棒」として非常に優秀だと感じました。

  • 自然言語での指示をそのまま受け止め、正確にコードへ落とし込んでくれる
  • 分からない仕様や曖昧な説明に対しても、最適な提案をしてくれる
  • プロンプト次第でゲームやツールが柔軟に拡張されていく楽しさがある

今回はゲームをテーマにしましたが、業務用アプリのプロトタイピングなどにも応用できそうです。

Discussion