📙

Amazon CodeWhisperer試してみた & 所感

2023/05/15に公開

コーディングを支援してくれるサービスAmazon CodeWhispererがGAになりましたね!(4月)
生成AI系が大ブームですが、AWSからもしっかりとサービスが出たようです。

https://aws.amazon.com/jp/blogs/news/amazon-codewhisperer-free-for-individual-use-is-now-generally-available/

早速試してみました。

💡所感まとめ

  • 無料でクォータ無しが嬉しい。コーディング支援ツールを手軽に導入してみたい方に良さそう?
  • 提案はおまけ程度に考えて使うのがよさそう?(ただし提案を活かすべきシーンもある!)
  • セキュリティスキャンは良さそう。他のツールとの兼ね合いはどう?

📗概要・一般情報

より詳しい内容が知りたい場合は中のドキュメントをご参照ください。

1.機能

  • コーディング支援
    • コメントからコードを提案
    • コーディング中に続きを提案
    • IDE
      • VSCode
      • JetBrains
      • Cloud9
      • Lambda Console
      • Sagemaker Studio
      • JupyterLab
    • 言語
      • Python、Java、JavaScript、TypeScript、C#、Rust、Go、Ruby、Scala、Kotlin、PHP、C、C++、Shell Scripting、SQL
  • 提案コードのリファレンス提供
  • セキュリティチェック
    • 静的解析をかけるイメージ
    • 個人
      • 50回/month
    • 企業
      • 500回/user, month

https://docs.aws.amazon.com/ja_jp/codewhisperer/latest/userguide/features.html

2.料金

  • 個人
    • 無料
  • 企業
    • $19/1user, 1month
    • 月の途中から使用すると按分される

https://aws.amazon.com/jp/codewhisperer/pricing/

🔨環境構築

1. BuilderIDの発行

使い始めるには「AWS Builder ID」が必要です。
これは、AWSアカウントとは完全に別物で、特定のAWSサービスを使うために発行する必要があるIDです。

https://docs.aws.amazon.com/ja_jp/signin/latest/userguide/sign-in-aws_builder_id.html

  • CodeCatalyst
  • CodeWhisperer

などのサービスで必要なようです。
メアドさえあればすぐに作れるので、Whispererを使うのにAWSアカウントは必要ありません。

ここでBuilderIDを発行できます。

2. VSCodeにWhispererを入れる

toolkitが入っていたらすぐに入れられます。
入れ方:

https://docs.aws.amazon.com/ja_jp/codewhisperer/latest/userguide/whisper-setup-indv-devs.html

⭐コード生成機能を試す

簡単なコードは問題なく生成できました。

記事に載っているコメントと全く同じコメントをしてみます。
https://aws.amazon.com/jp/blogs/news/amazon-codewhisperer-free-for-individual-use-is-now-generally-available/

/** create a lambda function that stores the body of the SQS message into a hash key of a DynamoDB table */

おぉ〜それっぽい。
ただ、コンテキストがかなり大事なようですね。

以下みたいにimport文を最初から並べた上でコメントを書くと、いい感じに上記のコードが提案されましたが、

コード

import java.util.Map.Entry;
import java.util.stream.Collectors;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage;
import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage.MessageAttribute;
import com.amazonaws.servicex.sqs.model.MessageAttributeValue;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.regions.Regions;

/** Create a lambda function that stores the body of the SQS message into a hash key of DynamoDB table. */


↑この状態ならうまく生成できる。

import文は消して、コメント部分だけ与えても全然うまく行きませんでした。
※ひたすらimport文が提案され続ける地獄。

コメントの質だけでなく、周りの質が大事なようです。
FAQにも周りを読み取っていると書いてあります。
https://aws.amazon.com/jp/codewhisperer/faqs/
https://docs.aws.amazon.com/codewhisperer/latest/userguide/sharing-data.html

周りのデータを読み取るのは機能提供のために仕方なく、保存や使用はしない、と書かれています。
これはオプトアウト不可能。

もう1つ、ユーザの使用状況(例えばコードの提案が受け入れられたかなど)を収集したりもするようです。
これはオプトアウト可能。

追記:AWSからWhispererの効果的な使い方の記事が紹介されました。

AWSからWhispererの使い方の記事が出ていました!
https://aws.amazon.com/jp/blogs/news/10-ways-to-build-applications-faster-with-amazon-codewhisperer/

1. タイピングの減少

これはオートコンプリートのことですね。
これだけでもCodeWhispererをとりあえず入れておく価値があると思います。

書くことが決まっている場合は補完してくれると助かります。

6. サンプルデータの作成

これは面白いですね。
単純なテストケースとかだったら嬉しいかもしれません。

7. 正規表現の簡略化

正規表現は難しいので、提案してくれると助かります。
提案が若干怪しいのですが、このあたりは私のプロンプト力が足りないのでしょう。。

8. サードパーティのコードライブラリをより早く学習

これもありがたいです。

ライブラリを使用するにあたり、どうやって使ったらいいのかわからない場合も多いと思います。
そんなときにコードを提案してくれると助かります。

boto3の使い方がわからない場合の例

流石に雑すぎますが、もう少しコメントとかを与えると良いコードを出してくれそうですね。

🔍コードリファレンス機能を試す

これは全然うまく行きませんでした。なにもリファレンスが表示されません。
リファレンスがあるようなコードを提案したときにしか見れないんだと思います。

公式デモはこちら:

https://aws.amazon.com/jp/blogs/news/amazon-codewhisperer-free-for-individual-use-is-now-generally-available/

🌅セキュリティスキャンを試す

自分が適当に書いていたSpringBootバックエンドに使ってみました。

XSS対策ないよ

確かに、サニタイジングはしていませんね。(このアプリは公開していないので大丈夫です。念のため補足。)

S3バケットの所有者が設定されていないよ


おぉ。そういうのがあるのですね。

  • どうやって直せばいいのか
  • そのドキュメントはどこをみたらいいのか

までくれたら最高ですね。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/bucket-owner-condition.html

ページネーションがないよ

確かに、今はそれはありえないようなデータ数なので適当に書いていますが、今後ページネーションが必要になってきます。

コードスキャンは割といい感じかもしれないですね!
せっかく生成AIなんだからそのまま問題を直してくれてもいいが…それは求め過ぎということでしょう。

ただ、Whispererのスキャンを使うか…?という疑問はあります。

基本的にどこかのプロジェクトに参加していると静的解析ツールなどを導入していると思うので、ここであえてWhispererを使うメリットがあるのかどうかはわからないですね。

今回比較はしていませんが、大変優れているかと言われるとそんなこともないと思いますし。。

まとめ・所感

Whisperer使ってみました。所感は最初にまとめたとおりです。

無料でクォータ無しが嬉しい。コーディング支援ツールを手軽に導入してみたい方に良さそう

無料なのが大きいですね。
とりあえずこういうAIツールをコーディングに入れてみたい方にとっては、悪くない選択肢だと思います!

ただまぁ、お金を出せるならCopilotのほうがいいのでは、と個人的には感じました。

  • 提案が速い
  • 精度も良い

と思っています。

提案はおまけ程度に考えて使うのがよさそう?(ただし提案を活かすべきシーンもある!)

途中の実験にもありましたが、提案力は周りのコード(コンテキスト)にかなり影響されます。
また、必ずしも欲しいコードがぱっと出せるほどプロンプト力が高い人は少ないと思います。

なので、コメント(呪文)に試行錯誤するより、基本的には自分でコーディングしていき、補助はおまけ程度に考えて受けられるときに受ける、くらいのスタンスが一番いいのではと感じました。

ただ、提案を活かすべきシーンもいくつかありました!

  • サンプルデータの作成(単純な反復作業)
  • 正規表現(メアドチェックなどコードが決まりきっていることが多い)

などですね!

セキュリティスキャンは良さそうだが、他のツールより優位かはどう?

セキュリティスキャンは結構指摘してくれました。いい感じです。

ただ、指摘結果をどうな押したらいいのかは提案してくれなかったので、そこまでくれたらいいのになという思いです。
このあたりも気になります。

  • 他の静的解析ツールと比べて高性能・高機能…?
    • 例えば、スキャン結果が修正されていないとコミットを許さない、みたいな組み込みはできない。
  • 回数制限(個人プランは50回/月)

というわけで、
Copilotを持っていない人は、面白いので入れてみていいのではないでしょうか!というのが印象でした。

Discussion