Amazon CodeWhispererを使ってみた
AIがコメントや書きかけのコードから、次のコードを提案(サジェスト)してくれるAmazon CodeWhispererが正式リリースされました。
これまでGitHub Copilotという強力なコーディング支援AIがありましたが、こちらは月額1,000円かかるためなかなか個人利用では手が出しにくいと思っていました。そこへAmazon CodeWhispererが正式リリースされ、こちらは個人利用に限り無料で利用可能ということなので早速使ってみました。
事前準備(Visual Studio Code)
準備するもの
- VSCode(IDE)
- AWSアカウント
- AWS Builder ID
サポートしているIDEにはIntelliJ IDEA、Pycharm、Webstorm、VSCode、AWS Cloud9があります。今回はVSCodeを使用します。
AWS Builder IDはAWSでアプリケーションをビルドする人にとっての個人プロファイルで、Amazon CodeWhispererなどの一部のAWSサービスを利用する際に必要になるIDです。
拡張機能インストール
VSCodeを開き、ExtensionsからAWS Toolkitをインストールします。
AWS Builder IDでサインイン
AWS Toolkitのメニューを開き、Connected with AWS Builder IDをクリックします。するとダイアログでAWS Builder IDへ接続するための一時コードが発行されますので、「Copy Code and Proceed」をクリックします。(クリップボードにコピーされ次へ進みます。)
次のダイアログで「Open」をクリックすれば、ブラウザが立ち上がり、認証画面が開きます。
認証画面が開くと、VS Code上で認証コードが表示されますので、これをコピーしてCodeに張り付けてNextをクリックします。
次に出てくるAWS Builder IDの認証画面では、登録済みのEメールアドレスとパスワードで認証を行います。画面がCreate Accountになっている場合は、下部のボタンでSign inに切り替えることができます。
AWS Builder IDはこの時点で作成することもできます。
VS Codeで発行された一時キーを入力したことにより、「あなたのアカウントがVS Codeから使用されようとしています。」というメッセージが出ますが、自分が使用するので、Allow(許可)します。
最終的に以下のようなメッセージが表示されれば、AWS Builder IDの認証は成功です。
CodeWhispererを使う
CodeWhispererを開始/停止する
AWS Toolkitを開き、CodeWhispererのメニューから開始と停止ができます。
Auto-Suggestions機能を使う-1
以下のように関数ヘッダーコメントや、コード中のコメント、書きかけのコードから続きのコードをサジェストしてくれるようになります。
サジェストされたコードに問題なければタブキーを押すことにより、入力されます。
生成されたコード全体
ここでは指定された名前でS3バケットを生成する関数を作ってみました。動作については環境がないので確認しようがないですが、それでもこれはかなり使えそうなイメージです。
<?php
/**
* 引数に指定された名前でS3バケットを生成する関数
*/
function create_s3_bucket($name)
{
$s3 = new Aws\S3\S3Client([
'version' => 'latest',
'region' => 'ap-northeast-1',
'credentials' => [
'key' => getenv('AWS_ACCESS_KEY_ID'),
'secret' => getenv('AWS_SECRET_ACCESS_KEY'),
]
]);
$s3->createBucket([
'Bucket' => $name,
'ACL' => 'public-read',
'CreateBucketConfiguration' => [
'LocationConstraint' => 'ap-northeast-1',
]
]);
return $s3;
}
Auto-Suggestions機能を使う-2
AIによって生成されたコードを実行してみたいので、素数を求めるPHP関数を作ってみました。以下のgetPrimeNumbers関数は、ヘッダーコメント以外すべてAIによって生成されたコードです。
生成されたコード全体
<?php
/**
* 指定した数以下の素数を求める関数
*/
function getPrimeNumbers($max) {
$primeNumbers = [];
for ($i = 2; $i <= $max; $i++) {
$isPrime = true;
for ($j = 2; $j < $i; $j++) {
if ($i % $j == 0) {
$isPrime = false;
break;
}
if ($isPrime) {
$primeNumbers[] = $i;
break;
}
else {
continue;
}
}
}
return $primeNumbers;
}
foreach (getPrimeNumbers(50) as $value) {
print $value . "\n";
}
実行結果
実行結果も問題なさそう、と思ったんですが、2が抜けているようです。2も素数であるためこれはバグです。
$ php test.php 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
コードを確認すると2の時は2回目のfor文に入らないため$primeNumbersへの代入処理が行われないためだと思います。
また、入ったとしてもこの処理では2/2の余りが0になるため、素数とは判定されなさそうです。
コメント
コメントを投稿