「Amazon Q CLI でゲームを作ろう」キャンペーン体験記

記事タイトルとURLをコピーする

こんにちは。
アプリケーションサービス部、DevOps担当の兼安です。

現在、「Amazon Q CLI でゲームを作ろう」キャンペーンが開催されています。
生成AIの活用方法を模索するのに良い機会だと思い、参加してみました! 今回はこのキャンペーンに乗っかって、Amazon Q CLIを試してみたというお話をします。

aws.amazon.com

Amazon Q CLI とは?

Amazon Q CLIとは、AWSが提供する開発者向けの生成AIアシスタント「Amazon Q Developer」を、ターミナル上で利用するためのコマンドラインインターフェースのことです。
いわゆる黒い画面で、コマンドを入力して操作します。
日本語にも対応しており、自然言語で質問やコマンドを入力できます。

aws.amazon.com

どんなゲームを作ったの?

変則的なお手玉ゲームです。
右方向の横スクロールで、下から弾を撃ってキャラクターをゴールに導きます。

作成に要した所要時間はトータル1時間です。

https://raw.githubusercontent.com/satoshi256kbyte/handball-and-shooting/refs/heads/main/pray_movie.gif

github.com

どんな感じで作ったの?

まずは、Amazon Q CLIをインストールします。

aws.amazon.com

空フォルダを作成し、VSCodeで開きます。
VSCodeのターミナルでAmazon Q CLIを起動して作業スタートします。

Amazon Q CLIは、qコマンドで起動します。
qコマンドにchatをつけると、チャットモードになります。

q chat

チャットモードでは、自然言語で質問やコマンドを入力できます。
キャンペーンページに、ゲームエンジンの例としてPyGameが挙げられていたので、まずはPyGameをインストールするように指示します。
インストールコマンドはわかっていますが、ここはあえてインストールから指示してみます。

www.pygame.org

pygameでゲームを作ります。pygameをインストールしてください。

Amazon Qがインストールを本当に実行を続けるか質問してきます。
tはtrustの略で、信頼して自動で作業をしてもらうことを意味します。
実務では一つ一つ確認しながら進めた方が良いですが、今回は自動で作業をしてもらうことにします。

Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

> t

Pygameが正常にインストールされました。
実行の結果も自然言語で伝えてくれますね。

 ● Completed in 4.56sPygameが正常にインストールさ
れました!バージョン2.6.1がインストールされています。  
これでPygameを使ってゲーム開発を始めることができます。  

簡単なPygameのプログラムを作成してみますか?または、特定の種類のゲームを作りたいですか?

では、ゲームの作成を指示していきます。
私はゲームのルールを伝える形で指示を出しました。
あらかじめ箇条書きのテキストを用意しておき、CLIのチャット欄に貼り付けて指示を出します。
なお、/editorという選択肢もありますが、今回はテキストの貼り付けで進めていきました。

- 左から右の横スクロールゲームを作成したいです。  
- キャラクターは画面左上からスタートします。  
- キャラクターが一定のスピードで右に移動しつつ落下します。  
- プレイヤーは画面下の任意の位置をクリックすると、その位置から弾を発射します。  
- 弾がキャラクターに当たると、キャラクターは反動で一定の距離だけ浮き上がります。  
- 弾を発射することでキャラクターを操作し、画面右側のゴールに到達することを目指します。  
- 画面は640x480ピクセルで、全体は3画面分とします。  
- キャラクターが画面下に落ちるか、画面上から出るとゲームオーバーです。  

一発目が数十秒でできました。
早い!

横スクロールシューティングゲームを作成しました!
shooting_game.pyというファイルを作成し、以下の機能を実装しています:

### ゲームの特徴
• 640x480ピクセルの画面で、全体は3画面分(1920ピクセル幅)
• キャラクターは画面左上からスタートし、一定速度で右に移動しながら落下します
• 画面下の任意の位置をクリックすると、その位置に向かって弾を発射できます
• 弾がキャラクターに当たると、キャラクターは上方向に跳ねます
• 画面右端にゴールがあり、到達するとクリアです
• キャラクターが画面下に落ちるか上に出るとゲームオーバーになります

### 操作方法
• マウスクリック:弾を発射
• Rキー:ゲームをリスタート

### ゲームの実行方法
以下のコマンドでゲームを実行できます:

python shooting_game.py


ゲームを起動すると、赤いキャラクターが左上から移動を始めます。  画面下部をクリックして弾を発射し、キャラクターを操作してゴールを目指してください。  
何か調整したい点や追加したい機能があれば、お知らせください!

> 

リスタートは指示していなかったのですが、ゲームに必要そうな機能を自動で追加してくれました。
いい感じですね。

ただ、動かしてみたところ、キャラクターの落下速度が速すぎる、弾の発射方向が思ったのと違うという点があったので、調整を指示します。

- キャラクターの落下速度が速すぎます。  風船が落下するぐらいのスピードにしてください。  
- 弾はクリックした位置を起点に、上方向に発射されるようにしてください。  

一度出力したコードの修正もやってくれます。
この時、修正点はDiff形式で出力されます。

🛠️  Using tool: fs_write (trusted)
 ⋮ 
 ● Path: shooting_game.py

  27, 27:         self.vel_x = 2  # 右に移動する速度
  28, 28:         self.vel_y = 0
- 29    :         self.gravity = 0.5
- 30    :         self.jump_power = -8
+     29:         self.gravity = 0.1  # 風船のような緩やかな落下
+     30:         self.jump_power = -5

これである程度思い通りのゲームができましたが、難易度が高すぎると感じたので、何回か調整を指示しました。

- キャラクターの落下速度をもう少し遅くしてください。  
- 弾は大きくしてください。  キャラクターの半分ぐらいの大きさで当たり判定もそれと同じぐらいがいいです。  
- 画面下に弾を発射するためのクリックエリアを広くしてください。  今の3倍ぐらいの高さでお願いします。  
- 弾が当たった時の上昇する距離をもう少し小さくしてください。  
- クリックエリアをもう少しだけ大きくしてください。  
- ランダムで画面上に数個の障害物を配置して、キャラクターがそれに当たるとほんの少しノックバックするようにしてください。  
- ノックバックすると進行方向が逆になってるようなので、ノックした状態で弾をあてるともう一度進行方向を右にしてください

ここまでで、冒頭の状態となったので、今回はこれで完成としました。
ここまででトータル1時間ほどです。

所感

  • 月並みですが、自然言語で指示を出すだけで、コードを書いてくれるのはすごいです。
  • リスタート機能は指示していなかったのですが、ゲームに必要そうな機能を自動で追加してくれました。 文脈を理解してくれているのですね。
  • 指示の仕方の悪さもあると思いますが、再現できてない指示がいくつかありました。
  • 当たり判定・ノックバックなど、あえてゲームでよく使われる言葉で指示を出してみたところ、解釈しきれていない様子を感じました。 AI用の用語集を用意しておくと良い気がします。
  • 気持ち的に、AIに作ってもらったコードは修正もAIにやって欲しくなりました。 自分で微調整するのが億劫に感じます。 不思議ですね。 感覚的に他人に書いてもらったコードという感じがするからでしょうか。

ゲーム開発は専門外なので少しだけですが体験できて楽しかったです。
生成AIを用いた開発を体験するのに、良い題材だったと思います。
みなさまもぜひ参加してみてください。

最後にちょっと自分の職務に繋がる話をしますが、AIを使うと専門外のコードが作れたり、自分が手を入れないコードを作れたりします。
そうなってくると、そのコードの品質は誰が担保するのか、という話が出てきます。
それを考えると、今後もCI/CDやコードレビューの重要性はより一層高まるのではないかと思います。

[追記]キャンペーンでTシャツをいただきました

「Amazon Q CLI でゲームを作ろう」キャンペーンに応募して、無事Tシャツをいただきました。
ありがとごうございます。

キャンペーンでいただいたTシャツ