はじめに
builders.flash 読者の皆さん、こんにちは !
AWS のシニアテクニカルインストラクター 野邊 (のべ) です。
今回は Amazon CodeWhisperer の初学者の方向けに解説していきます !
さて、いきなりですが皆さんはコードを書くことはありますか ?
コードと言っても、アプリケーションを開発するためのコードや、Infrastructure as Code (IaC) として例えば AWS のサービスのリソースを構築するためのコードなどもありますよね。おそらくお仕事で何らかのコードを書く方も多いのではないかと思います。
筆者は、AWS で主にサーバーレスや開発関連のトレーニングを担当しているので、デモやサンプルの作成時に様々なコードを書くことが多いのですが、その際「あれ、こういうときはどんなコード書けばいいんだっけ ?」と悩んだり、定型的なコードであれば「同じようなコードを何度も書くのは面倒だな~」と感じることもあります。
今回説明する Amazon CodeWhisperer は、そんな場面で役立つ可能性がありますので、この記事を参考に一度試して頂ければと思います !
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
builders.flash メールメンバー登録
1. Amazon CodeWhisperer とは
2. Amazon CodeWhisperer による Python コードの提案
ここでは、Visual Studio Code で Python のコードを Amazon CodeWhisperer に提案させる例を紹介します。
Visual Studio Code から Amazon CodeWhisperer を使用するには、AWS Toolkit for Visual Studio Code のインストールが必要です。また、今回は CodeWhisperer Individual Tier で利用しますので、AWS Builder ID との関連付けも必要です。これらは、Amazon CodeWhisperer のユーザーガイドに手順の説明 がありますので、事前に実施しておきましょう。
Visual Studio Code で AWS Toolkit のアイコンをクリックしたときにこのように表示されていれば OK です。

AWS Builder ID の確認
Visual Studio Code の画面左下の表示も確認しておきましょう。図のように [AWS: AWS Builder ID] の左横にチェックマークが表示されていれば、AWS Builder ID との関連付けは完了しています。

Python 関数の作成
それでは、コードを提案させてみましょう。まず、シンプルに 2 つの 引数を加算する Python の関数を作ってみます。そのため、calc.py という名前のファイルを作成します。
Amazon CodeWhisperer では、求めるコードをコメントとして自然言語で記述することで、その内容を基にコードを提案してくれますので、calc.py の 1 行目に # Function to add a and b と記述して改行します。すると、Amazon CodeWhisperer から提案コードが生成されグレーで表示されます。提案されたコードを受け入れる場合は、Tab キーを押下します。最初は関数名や引数の提案だけですが、さらに改行すると関数の実装部分の提案も表示されます。
以下のアニメーションで、その様子をご覧ください。処理内容がシンプルなこともあり、提案されたコードで問題ないので受け入れました。
Amazon CodeWhisperer の操作について
コードの提案を手動でトリガーさせる場合は、 Windows であれば Alt キー + c キーを、Mac であれば Option キー + c キーを押下します。
複数のコードが提案される場合もあります。その場合、キーボードの右向きの矢印キーを押下するごとに他の候補を参照できます。前の候補を見返したい場合は、左向きの矢印キーを押下します。
提案されたコードを非表示する場合は、Esc キーを押下します。
Amazon CodeWhisperer によるコードの提案の一時停止 (Pause) も可能です。Pause の設定は、Amazon CodeWhisperer のユーザーガイドに手順の説明 をご確認ください。
コメントを英語以外の言語で記述してもコードが提案される可能性がありますが、サポートされる言語は英語となります。

Unit テストの作成
次に、さきほど作成した加算する関数の Unit テスト用のコードを提案させてみます。test_calc.py という名前のファイルを作成し、下記の import 文を記述します。
import unittest
import calc
テストケースの記述
次に下記のコメントを記述して、改行します。
# Test case for the add functionin
Unit テストコードの提案
すると、Amazon CodeWhisperer が Unit テストコードの 候補を提案します。こちらのアニメーションで、その様子をご覧ください。

Unit テストコードの作成完了
これで関数と、その Unit テストを行うコードを作成できました! 念のため、Unit テストを実行してみましょう。 Visual Studio Code のターミナルから下記のコマンドを実行します。
python -m unittest
テスト結果
Amazon CodeWhisperer が提案した Unit テストのコードではテスト成功を期待しているコードなので、下記のように Unit テストは成功します。
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
3. Amazon CodeWhisperer の活用

3-1. AWS CloudFormation のコードの提案
では、Visual Studio Code で AWS CloudFormation のコードを Amazon CodeWhisperer に提案させていきましょう。今回は、YAML でコードを書いていきます。
こちらのアニメーションでは、S3 バケット名のパラメータと、S3 バケット作成の YAML コードを提案させています。

テンプレートの確認
テンプレートが完成したらスタックを作成して、S3 バケットの作成を確認しておきます。
3-2. AWS Software Development Kit (AWS SDK) を使用したコードの提案
次に AWS Lambda のコンソールのコードエディタで、AWS SDK を使用したコードを提案させてみます。なお 2024 年 1 月時点では、AWS Lambda コンソールのコードエディタにおける Amazon CodeWhisperer のコード提案は、バージニア北部のリージョン (us-east-1) で使用する必要がありますのでご注意ください。
最初に AWS Lambda コンソールから Python の Lambda 関数を作成しますが、このとき実行ロールとして、前述の 3-1 で作成した S3 バケットへ PutObject 操作を許可するポリシーを実行ロールに加えて下さい。(この詳細については、「AWS Lambda 関数に適切に AWS IAM のポリシーを設定しよう !」の記事が参考になります。)
そして、コードソースの [Tools] メニューをクリックし [Amazon CodeWhisperer Code Suggestions] がチェックされた状態にします。

Boto3 コードの提案
その後、コードエディタで前述の 3-1 で作成したバケットにオブジェクトを保存する AWS SDK for Python (Boto3) のコードを提案させます。
こちらのアニメーションは、Boto3 のコードを提案させている例です。
最初は、Amazon S3 へリクエストを送信するためのクライアントオブジェクトを生成するコードを、次にバケットへオブジェクトを格納するコードを、既存のコードを踏まえて提案してくれていますね。
Lambda 関数のコードを完成させたら [ Deploy ] ボタンをクリックしておきましょう。

3-3. AWS Command Line Inrerface (AWS CLI) のコマンドの提案
次に Visual Studio Code のターミナルで、AWS CLI のコードを提案させてみます。これは 2024 年 1 月時点ではプレビューの機能であり、OS として macOS を使用する必要がありますのでご注意ください。
また、この機能を使用するには、別途インストールが必要になります。Amazon CodeWhisperer のユーザーガイド にインストールの手順 が記載されているので確認しておきましょう。
インストールが完了すると、ターミナルで利用可能になり、 各種コマンドの提案や補完を行えます。
では 3-2 で作成した Lambda 関数を AWS CLI のコマンドで呼び出してみます。ここでは、そのコマンドが全く分からないという前提で、AWS CodeWhisperer に提案させてみます。コマンドラインから Amazon CodeWhisperer にコマンドを提案させる場合は、cw ai と記述し、その後自然言語で実行したい内容を記述します。
以下のアニメーションでは、AWS Lambda 関数の呼出しのコマンドを提案させ、そのコマンドの編集を選択しています。

バケットの確認
実行後、3-1 で作成したバケットにオブジェクトが格納されるので、それを AWS CLI のコマンドで確認します。
以下のアニメーションでは、バケットの内容を表示するコマンドを実行するとき、オプションを表示してくれている様子がわかります。確認出来たら、さらにそのオブジェクトをローカル環境にコピーして内容を表示しています。
上記すべてのコマンドで提案やオプションの候補などもリストで表示してくれました!もちろん、一部、編集が必要な箇所もありましたが、自分でリファレンスなどで調べることもなく、サクサクとコマンドを組み立てて実行することができました!

4. まとめ
今回は Amazon CodeWhisperer の紹介として、下記を説明しました。
Amazon CodeWhisperer とは
Amazon CodeWhisperer による Python コードの提案
Amazon CodeWhisperer の活用
3-1. AWS CloudFormation のコードの提案
3-2. AWS Software Development Kit (AWS SDK) を使用したコードの提案
3-3. AWS Command Line Interface (AWS CLI) のコマンドの提案
従来は、もしコードやコマンドの書き方がわからない場合や忘れている場合は、リファレンスを調べたり他のサンプルなどから探す作業が必要となり、それなりに時間もかかっていましたが、Amazon CodeWhisperer を活用すればその場でコードを提案してくれるので、時間短縮、ひいては生産性の向上を期待できそうですね。
今回紹介した中では、特に AWS CloudFormation のコード作成時に Amazon CodeWhisperer の提案により労せずコードを完成できたことに感動しました。ただ、Amazon CodeWhisperer は自分の求める完璧なコードを常に提案してくれるわけではないので、提案されたコードをベースに手を加えることも想定しておきましょう。
この記事を参考に、皆さんも Amazon CodeWhisperer を試してみてください !
なお、Amazon CodeWhisperer の他に生成 AI の活用するサービスである Amazon Bedrock の記事「Amazon Bedrock を利用して、画像生成アプリケーションを開発してみた!」もありますので、よろしければ読んでみてください!
筆者プロフィール
アマゾン ウェブ サービス ジャパン合同会社
AWS トレーニングサービス本部 シニアテクニカルインストラクター
自分が体験した「成功」と「失敗」、そこから「学んだこと」を皆さんにお伝えするべく、日々 AWS のトレーニングの登壇をしています。
最近は「仮面サーバーレス」として サーバーレスのトレーニングや デジタルトレーニングの情報を皆様にお届けしています。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages