Amazon CodeWhispererの導入とリファレンス機能の確認

## はじめに
本記事では、2023年4月にリリースされたAmazon CodeWhispererの導入と、他の類似サービスにはない、特徴の一つでもあるCode Referenceの機能を試してみた結果を記載しています。
目次は以下の通りです。

### 目次
- [Amazon CodeWhispererとは](https://qiita.com/drafts/29d40372f116157fa410/edit#amazon-codewhisperer%E3%81%A8%E3%81%AF)
- [操作方法](https://qiita.com/drafts/29d40372f116157fa410/edit#%E4%BD%BF%E3%81%84%E6%96%B9)
- [Visual Studio Codeでの導入手順](https://qiita.com/drafts/29d40372f116157fa410/edit#visual-studio-code%E3%81%A7%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86)
- [Lambdaでの導入手順](https://qiita.com/drafts/29d40372f116157fa410/edit#lambda%E3%81%A7%E3%81%AE%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86)
- [Code Reference](https://qiita.com/drafts/29d40372f116157fa410/edit#code-reference)
## Amazon CodeWhispererとは
[Amazon CodeWhisperer](https://aws.amazon.com/jp/codewhisperer/)とは、AIコーディング支援サービスです。
類似するサービスとしては、GitHub Copilotが挙げられます。
GitHub Copilotとの相違点としては、

- 個人利用であれば、無料で利用可能
- リファレンス機能が使える
- 1ユーザー1か月あたり、50回セキュリティスキャンが行える

といった箇所が挙げられます。
リファレンス機能については後ほど詳細を説明します。

## 操作方法
まずは導入後の操作方法について確認します。
以下ののユーザーガイドを参照しています。
[ユーザーアクション - コードウィスパラー (amazon.com)](https://docs.aws.amazon.com/ja_jp/codewhisperer/latest/userguide/actions-and-shortcuts.htm)

キーボードによる操作方法は以下になります。
|  アクション |  キーボードショートカット  |
| ---- | ---- |
|  手動でコードの提案を表示する<br>（ショートカット使わず自動でも出てくる）  |  MacOS: Option + C<br>Windows: Alt + C  |
|  提案を受け入れる  |  Tab  |
|  次の提案を表示する  |  右矢印  |
|  前の提案を表示する  |  左矢印  |
|  提案を拒否する  |  Esc、Backspace、または入力し続けて提案と文字の不一致が起きると提案が消える<br>（Backspaceは入力した最後の文字が消えてしまうので使いづらい）  |
## Visual Studio Codeでの導入手順
公開されている[動画](https://youtu.be/rHNMfOK8pWI)を参照して導入しました。

手順は以下の通りです。
#### AWS Toolkitをインストール
1. 左のExtensionタブでAWS Toolkitを検索
2. Installボタンをクリック
![スクリーンショット 2023-06-13 135159.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/e99716c7-619c-aa60-fa31-6fa3f09d17fa.png)

### ユーザー登録
1. 左にAWSアイコンがでてくるので、クリック
2. DEVELOPER TOOLSのCodeWhispererを開き、Startをクリック
![スクリーンショット 2023-06-13 135303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/10a3cc62-e2d9-1439-a55e-52100898e2c5.png)
3. 上にAWSとの接続方法選択が出てくるので、一番上の”Use a personal email to sign in with AWS Builder ID”を選択する
![スクリーンショット 2023-06-13 140437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/94778a63-d3c4-7b30-9503-82f649223d58.png)
4. “Copy Code and Proceed”を選択すると、AWS Builder IDを作成するのに必要なコードがコピーされ、ID作成画面へ遷移する
![スクリーンショット 2023-06-13 140450.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/ba0bbcad-d8eb-8ac2-1fd1-3769cae88ad9.png)
5. 先ほどコピーしたコードを入力する
![スクリーンショット 2023-06-13 140514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/0d094a8d-48ce-849f-cd79-2bcd98772785.png)
6. IDに登録するメールアドレスを入力する
![スクリーンショット 2023-06-13 140605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/9fa366b3-a4f1-f850-ed01-135787214a6d.png)
7. User Nameを入力する
 ![スクリーンショット 2023-06-13 140631.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/648c5a83-4f5a-357a-551f-29807d064980.png)
8. 登録したメールアドレスに、認証コードが届くのでコピーする
![スクリーンショット 2023-06-16 102031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/1e45cc09-a1fd-e786-f87e-7cc138749f0d.png)
9. 認証コードを貼り付ける
![スクリーンショット 2023-06-16 101820.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/c2052523-d9e3-49db-dbc4-db865db531cb.png)

10. パスワードを登録する
![スクリーンショット 2023-06-16 102240.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/5b964c7b-e451-cc1e-ad60-e8748193b76c.png)
11. Allowをクリック
![スクリーンショット 2023-06-16 102447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/4d4a4733-4428-cc6f-f100-742647dd8ca2.png)
12. ユーザーの紐づけ完了
![スクリーンショット 2023-06-16 102634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/8d9b2745-2a51-70fd-dec3-ff097a1579f4.png)
13. VS Code上にAWS Builder IDを使うか選択する画面が出てくるので、Yesを選択
![スクリーンショット 2023-06-13 145615.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/3c59f0fd-3c6b-5047-10a4-e2c8438c50a2.png)
14. 左のCodeWhispererがStartしたことを確認する
![スクリーンショット 2023-06-16 103052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/d2fa528e-a136-1357-10ca-eed43edb6aa2.png)




## Lambdaでの導入手順
### 対象のLambdaにCodeWhispererの権限を付与
1. ポリシーを作成する
```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CodeWhispererPermissions",
      "Effect": "Allow",
      "Action": ["codewhisperer:GenerateRecommendations"],
      "Resource": "*"
    }
  ]
}
```
![スクリーンショット 2023-06-14 132019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/7233436b-89e9-8fe5-3226-827d094549b4.png)
2. Lambda関数作成時に作成したロールにアタッチ
### Lambda関数からCodeWhispererを有効化
1. コンソールのコードタブを開く
2. Toolを表示
3. Amazon CodeWhisperer Code Suggestionsをクリック
![スクリーンショット 2023-06-14 133334.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/b4dad900-3c4f-a806-4247-9e5b9b410ca7.png)
4. Preferenceを開く
![スクリーンショット 2023-06-14 133550.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/0ab644ba-2326-2dd6-e02c-d24d1af53984.png)
5. USER SETTINGS>LANGUAGE>Hints&WarningsでAmazon CodeWhisperer Code Suggestionsが有効化されていることを確認
![スクリーンショット 2023-06-14 133611.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/e647df44-61ac-0640-cbe0-827880acb0bf.png)

## Code Reference
Code Referenceとは、CodeWhispererが提案するコードが、オープンソースの特定のトレーニングデータに類似している可能性があるかどうかを検出する機能となります。
つまり、コードを使用する前に、提案されているコードが他のコンテキストでどのように使用されているのかを知ることができます。また、リファレンスはログ記録されます。
参考：[Amazon CodeWhisperer のよくある質問-CodeWhispererのリファレンストラッカーとは何ですか？](https://aws.amazon.com/jp/codewhisperer/faqs/)

実際にどのようにログが表示されるのかをVisual Studio Codeで確認しました。

AWS ToolkitのCodeWhispererの項目の中の、"Open Code Reference Log"を選択します。
![スクリーンショット 2023-06-16 103052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/7f60eea3-ba26-7ede-30c9-815398d01cfd.png)
すると、開いていたファイルの下にCode Reference Logのタブが出てきます。
![スクリーンショット 2023-06-16 111207.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/b5693384-99fe-f7c5-711f-b4586f907a89.png)
こちらから参照できるようです。
試しに# Create S3 Bucketと入力して、CodeWhispererの提案を実行しましたが、リファレンスログは出てきませんでした。
![スクリーンショット 2023-07-28 105544.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981404/dde9b1f2-1294-1044-2df4-87c724e52e4c.png)

今回の提案内容はオープンソースからのトレーニングデータではなく、CodeWhisperer自体が所有している提案内容だったと推測はできますが、リファレンスログ機能については使っていくうちに出会うことになるのでしょうか。