どうも、VSCodeが大好きになってしまった寺内です。
巷では、GitHub Copilot が2022年6月に公開され、コードの著作権や人間がコードを書くとはどういうことか、など様々な議論がおきております。ここでご紹介するのは、CopilotのAWS版とも言うべきコーディング支援AIサービス AWS CodeWhisperer です。GitHub Copilotの発表の二日後に、AWSよりプレビューとして以下のとおり発表されました。

プレビューなので使う前には利用申請が必要です。
利用申請
以下のページから利用を申請します。

申請後、数日するとアクセスコードがメールで届きます。
VSCodeの拡張機能
Cloud9でも使えますが、ここではVSCodeで使ってみます。
VSCodeの機能拡張で AWS Toolkit をインストールします。
すると、左のサイドメニューにAWSアイコンメニューができます。
まずAWS Toolkitをインストールしたら、アクセスキーとシークレットキーを使い、AWS APIがコールできるように認証設定を行ってください。
その後、CodeWhispererの設定を行います。
一番下に CodeWhisperer のメニューがあります。
CodeWhispererメニューから「Enter Preview Access Code」を選び、メールで届いたアクセスコードを入力します。
その後、Enable CodeWhispererを押すと、Amazon CodeWhisperer Preview Terms が表示されるので、それをAcceptします。
使い方
使い方は、まず途中までコードを書きます。
import boto3
# create vpc
def
この def
まで入力したら、 Alt+c
を入れます。
Alt+c
を入力することで候補を表示させることが出来ます。以下のようになります。
この状態で、カーソルキーの左右で候補を選ぶことが出来ます。
これでいいという候補が見つかったら、 Tab
を押すことで確定します。
次にコードを見ていると、ec2 client を作らないといけないことに気づきます。
そこで ec2 client を作るコードも引っ張ってきましょう。
続きのコメントで # create ec2 client
と入れて、 def
の後で Alt+c
を入れます。
こうなりました。
このようにして、コーディングを楽ちんに進めることが出来ます。もちろんサジェスチョンされた意味がわからないとダメですが。
日本語
コメントは日本語でも有効です。
# EC2インスタンスを作成する
と入れてみましょう。
コードはよいですが、引用されたコード内にコメントが日本語だと文字化けするようです。
ただ、学習対象のコードは圧倒的に英語のほうが多いはずですので、極力英語のコメント分で検索するようにしましょう。
一般的なコード
AWS関係のコード以外でも試してみましょう。
円の面積を求める関数を書いてみます。
いいですね。でも、3.14 の固定値が気になります。
そこで、mathライブラリを予めインポートしておいた場合にどうなるか試してみます。
同じコメント分でサジェスチョンさせます。
ちゃんと math.pi
を使ってくれました。
同じく日本語のコメント分でもやってみます。
できました。
終わりに
text to image や text to movie ができたのとほぼ同時期に、text to code が出来たということですね。2022年は、機械学習の民主化元年といってよいのではないでしょうか。
AWS CodeWhispererが、学習元データを何で行っているかわかりませんが、コメント文をキーとしたコードを学習し、マッチ度の高いものを出力しているように見えます。日本語でも候補が出ることから、日本語を含むオープンなコードで学習していることがわかります。
コードにアクセスキーやシークレットキーはさすがに出てこないと思いますが、稀にARNをハードコーディングしているコードがあります。すると、AWSアカウントIDを含んでサジェスチョンされてしまいます。(実際、出てきました)
AWSアカウントIDも機密にしておくべき情報ですので、くれぐれも公開コードにハードコーディングしないように気をつけましょう。