🗣️

AWSのコーディング支援サービス「Amazon CodeWhisperer」のプレビュー版を試してみた

2022/07/23に公開

こちらのニュース[1]で、Amazon CodeWhispererのプレビュー版が使えると出ていました。
申請すればプレビュー期間中に無料で使えると記載があったので、試してみることにしました。

Amazon CodeWhispererとは

CodeWhisperer を使用すれば、IDE のコードエディタにコメントを書き込むだけで、開発プロセスを迅速化できます(公式抜粋)

「GitHub Copilot」[2] と同じ種類のサービスになるのでしょうか。
コーディング支援サービスがどんどん進化しています。便利なものはどんどん使っていきたいですね。

事前準備

使う前に申し込み

リリース記事[1:1]を見たところ、「ウェイトリストに参加してCodeWispererにアクセス」と書いてあったので、順番待ちを申し込みました。
AWSに詳しい人には常識なのかもしれませんが、こんな感じでプレビュー版のサービスを使わせてくれるんですね。

他のサービスもプレビュー版が発表された際には試したいです。
2022/7/1に申し込み、2022/7/23にメールが届きました。結構かかりました。

VSCodeにて設定

以下を参照し、VSCodeで設定しました。

https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/codewhisperer-setup.html

AWS ToolKitの拡張機能が必須でした。

1

AWS ToolKitのDeveloper Toolsの欄に、しっかりとCodeWhispererが表示されていますね。
記事に従って案内メールに記載されたアクセスコードを入力すると、CodeWhispererが使えるようになりました。

コーディングをしてみよう

現在対応している言語はPython, Java, JavaScriptです。
普段はPythonを使っているので、今回は恩恵を感じるべく、JSで書いてみようと思います。

単純なメソッドを作ってみる

まずは単純なメソッドを作ってみようと思います。
function s3_download までタイプして、Alt+Cをすると以下のようにサジェストが表示されました。

このままTabキーを押すと、サジェストが反映されます。

2

バケット名が pruebas-g19 となっているのが少し謎ですが、こんな感じで簡単にメソッドを作ることが出来ました。

コメントからサジェストを出すことも出来ました。

3

他にも、dynamodbからアイテムを取得するメソッドなども、簡単に作成することが出来ました。

4

コメントでメソッドのサジェストを出したいときには、function まで入力してあげないと、メソッドのサジェストが出てこないですね。

5

ちなみに、TypeScriptの.tsファイルでもサジェストは表示されました。

単純なメソッドに追加機能をつけてみる

AWS関連のコードサジェストが簡単に出るのは、前情報から分かっていました。
少しメソッド名を改良してみて、さらに追加のコードがサジェストされるか見ていきます。
S3からダウンロードしたオブジェクトをローカルに保存する、の意味でメソッド名を何度か改良してみました。

試したのは以下のメソッド名です。

s3_download_file_to_directory
s3_download_file_to_directory

いい感じです。

GitHub Copilotと比較してみる

いろいろと話題になっているGitHub Copilotです。

現在お試し利用しているので、ちょっと比較してみようと思います。
AWS関連のメソッドは流石にCodeWhispererに軍配が上がるのかなーと思っております。

AWS関連メソッドのサジェスト

CodeWhispererとCopilotで同一のメソッド名まで入力し、サジェストを確認してみます。
それぞれ、function s3_download まで入力してみました。

// CodeWhisperer
function s3_download(file_name, file_path, callback) {
    var AWS = require('aws-sdk');
    AWS.config.loadFromPath('./config/aws.json');
    var s3 = new AWS.S3();
    var options = {
        Bucket: 'pruebas-g19',
        Key: file_name
    };
    var file = require('fs').createWriteStream(file_path);
    s3.getObject(options).createReadStream().pipe(file);
    callback(null, 'ok');
}

// Copilot
function s3_download(file_name, file_path, callback) {
    var AWS = require('aws-sdk');
    var s3 = new AWS.S3();
    var fs = require('fs');
    var params = {
        Bucket: 'aws-sensor-temperature',
        Key: file_name
    };
    var file = fs.createWriteStream(file_path);
    s3.getObject(params).createReadStream().on('end', callback).pipe(file);
}

単純なコードでは、コードサジェストの性能は大差無さそうです。

外部APIの利用のサジェスト

Copilotのドキュメント[2:1]に、サンプルでTwitterのAPI呼び出しメソッドを試している所があるので、こちらを同一メソッド名でCodeWhispererで試してみます。

Copilotと比較

ほとんどCopilotと同じものがサジェストされました。
こちらも性能差がみられるほどではないですね。

感想

個人的な好みで言うと、CodeWhispererのほうがコーディングを邪魔しなくて好きです。
CopilotをVSCodeにインストールすると、こちらが何もアクションしなくてもコードサジェストをしてきます。これが結構気が散るんですよね。
CodeWhispererの場合は、サジェスト用のキー( Alt + C )を押さないと、サジェストが出てきません。
設定次第でCopilotも同じ状態にすることが出来るのかもしれませんが、初期設定でコーディングの邪魔をしないように作られているCodeWhispererのほうが好感が持てます。
Whispererという名前の通りのサービスかなと思います。

これらのサービスは便利な一方で、このサジェストを使いこなさないと恩恵をそこまで受けられないのかな、とも思いました。
サジェストの使い方を学ぶなら、自分でコーディングできるように勉強した方が良いでしょう。
無理矢理使うために入れておくのではなく、常に環境に入れておいてふとした時に使うような使い方が理想なのかなと思います。
今回の検証ではそこまで細かく見れなかったので、今後使いながら見識を深めていこうと思います。

脚注
  1. https://aws.amazon.com/jp/about-aws/whats-new/2022/06/aws-announces-amazon-codewhisperer-preview/ ↩︎ ↩︎

  2. https://github.com/features/copilot ↩︎ ↩︎

Discussion