お客様のDXの推進やクラウド活用をサポートする
NRIグループのプロフェッショナルによるブログ記事を掲載

Amazon CodeWhisperer で AWS CDK を試す

はじめに

NRI 新卒 3 年目の八十田です。

7 月に JAWS-CDK 支部で Amazon CodeWhisperer で AWS CDK のソースコードの自動生成を試した内容で登壇したので、今回はそのときの内容についてご紹介します。Amazon CodeWhisperer を活用して、AWS CDK のコーディングがどれくらい効率化されるかやどんなことができるのかを試してみました。

登壇した際の資料はこちらから参照することができます。

Amazon CodeWhisperer

Amazon CodeWhisperer は、機械学習を用いて、コードの続きやコメントの内容からコードを提案してくれるサービスです。

コードを生成してくれる代表的な AI サービスである GitHub Copilot の AWS 版となります。 2022 年 6 月に行われたAmazon re:MARS 2022でプレビュー公開され、2023 年 4 月に 正式に一般提供が開始されました。1

対応している言語は、Python、Java、JavaScript、TypeScript、C# 、Go、Rust、Kotlin、Scala、Ruby、PHP、SQL、C、C++、シェルスクリプトです。また、対応しているコードエディタは Visual Studio Code、IntelliJ IDEA、AWS Cloud9 です。2

コスト

Amazon CodeWhisperer は個人利用だと無料です。 個人ではなく、法人のアカウントで利用する場合$19/user/month (2023年10月時点)がかかります。

正式な料金は公式ドキュメントを参照してください。

VSCode と連携

今回は CodeWhisperer を VSCode に導入して利用しました。

ローカルの IDE に CodeWhisperer を導入する場合、AWS アカウントは不要で、個人プランでは AWSBuilderID を事前に作成する必要があります。

詳細な手順については公式ドキュメントを参照してください。

AWS Cloud Development Kit(AWS CDK)

AWS Cloud Development Kit(AWS CDK)とは、AWS リソースをプログラミング言語で 定義できるツールです。

プログラミング言語で定義したコードは、CloudFormation のテンプレートに変換され、テンプレートに基づき AWS リソースがデプロイされます。 AWS CDK では、AWS リソース定義の抽象化レイヤーが提供されているため、簡潔にリソースを定義できることが特徴です。

AWS CDK のセットアップや詳細については公式ドキュメントを参照してください。

AWS CDK で Amazon CodeWhisperer を試す

AWS CDK で Amazon CodeWhisperer を試します。

CDK プロジェクトの作成

AWS CDK プロジェクトを作成します。

mkdir [任意のディレクトリ名] && cd [任意のディレクトリ名]
cdk init [任意のディレクトリ名] --language typescript

S3 バケットを作成してみる

コメントで「create S3 Bucket」と入力して Enter キーを押すと、以下のように S3 バケットのコードが自動生成されます。Bucketをインポートしていない場合、import の箇所で Enter キーを押すとBucketの import 文も自動生成されます。

CodeWhisperer から提案されたコードは Tab キーを押すことで確定できます。

Lambda と API Gateway を作成してみる

まず、スタックの作成を行います。

スタックとは AWS CDK のデプロイ可能な最小単位で CloudFormation のスタックと同義です。import 文を記述していると、以下のように Lambda や API Gateway の import 文を提案してくれます。

import 文の記述はコード補完が効かないこともあるので、これは便利だと感じました。

続いて Lambda の作成で、「const hello」と入力すると、CodeWhisperer が続きのコードを提案してくれました。また、改行するたびに必要なプロパティを提案してくれるので、あっという間に Lambda のスタックを作成することができました。

次に API Gateway の作成も、Lambda と同様、入力途中からコードを提案してくれました。このように、簡単に Lambda と API Gateway のスタックも作成することができます。

テストコードを作成してみる

続いてテストコードの作成をしてみます。今回は Snapshot Test と Fine-grained assertions Test を作成できるか試します。

Snapshot Test

Snapshot Test は、AWS CDK を元に生成された CloudFormation のテンプレートの差分を比較するテストです。

Snapshot Test のコードを書いていると、途中から以下のコードが提案されました。
コードをよく見ると、要求していない SQS のテストコードも生成されていることがわかります。

SQS 部分を削除し、入力を進めると生成したテンプレートとスナップショットが 同じ内容かどうか検証する expect(template.toJSON()).toMatchSnapshot();を提案してくれました。

Fine-grained assertions Test

Fine-grained assertions Test は、AWS CDK で生成されるリソースが期待通り
に生成されているかを確認するテストです。Fine-grained assertions Test ということで、Lambda と API Gateway が想定数作成されるかのテストを作成してみます。

「test lambda〜」「test api〜」と入力した時点でそれぞれのリソースに該当する Fine-grained assertions Test を CodeWhisperer が提案してくれました。

まとめ

Amazon CodeWhisperer で AWS CDK を試しました。

import 文の補完などコーディングのスピード向上だけでなく、テストコードを生成できる点は便利だと感じました。また、Amazon CodeWhisperer には、ソースコードの脆弱性をスキャンするコードセキュリティスキャンという機能があります。コードセキュリティスキャンは Java、JavaScript、および Python のソースコードに対応しているので、今後コードセキュリティスキャンも試してみたいなと思いました。

Amazon CodeWhisperer は AWSBuilderID があれば、誰でも使うことができますので、ご興味のある方は試してみてください。

  1. https://aws.amazon.com/jp/about-aws/whats-new/2023/04/amazon-codewhisperer-generally-available/

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

 

お問い合わせ

atlax では、ソリューション・サービス全般に関するご相談やお問い合わせを承っております。

 

関連リンク・トピックス

・OSSサポート・保守サービス | OpenStandia™【NRI】

 

※ 記載された会社名 および ロゴ、製品名などは、該当する各社の登録商標または商標です。
※ アマゾン ウェブ サービス、Amazon Web Services、AWS および ロゴは、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。
※ Microsoft、Azure は、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。
※ Google Cloud、Looker、BigQuery および Chromebook は、Google LLC の商標です。
※ Oracle、Java、MySQL および NetSuite は、Oracle Corporation、その子会社および関連会社の米国およびその他の国における登録商標です。NetSuite は、クラウド・コンピューティングの新時代を切り開いたクラウド・カンパニーです。