AmazonQにGitHubプロジェクトのissueを任せてPRまで自動で出してもらう

## まるで魔法のような。

CodeCatalystの機能として、Amazon QによるIssueの自動対応というものがあります。
ノーコード開発でもないのに、もうコードエディタすら開かなくていいんですね。

AmazonQに関しては、「ソフトウェア開発を加速し、企業の内部データを活用するための、生成 AI を活用した極めて有能なアシスタント」とのことです。VScodeに導入すればCopilotのように使うことができます。

今回はこちらの機能を利用して、GitHub上のプロジェクトに対してAmazon QによるIssue対応をしてもらおうと思います。

CodeCatalystの機能なのにGitHubで扱えるの？と思うわけですが、CodeCatalystはGitHubとリンクさせることができます。AmazonQの操作対象はあくまでもCodeCatalystです。
本記事の方法で進めれば最終的にマージなどの作業を行うのはGitHubなので、現在GitHubで管理しているプロジェクトにも移行作業無しでAmazonQさんを問題なく導入できるというわけです。

## 参考記事

https://dev.classmethod.jp/articles/amazon-codecatalyst-amazon-q-issue/

## AWS CodeCatalyst にログイン

CodeCatalystへのログインには、AWS Builder IDを使用します。

https://codecatalyst.aws/login からサインアップ（またはサインイン）を行なってログインします。

![スクリーンショット 2024-08-27 11.48.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/3e409b67-97ac-7d74-fdc4-747be0458046.png)


詳しいやり方はワークショップのこちらのページをご覧ください。

https://catalog.workshops.aws/integrated-devops/ja-JP/workshop/onboarding

こちらのページにも記載がある通り、そのほかのAWSリソースと連携する場合はAWS アカウントで CodeCatalyst に許可を与える必要があるみたいですが、今回は無しで大丈夫でしょう。

## スペースを作成

CodeCatalystにおいてスペースとは、会社や部署などの組織であったり、開発者のグループであったりを指します。
「Create space」から作成します。

各項目を入力してください。

![スクリーンショット 2024-08-27 12.36.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/a3f908f9-ef63-74a6-60ce-34f11155ce58.png)

リージョンは、AmazonQが利用できるものを選ぶ必要があります。
記事執筆現在はオレゴンが利用可能なのでこちらを選択します。

AWS account IDには、請求などを紐づけるAWSアカウントのIDを入力します。

入力ができたらトークンの検証が必要なので、言われた通りに進めましょう。

## AI を有効化

スペースの設定（Settings）から、Generative AIを有効にします。
これによりCodeCatalyst内でAmazonQが利用できるようになります。

![スクリーンショット 2024-08-27 12.46.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/3e119554-4b4b-a84e-cc84-50836834b6c8.png)


## プロジェクトを作成

「Create project」からプロジェクトを作成します。
ここではプロジェクトは、GitHubのリポジトリを参照してリンクさせたいので、GitHubアカウントの接続を行います。

Bring your own code > Link existing repository > GitHub
を選択すると「Connect GitHub」みたいなボタンが出ると思うのでそちらを押すとGitHubのページが開いて接続を行うことができます。

アクセスを許可するリポジトリは、このプロジェクトにリンクさせたいものだけに制限するのが無難かと思います。

完了したらCodeCatalystに戻ります。

![スクリーンショット 2024-08-27 12.50.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/2ecc2f8b-ed84-c5d6-6df1-7012b37b4e78.png)

リポジトリと、CodeCatalystでのプロジェクト名を入力したら「Create project」を押します。

するとプロジェクトのダッシュボード的な画面に移ります。

## AmazonQにやってもらうissueを作成

issueはどうやら、CodeCatalystでGitHubのissueまで管理できるわけではなさそうですが、今回は特に問題ありません。
「Create issue」からissueを追加します。

タイトルと内容がそのままAIへのプロンプトとして反映されると思われるため、プロンプトを意識して記入します。

そして、__アサインをAmazonQに当てます__。

これにより、このissueをAmazonQが自動で開発対応してくれます。

以下の「＋Assign to Amazon Q」を選択します。
![スクリーンショット 2024-08-27 13.07.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/1337b779-566e-beef-3fbb-e78e286ced28.png)

↓こうなればOK

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_2388259_8acf866e-b828-1387-c960-8c1ce53e22f0のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/bff7ee13-3bc7-4d29-8f8c-c6093868e62c.jpeg)


## Amazon Q とのやりとり

issueを作成した後はしばらくAmazonQが頑張っています。
![スクリーンショット 2024-08-27 13.13.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/972618dc-8fc4-6f48-d282-5d4a8af01fc8.png)

しばらくするとissueのコメント欄に、「こんな感じで実装しようと思てるけどええか？」みたいな感じで聞いてきます。
「Proceed」を押せば次のコード生成のステップに進みます。
もしダメだったら「Reply」から返信をしてあげるとまた方針を考え直してくれます。

![https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_2388259_8502a262-0df5-bd70-bcd4-b30001e48a12のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/a0380bfa-dc1e-473c-9e04-cf493fb5eb26.jpeg)


ちなみに今は英語でしか出力されませんが、入力は日本語でも問題ないようです。

## GitHub でPRを確認

コード生成までできて、AmazonQがPRを出し終えると、なんとそのPRがGitHubに反映されています。
![スクリーンショット 2024-08-27 13.21.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2388259/364c618c-cf62-f216-d70c-f09700053512.png)


あとはGitHub上でPRを確認してマージするだけです。

## AmazonQにやってもらうべきissueとそうでないissue

普段からchatGPTやCopilot、Claudeなどの生成AIを使って開発をしている方ならわかると思いますが、生成してもらったコードの中には当てにならない答えだったり、手動での修正が必要なコードはまだまだ多いかと思います。

そのため当然これも全てのissueを完全にAmazonQに任せられるかといえばそうではなさそうです。

実際、試しにいくつかissueを投げてAmazonQのPRを出してもらい、それらを実行させてみましたが、一部でエラーが発生しました。特に新たに関数や変数を定義したり、ライブラリを追加したりする場合にエラーが見受けられました。
エラーが発生した箇所は手作業で直す必要があります。
しかし、__その手作業の修正がもし微量であればトータルで考えるとかなりの時短になるのではないでしょうか__。

これは私の所感であり持論ですが、
__機能を新たに追加するような０→１のタスクはVScode上で作業して、__
__リファクタや既存の仕様のちょっとした変更などはAmazonQに任せることで大幅に作業効率がUPしそうです。__

## まとめ

AmazonQによる自動issue対応の方法自体は簡単でした。
「どのissueをAmazonQに任せるべきか」という判断がうまくできるようになれば、めちゃくちゃ使えそうです。