Amazon Q Developer の「/dev」で Q 自身にビルド&テストをさせてからコードの提案をしてもらう

Amazon Q Developer の「/dev」で Q 自身にビルド&テストをさせてからコードの提案をしてもらう

Clock Icon2025.04.21

いわさです。

先日 Amazon Q Developer がついに日本語に対応しましたね。

https://dev.classmethod.jp/articles/amazon-q-developer-japanese-language-support-ide-cli/

私は最近社内開発時に Amazon Q Developer をできるだけ使用するようにしておりまして、色々良さそうな使い方を探っているところです。

特に/devによる機能開発をよく使っています。
/devはエディタ上のコード提案や、チャットベースでのコードブロックの提案とは異なり、リクエストした内容に従ってワークスペースやコンテキストを解釈し、既存コードに変更を反映したり、新しいモジュールの作成を行ってくれる機能です。

先日の Amazon Q Developer に日本語サポート時にこの機能も日本語をサポートしました。
チャットと異なり応答メッセージは英語なのですが、コード生成時の変更サマリを見てみると指示した日本語をしっかり認識してくれています。

image.png

動かないコードを提案されることがある

とても便利な機能で私は最近毎日のように/devのお世話になっているのですが、提案してもらったコードをまぁ良さそうだなと思って反映すると、予期せぬ動きをしていたり、そもそもシンタックスエラーが発生していたりビルドに失敗したりすることがあります。

26E79A73-1E78-4EEC-8B23-2E6795A16EC8.png
API を追加するコードの提案

9D1C33FB-E7F6-4485-8646-EC965E7F4CA3.png
ビルドエラーが発生するようになってしまった

プルリクエストのレビューとかもそうだと思うのですが、前提としてコンパイルエラーが出なかったり、ユニットテストに成功していたり、ある程度の品質は前提とした上でコードを取り込むかどうか判断したいですよね。

devfile.yaml を使ってにコード提案前にビルドやテストをさせる

デフォルトだと Amazon Q はテストなどしてくれません。

が、devfile.yamlというファイルをプロジェクトのルートフォルダに用意しておくことで、提案前の修正案を考えたタイミングで Q Developer が開発環境でビルドやテストをしてくれます。すごい。

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/devfile.html

Q Developer は分離された開発環境を用意してビルドとテストを行い、コードに問題があるようであればコード提案をせずにもう一度修正してテストをしてくれます。
最大 3 回まで繰り返し、問題がなくなった時点でようやく利用者へコードの提案をしてくれるようになります。

devfile.yaml を生成する

前述のとおりdevfile.yamlを渡すことで、Q Developer がそれを検出してテストをしてくれるようになります。
用意する方法ですが上記ドキュメントのように手動でファイルを用意することも出来ますし、/dev機能を使った時にdevfile.yamlが存在していなければ生成させることも出来ます。

/devでコード提案された際、通常は提案されたコードで完了していれば「No, thanks」を、追加の修正が必要な場合は「Yes, I have another task」を選択すると思いますが、「Generate devfile to build code」という選択肢があります。スルーしてました。

6A95AA47-AC29-47AC-BAAA-6F92E033DA60.png

上記のボタンを押すと、追加のタスクとして devfile.yaml を Q Developer が自動生成してくれます。

3BE7137F-5850-46C9-8306-0FB8785A6ECB.png

/devの他のコード生成と同じで、「こんなのでどうですか?」と聞いてくるので内容を確認して Accept することでコードに反映がされます。

73E3DBE2-69DF-4573-9E68-458A54667B94.png

今回 .NET の最小プロジェクトで試してみたのですが、ファイル内容な次のようになっていました。restoreしてbuildしてtestしてます。なるほど、良いと思いますね。

schemaVersion: 2.0.0
components:
  - name: dev
    container:
      image: public.ecr.aws/aws-mde/universal-image:latest
commands:
  - id: install-build
    exec:
      component: dev
      commandLine: "dotnet restore && dotnet build"
  - id: test
    exec:
      component: dev
      commandLine: "dotnet test"

devfile.yaml がある状態で /dev を使う

devfile.yamlがルートに配置されていると、あとは/dev実行時に自動で使ってくれます。試してみましょう。
Q Developer が「devfile.yaml を使ってビルドとテストしていいか?」と聞いてきますので許可しましょう。

81D45E95-C5C9-4DB9-824C-39EFC3C56D6B.png

そうすると一見通常どおりリクエストに従ってコードを考えてくれているのですが、コードの検討をした段階でdotnet restore && dotnet buildをしようとしています。devfile.yamlの内容に従ってますね。この時点ではまだ利用者へのコード提案はされていません。

7EF2B207-CCDF-44E3-855C-D3DEFA9A117A.png

で、ビルドしたところどうやら問題に気がついたようですね。
追加のコード修正をしようとしているようです。

7E3F62AF-4723-4164-AEEF-F987FCC4B0F3.png

そのサイクルを何度か繰り返し、最終的にはビルドが成功したコードを提案してくれました。
今回はテストコードを含んでいなかったのですが、テストコードが含まれていればエラーが出ないような修正をしてくれるものと思われます。

8386F915-4CB4-40DD-8CBC-0A418D881D6F.png

ただ、提案されたコードを見るとbinやらobjやら含まれており、自動生成系のコードやオブジェクトはいらんなという感じはします。まぁでもローカルでリストアやビルドすれば作られるし、コードとして管理されるかは.gitignoreなど次第なので、まぁあっても良いのかな...

C698A1CB-65AD-4D78-BC4D-107AF1E93799.png

さいごに

本日は Amazon Q Developer の「/dev」で Q 自身にビルド&テストをさせてからコードの提案をしてもらうdevfile.yamlを試してみました。

今回はテストコードがなかったのでプロジェクトリストアとビルドだけだったのですが、非常におもしろい機能ですね。
トライ&エラーをするのでその分コード生成までの時間が長くはなるのですが、テストコードがあればコード品質を保ちながらコード生成できそうです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.