もりはやメモφ(・ω・ )

ITとか読書感想文とか

Amazon CodeWhisperer使ってみるよ

OpenAIのChatGPTや、MicrosoftのBingやAzure OpenAI Serviceで世間が賑わっている中、やっとというかやはりというかAWSも以下の二つを出してきました。

aws.amazon.com

aws.amazon.com

個人的にはGitHubのCopilotに課金するかどうか悩んでいたタイミングで、普段コードをばりばり書くわけでもないし、ChatGPT-4のコード生成能力も十分なものだから決め手にかけていました。ChatGPT-4はブラウザのタブに常駐していて便利に使っているけれど、やはりVSCから暗黙的に使えた方が便利だよねとも思っていて、今回のAWSのCodeWhispereの”無料”にまんまと載せられる形で試してみようとなりました。

まずはブログの記事を読む

ドキュメントを読みながら導入を進めることはおそらく簡単ですが、せっかくなのでブログ記事をちゃんと読みます。

Today, Amazon CodeWhisperer, a real-time AI coding companion, is generally available and also includes a CodeWhisperer Individual tier that’s free to use for all developers.

一行目から大事なことを全部伝えている感じのインパクトですね。

  • リアルタイムのAIコード補佐
  • ついにGAしたぜ
  • 個人利用なら無料!!

helping them write code quickly and securely and without needing to break their flow by leaving their IDE to research something.

ここも重要なワードが入っている認識で、OpenAIでは問題視されている”セキュリティ”を強調していて、”みなさんのIDEを離れることなく”と述べています。

their favorite IDEs, including Visual Studio Code, IntelliJ IDEA, and others.

具体的なIDEの例として”VSC”と"IntelliJ"が挙げられました。私はメインをVSCでちょっとした作業にvimを使うため十分嬉しい内容です。

CodeWhisperer helps with creating code for routine or time-consuming, undifferentiated tasks, working with unfamiliar APIs or SDKs, making correct and effective use of AWS APIs, and other common coding scenarios such as reading and writing files, image processing, writing unit tests, and lots more.

ここで特筆すべきは"making correct and effective use of AWS APIs"の部分で、AWSのサービスを操作するコードに強みを発揮してくれそうです。これはAWSの内部で豊富な学習がされていそうですね。

Using just an email account, you can sign up and, in just a few minutes, become more productive writing code—and you don’t even need to be an AWS customer.

驚くことに、メールアドレスさえあればAWSのアカウントすら不要みたいです。後発サービスですからかなり頑張っている感があります。

For business users, CodeWhisperer offers a Professional tier that adds administrative features, like SSO and IAM Identity Center integration, policy control for referenced code suggestions, and higher limits on security scanning.

一方でビジネスで利用する場合は、AWS SSO(旧名)の連携やポリシー制御やセキュリティスキャンなどの管理系機能が提供されるようです。普段の業務がAWS管理者でもあるためこれは嬉しい機能と言えます。

And in addition to generating code suggestions for Python, Java, JavaScript, TypeScript, and C#, the generally available release also now supports Go, Rust, PHP, Ruby, Kotlin, C, C++, Shell scripting, SQL, and Scala.

CodeWhispereが対応する言語が一気に述べられていて、GA済みの5言語と、GAではないがサポートする10言語が紹介されています。個人的にはTerraformのHCLがないのは残念ですが、考えてみればAWSにはCloudFormationがあるためないことはうなづけます。期待できるのはSQLの部分で、コードは書かないけれどSQLを書くような同僚氏たちが便利に使えたら良さそうに思いました。

During the preview we ran a productivity challenge, and participants who used CodeWhisperer were 27% more likely to complete tasks successfully and did so an average of 57% faster than those who didn’t use CodeWhisperer.

定量的で面白い数値が出ています。プレビューの段階でCodeWhispererの利用者は非利用者に比べてタスクの完成度が27%高く、速度も57%向上したそうです。生産性が爆上がりといって良いでしょう。

helping lower the risk of using the code and enabling developers to reuse it with confidence.

おそらくここはCodeWhispererの強みとするところで、信頼できて低リスクのコードを生成してくれるそうです。

CodeWhisperer is also the only AI coding companion to have security scanning for finding and suggesting remediations for hard-to-detect vulnerabilities, scanning both generated and developer-written code looking for vulnerabilities such as those in the top ten listed in the Open Web Application Security Project (OWASP).

さらなる強みとして、CodeWhispererには”セキュリティスキャン”の機能があり、これは現在のAIコード補佐ツールでは唯一CodeWhispererのみが持つようです。スキャンにおいてはOWASPトップ10のリストを利用するようです。

Code suggestions provided by CodeWhisperer are not specific to working with AWS. However, CodeWhisperer is optimized for the most-used AWS APIs, for example AWS Lambda, or Amazon Simple Storage Service (Amazon S3),

CodeWhispererは一般用途に使えるが、AWSのAPIsに最適化されていてLambdaやS3とかに強いぜ!とあります。これは業務でAWSを利用している身からしても嬉しい強みですね。

While CodeWhisperer provides suggestions for general-purpose use cases across a variety of languages, the tuning performed using additional data on AWS APIs means you can be confident it is the highest quality, most accurate code generation you can get for working with AWS.

くぅーこれはかっこいい文章と感じました。ことAWSのAPIs関連のコードにおいて "you can be confident it is the highest quality, most accurate code" 高品質かつ正確なコードであることに自信をもってよいそうです。最後の "you can get for working with AWS" で締めるところもあえてサービス名ではなくAWS全体の示すところが素敵に感じました。

Approved CodeWhisperer post
とりあえず良い記事だったので、UpVote をしておきました。

導入していく

紹介記事も読み終えたので実際に導入を進めていきます。先程の記事の "sign up" から以下のページへ飛びます。

aws.amazon.com

"Getting started" をつらつら読みながら試していきます。

Start working with Amazon CodeWhisperer Individual in just a few minutes.

とあるので、数分で終わるかも確認しましょう。(既に1分経過)

STEP1 Install AWS Toolkit

VSCの場合、”AWS Toolkit”が必要とありましたが、既に私は導入済みでしたので次に進みます。

marketplace.visualstudio.com

STEP2 Open CodeWhisperer button in VSC Extention にハマる

In the IDE, open the AWS extension panel and select the Start button under Developer Tools > CodeWhisperer.

この文章を読んでVSCの "AWS Toolkit" の設定画面を見ましたが、いまいち開始方法がわからずすでに10分以上経過しています。 一番下のステータスバー(?)に金色に輝くCodeWhispererの文字はありますがどうにもできません。

CodeWhisperer on Status bar

どうしようかとドキュメントを見直すと、ページ下にVSCとIntelliJそれぞれの動画が用意されており、それをみたら簡単にわかりました。

Enable CodeWhisperer in VSC

早速始めようとすると、CodeWhispererの認証方法を聞かれます。現時点では以下の3つのうち2つのみ利用可能なようです。

  1. 個人用途のAWS Builders ID
  2. AWS IAM Identity Center
  3. IAM Credential (未対応)

Select an authentication method to use AWS CodeWhisperer

あくまで個人の検証ですので"1. 個人用途のAWS Builders ID"で進めることにします。すると以下の画面にいきなり案内されましたが、手持ちに入力すべきOTPはありません。

Authentication for AWS Codebuilders ID

仕方ないのでこれを機にBuilders IDを作成することとします。

docs.aws.amazon.com

特に難しいことはなく、MFA用のデバイス登録までシュッと完了し、改めてVSCからCodeWhispererの利用をリトライします。

いい感じです。

Succeeded CodeWhisperer

使ってみる

簡単なLinuxコマンド

Pythonは当然のようにできると思われるので、Linux系のコマンドを聞いてみました。 以下はコメント部を私が入力し、コマンド自体はCodeWhispererによる生成です。 お題としては簡単ですし、できてますね。

#!/bin/bash

# Show Process list
ps -ef

# Show time
date

# get os running time
uptime

# Show proccess has include "log" in name
ps -ef | grep log

# Show proccess IDs has "log"
ps -ef | grep log | awk '{print $2}'

S3の操作

さてお次は本領発揮と言える、boto3を利用したAWSのAPIsを利用するコードを生成してみました。

# List aws s3 buckets とだけ入れると次々にコードの提案があるため、タブキーで提案を受け入れていくと以下のコードができあがりました。

# List aws s3 buckets
import boto3

s3 = boto3.client('s3')

# show  all buckets
response = s3.list_buckets()
buckets = [bucket['Name'] for bucket in response['Buckets']]
print("Bucket List: %s" % buckets)

このコードはちゃんと動きまして、以下のような結果を返します。

$ python3 test.py 1016ms Bucket List: ['aws-sam-cli-managed-default-samclisourcebucket-hogehoge', 'cdk-hnb659fds-assets-hogehoge-ap-northeast-1', 'cf-templates-hogehoge-ap-northeast-1', ....]

面白いのはAWS CodeWhispererの提案はすぐには止まる気配がなく、同じコードを出したりコメントを増やしたりしながらコードがどんどん増えていきました。

# List aws s3 buckets
import boto3

s3 = boto3.client('s3')

# show  all buckets
response = s3.list_buckets()
buckets = [bucket['Name'] for bucket in response['Buckets']]
print("Bucket List: %s" % buckets)

# show  all buckets
response = s3.list_buckets()
buckets = [bucket['Name'] for bucket in response['Buckets']]
print("Bucket List: %s" % buckets)
# snippet-end:[s3.python.buckets.complete]
# snippet-comment:[These are tags for the AWS doc team's sample catalog. Do not remove.]
# snippet-sourcedescription:[list_buckets.py demonstrates how to list all Amazon S3 buckets.]
# snippet-sourcedescription:[list_buckets.py demonstrates how to list all Amazon S3 buckets.]
# snippet-keyword:[Python]
# snippet-sourcesyntax:[python]
# snippet-sourcesyntax:[python]
# snippet-keyword:[Python]
# snippet-sourcesyntax:[python]
# snippet-sourcesyntax:[python]
# snippet-keyword:[AWS SDK for Python (Boto3)]
# snippet-keyword:[Code Sample]

終わりに

こうしてとりあえず自分の端末(VSC)でAWS CodeWhispserを利用できる状態になりました。 今のところChatGPT-4ほどの精度がなさそうな感触ですが、触りながら得意領域や特性を理解していけたらいいなと考えています。 AIサポートによって素晴らしい生産性が多くの人たちにもたらされる時代になっていて、未来がわからなすぎて楽しいですね。