AI がコーディングを支援 !

Amazon CodeWhisperer を使ってみよう!

2024-02-01
How to be a Developer

野邊 哲男

builders.flash 読者の皆さん、こんにちは !
AWS のシニアテクニカルインストラクター 野邊 (のべ) です。

今回は Amazon CodeWhisperer の初学者の方向けに解説していきます !

さて、いきなりですが皆さんはコードを書くことはありますか ?
コードと言っても、アプリケーションを開発するためのコードや、Infrastructure as Code (IaC) として例えば AWS のサービスのリソースを構築するためのコードなどもありますよね。おそらくお仕事で何らかのコードを書く方も多いのではないかと思います。

筆者は、AWS で主にサーバーレスや開発関連のトレーニングを担当しているので、デモやサンプルの作成時に様々なコードを書くことが多いのですが、その際「あれ、こういうときはどんなコード書けばいいんだっけ ?」と悩んだり、定型的なコードであれば「同じようなコードを何度も書くのは面倒だな~」と感じることもあります。

今回説明する Amazon CodeWhisperer は、そんな場面で役立つ可能性がありますので、この記事を参考に一度試して頂ければと思います !

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. Amazon CodeWhisperer とは

Amazon CodeWhisperer は、開発者の生産性の向上を目的に、AI により生成されたコードを提案・自動挿入できるツールで、主に下記の機能を提供します。
(なお下記の内容は、2024 年 1 月時点の情報に基づいており、これは今後追加・変更される可能性もあるので、詳細は Amazon CodeWhisperer の Web サイトの情報 をご参照ください。)

コメントや既存のコードを基に必要なコードを提案

例えば開発者が Visual Studio Code を使ってコードを書くとき、必要なコードについてコメントで記述すれば、Amazon CodeWhisperer がそのコメントの内容や既存のコードから、次に書くべきコードを提案してくれます。この提案は複数の候補を提示する場合もあり、開発者はその中から求めるコードを選択することで、自動的にコードを挿入できます。

対応しているコードの種類や統合開発環境 (IDE) も多種多様で、例えばコードであれば、Python、Java、JavaScript、TypeScript、C#、Go、Rust、PHP、Ruby、Kotlin、C、C++、シェルスクリプト、SQL、Scalaに対応しています。

さらに、Infrastructure As Code (IaC) で用いられるコードにも対応しています。AWS CloudFormation (YAML、JSON)、AWS Cloud Development Kit (AWS CDK) (TypeScript、Python)、HashiCorp Terraform (HCL) に対応しています。

また、IDE は Visual Studio Code、Visual Studio、JetBrain の IDE (IntelliJ、PyCharm など)、AWS Cloud9 や AWS マネジメントコンソールの AWS Lambda のコードエディタや Amazon SageMaker Studio などにも対応しています。

コードをスキャンしてセキュリティの脆弱性を検知

Amazon CodeWhisperer は、コードをスキャンしてセキュリティ上の問題点を検知し、その修正候補の提示を行えます。例えば Open Worldwide Application Security Project (OWASP) で公開されている脆弱性を含んだコードや、暗号ライブラリのベストプラクティスが満たされていないコードを検知し、迅速に修正を検討できます。

この脆弱性の検知は Java、Python、JavaScript、C#、 TypeScript、 AWS CloudFormation (YAML、JSON)、 AWS CDK (TypeScript、Python)、 HashiCorp Terraform で利用可能です。脆弱性を修正するコード提案は、Java、Python、JavaScript に対応しています。

コマンドラインでコマンドの提案や補完

2024 年 1 月時点ではこの機能はまだ Preview ですが、Amazon CodeWhispererでは コマンドラインで様々なコマンドの提案や補完が可能です。例えば、開発の場面でよく利用する Git や Docker、AWS Command Line Interface (AWS CLI) のコマンドを実行したい場合、自然言語で指示すれば Amazon CodeWhisperer がコマンドやそのオプションを提案してくれるので、それらの候補を選択して実行できます。

利用できる環境は下記で、この記事の後半でも実際に試してみた時の様子を説明します。

  • OS: macOS
  • シェル: bash、zsh、fish
  • ターミナル エミュレータ: iTerm2、macOS ターミナル、Hyper、Alacritty、Kitty、wezTerm
  • IDE: Visual Studio Code のターミナル、Jetbrains の ターミナル (Fleet を除く)
  • CLI: git、aws、docker、npm、yarn などの最もポピュラーな 500 以上の コマンドライン

Amazon CodeWhisperer の料金と AWS Builder ID

Amazon CodeWhisperer は、個人で利用する場合の CodeWhisperer Individual Tier組織での管理も可能な CodeWhisperer Professional Tier という 2 つの提供形態がありますが、CodeWhisperer Individual Tier の場合は無料でご利用いただけます。詳細は、Amazon CodeWhisperer の料金 のページをご確認ください。

また、CodeWhisperer Individual Tier で個人利用する場合は、AWS Builder ID が必要になりますので、AWS Sign-In ユーザーガイドの AWS Builder ID の作成のページ を参考に ID を作成しておきましょう。

その他詳細

Amazon CodeWhisperer についてまだまだ紹介したいことはあるのですが、紙面の関係上、全部は紹介できないのが残念です ! Amazon CodeWhisperer の Webサイトの情報 にはその他詳細な情報や、FAQ やドキュメントや各種リソースへのリンクなども掲載されていますので、ぜひご参照ください。


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 です。

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

それでは、コードを提案させてみましょう。まず、シンプルに 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 テスト用のコードを提案させてみます。test_calc.py という名前のファイルを作成し、下記の import 文を記述します。

import unittest
import calc

次に下記のコメントを記述して、改行します。

# Test case for the add functionin

すると、Amazon CodeWhisperer が Unit テストコードの 候補を提案します。以下のアニメーションで、その様子をご覧ください。

これで関数と、その Unit テストを行うコードを作成できました!
念のため、Unit テストを実行してみましょう。 Visual Studio Code のターミナルから下記のコマンドを実行します。

python  -m unittest

Amazon CodeWhisperer が提案した Unit テストのコードではテスト成功を期待しているコードなので、下記のように Unit テストは成功します。

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

3. Amazon CodeWhisperer の活用

Amazon CodeWhisperer が対応しているコードや IDE の種類は多岐にわたります。ここでは、下図のように AWS CloudFormation のコードの提案や、AWS Lambda のコンソールにおける AWS Software Development Kit (AWS SDK) を使用したコードの提案、またターミナルにおける AWS CLI のコマンドの提案なども試してみます。

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] がチェックされた状態にします。

その後、コードエディタで前述の 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 の紹介として、下記を説明しました。

  1. Amazon CodeWhisperer とは
  2. Amazon CodeWhisperer による Python コードの提案
  3. 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 を利用して、画像生成アプリケーションを開発してみた!」もありますので、よろしければ読んでみてください!


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

野邊 哲男
アマゾン ウェブ サービス ジャパン合同会社
AWS トレーニングサービス本部 シニアテクニカルインストラクター

自分が体験した「成功」と「失敗」、そこから「学んだこと」を皆さんにお伝えするべく、日々 AWS のトレーニングの登壇をしています。
最近は「仮面サーバーレス」としてサーバーレスのトレーニングデジタルトレーニングの情報を皆様にお届けしています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する