Amazon Web Services ブログ

Amazon CodeWhisperer でソフトウェア開発を最適化する方法

企業は新しい機能を、より早く顧客に提供することで差別化を図ります。自動化を活用してコード品質を最適化し、パフォーマンスを向上させ、ソフトウェアがセキュリティ/コンプライアンス要件を満たしていることを確認することで、ソフトウェア開発を加速する必要があります。 Amazon CodeWhisperer は何十億行にも及ぶ Amazon とオープンソースのコードでトレーニングを受けた AI コーディングのパートナーであり、開発者は 統合開発環境 (以下、IDE) 内で全行コードおよび全機能コードの候補をリアルタイムで生成してコードを書くのに役立ちます。Amazon CodeWhisperer には 2 つの Tier があります。 Individual Tier は無料で、 Professional Tier は開発者に Code Whisperer へのアクセスを許可したい組織に管理機能を提供します。このブログでは、開発者が CodeWhisperer を使用する方法について概要を説明します。

はじめに

CodeWhisperer を使い始めるのは簡単で Amazon CodeWhisperer のリソースに文書化されています。セットアップが完了すると、CodeWhisperer は IDE と統合され、IDE に記述されたコメントに基づいてコード候補が表示されます。提案を受け入れるには Tab を使用し、提案を拒否するには Esc を使用し、提案を強制するには ALT + C (Windows) / Option + C (MAC) を使用し、提案を切り替えるには左矢印キーと右矢印キーを使用します。

CodeWhisperer は 15 種類のプログラミング言語のコード生成をサポートしています。 CodeWhisperer は Amazon Sagemaker Studio、Visual Studio Code、AWS Cloud9AWS Lambda や多くの JetBrains IDE など、さまざまな IDE で使用できます。サポートされている言語と IDE の最新情報については、Amazon CodeWhisperer documentation を参照してください。

コンテキストコードの提案

CodeWhisperer は、コンテキストに応じたコード候補がないか、コードとコメントを継続的に調べます。このコンテキスト情報とカーソルの位置を使用してコードスニペットを生成します。下の図は、Visual Studio Code のインラインコメントからのコード候補の例です。これは、CodeWhisperer が、ユーザーが変数やパラメーターを手動で置換しなくても、コンテキスト固有のコード候補を提供する方法を示しています。コメントでは、ファイルと Amazon Simple Storage Service (Amazon S3) バケットが指定されており、CodeWhisperer はこのコンテキストを使用して関連するコードを提案しています。

Image depicts a person typing on a computer keyboard, with a code editor window on the screen. The code shows a function for uploading a file from a local directory to an Amazon S3 bucket

CodeWhisperer は、シェルスクリプトやクエリ言語などの宣言型コードや手続き型コードの記述もサポートしています。次の例は、CodeWhisperer がシェルスクリプト内のコードブロックをサーバー間でループ処理して “hostname” コマンドを実行し、その応答を出力ファイルに保存することを推奨する方法を示しています。

Image is a gif of a person typing on a computer keyboard, with a terminal window on the screen displaying a shell script named 'shell_script.sh.' The code defines a list of servers and outputs the file path. As the person types, the code updates with the output path displayed below.

次の例ではコメントに基づいて、CodeWhisperer が共通のテーブル式を使用するための構造化クエリ言語 (SQL) コードを提案しています。

"Image is a gif of a person typing on a computer keyboard, with a code editor window on the screen displaying a SQL query. The query uses common table expressions to find the age of a product from an inventory table. As the person types, the query updates with the output displayed below in the form of SQL code. The background is a blurred office environment

CodeWhisperer は一般的な IDE で動作します。サポートされている IDE の詳細については、CodeWhisperer のドキュメントを参照してください。下の図は、CodeWhisperer が AWS Lambda コンソールと統合されているところです。

"Image is a gif of a person typing on a computer keyboard, with an AWS Lambda console on the screen. The person is entering a prompt to list all the Amazon S3 buckets. As the person types, the console updates with the output code displayed below, which can be executed to show all the S3 buckets."

CodeWhisperer は、AWS 関連のタスクや API 統合、外部 (AWS 以外) の API 統合など、さまざまなタスクを支援できる汎用性の高い AI コーディングアシスタントです。たとえば、下の図は、CodeWhisperer が Twilio の API のコードを提案しているところです。

"Image is a gif of a person typing on a computer keyboard, with an integrated development environment (IDE) on the screen. The person is entering a prompt to write a code that uses the Twilio API to make a voice call. As the person types, the IDE updates with the output function displayed below, which can be executed to make the voice call."

CodeWhisperer がコードをより速く記述するのにどのように役立つかを確認したので、次のセクションでは、責任を持って AI を活用する方法を探ります。

責任を持って AI を活用する方法

開発者はしばしばオープンソースコードを利用しますが、著作者の帰属やライセンステキストの管理など、ライセンスの帰属に関する課題に直面します。課題は、プロジェクト内で使用されている関連するオープンソースコンポーネントを適切に特定して帰属させることにあります。オープンソースのライブラリーやフレームワークは豊富にあるため、各コードを正確に追跡して属性を付けるのは時間がかかり、複雑になりがちです。ライセンスの帰属要件を満たさないと、法的な問題、知的財産権の侵害、開発者の評判の低下につながる可能性があります。CodeWhisperer のリファレンストラッキングでは、提案されたコードが既知のオープンソースコードとの類似点がないか継続的に監視されるため、開発者はそれをプロジェクトに組み込んで適切な帰属を確保することについて、情報に基づいた決定を下すことができます。

"Image is a gif of a code editor window displaying a counting sort function, with a section of the code highlighted. The highlighted section is the implementation of counting sort by digit, suggested by CodeWhisperer. The gif includes a caption mentioning that the implementation is being referenced from MIT. This showcases the capability of CodeWhisperer's reference tracking."

Shift left アプリケーションセキュリティ

CodeWhisperer はコードをスキャンして、オープンウェブアプリケーションセキュリティプロジェクト (OWASP) のトップ 10 に含まれる脆弱性や、暗号化ライブラリのベストプラクティスや AWS 内部セキュリティのベストプラクティスなどを満たさない脆弱性など、見つけにくい脆弱性がないか調べることができます。2023年5月30日時点では、CodeWhispererは Python 、Java 、JavaScript の各言語でのセキュリティスキャンをサポートしています。下の図は、最もよく知られている CWEs (共通脆弱性タイプ一覧) を識別する方法と、ボタンをクリックするだけで問題のあるコード行を詳しく調べる機能を示しています。

"Image is a gif of a code editor window displaying a code to download a file, with a section of the code highlighted. Below the code, there is an illustration of the identification of the most common Common Weakness Enumerations (CWEs) found in the code. However, it is mentioned that not all CWEs have been identified. Additionally, the illustration showcases the feature of being able to dive deep into the problematic line of code by clicking a button."

下の例では、CodeWhisperer が CWE のファイルごとの分析を行い、サニタイズされていない入力がコードとして実行、クロスサイトスクリプティング、リソースリーク、ハードコーディングされた認証情報、SQL インジェクション、OS コマンドインジェクション、安全でないハッシュなど、OWASP CWEs の上位 10 件を強調しています。

Image displays a screen with a proceeding from CodeWhisperer. The text highlights the file-by-file analysis of Common Weakness Enumerations (CWEs) and emphasizes the top 10 OWASP CWEs. These include CWE-94, CWE-95, and CWE-96, which pertain to the unsanitized input being executed as code. Additionally, CWE-20, CWE-79, and CWE-80 are related to cross-site scripting. Furthermore, CWE-400 and CWE-664 are associated with resource leaks, while CWE-798 relates to hardcoded credentials. CWE-89 refers to SQL injection, and CWE-77, CWE-78, and CWE-88 are connected to OS command injection. Lastly, CWE-327 and CWE-328 relate to insecure hashing.

テストケースの生成

優れた開発者は常にテストを書きます。CodeWhisperer はテストケースの提案やコードの機能の検証に役立ちます。CodeWhisperer は、境界値、エッジケース、その他テストが必要な可能性のある問題を考慮します。以下の例では、fact_demo 関数の使用に関するコメントがあると、CodeWhisperer はコンテキストの詳細を活用しながら fact_demo のユニットテストを提案します。

"Image is a gif displaying a code editor window, with a section of code highlighted. A comment within the code refers to the use of the fact_demo() function. CodeWhisperer is seen suggesting code for unit testing, leveraging contextual details related to the fact_demo() function. The background is a blurred office environment."

また、CodeWhisperer を使用すると、ユニットテスト用の繰り返しコードを簡単に作成できます。たとえば、INSERT ステートメントを使用してサンプルデータを作成する必要がある場合、CodeWhisperer はパターンに基づいて必要な insert を生成できます。

"Image is a gif of a person typing on a computer keyboard, with an integrated development environment (IDE) on the screen. The person is entering a prompt to insert sample users into a table, with details such as username, password, and status. As the person types, CodeWhisperer builds out the insert query for the user. The IDE updates with the output query displayed below, which can be executed to insert the sample users into the table."

Amazon SageMaker Studio と Jupyter Lab の CodeWhisperer

CodeWhisperer は SageMaker Studio や Jupyter Lab と連携して、コードセル内の Python のコード補完機能を提供します。CodeWhisperer を利用するには、Amazon SageMaker StudioJupyter Lab のセットアップ手順に従ってアクティベートしてください。コーディングを始めるには、User actions を参照してください。
下の図は、SageMaker Studio で CodeWhisperer が推奨するコードを示しています。データセットを読み込んで分析するためのコメントに基づいた推奨コードを示しています。

"Image is a gif of an illustration showcasing CodeWhisperer's code recommendations in SageMaker Studio. The illustration shows a code editor window with a section of code highlighted. The code pertains to loading and analyzing a dataset. CodeWhisperer is seen providing code recommendations based on comments within the code. The recommendations appear in the form of a pop-up, with suggested changes displayed."

おわりに

このブログでは、開発者がCodeWhispererを活用して生産性を高め、ワークフローを合理化し、安全なコードを確実に開発するためのさまざまな方法を紹介しました。Code Whisperer の AI 搭載機能を採用することで、開発者は生産性の向上、学習の促進、大幅な時間節約を実現できます。

CodeWhisperer を活用してコーディングプロセスを最適化するための次のステップは次のとおりです。

1. CodeWhisperer のメリットについて詳しくは、特集ページをご覧ください。

2. サインアップして CodeWhisperer を開始してください

3. CodeWhisperer のサクセスストーリーについて読んでください

著者について

Headshot of a person in a black background with natural experssion

Vamsi Cherukuri

Vamsi Cherukuri は、アマゾンウェブサービス (AWS) のシニアテクニカルアカウントマネージャーであり、分析、アプリケーションモダナイゼーション、データプラットフォームにおける 15 年以上の開発者経験を活かしています。テクノロジーに情熱を注ぐ Vamsi は、お客様がクラウド変革の取り組みを通じてビジネス成果を加速できるよう支援することに喜びを感じています。余暇には、ランニングやサイクリングに安らぎを見出し、マラソンというスリリングな世界に頻繁に没頭しています。

Headshot of a person in a black background with a smile wearing a navy blue tshirt with stripes

Dhaval Shah

Dhaval Shah は AWS のシニアソリューションアーキテクトで、機械学習を専門としています。デジタルネイティブビジネスに重点を置き、お客様が AWS を活用してビジネスの成長を促進できるよう支援しています。ML 愛好家の Dhaval は、前向きな変化をもたらすインパクトのあるソリューションを作成したいという情熱に駆り立てられています。余暇には、旅行への愛にふけり、家族との充実したひとときを大切にしています。

Headshot of a person in a black background with a grey shirt and spectables with natural experssion

Nikhil Sharma

Nikhil Sharma はアマゾンウェブサービス (AWS) のソリューションアーキテクチャリーダーであり、彼と彼のソリューションアーキテクトチームは、AWS のクラウドテクノロジーとサービスを使用して AWS のお客様がビジネス上の重要な課題を解決できるよう支援しています。

この記事は Optimize software development with Amazon CodeWhisperer (記事公開日: 2023 年 5 月 30 日) の翻訳記事です。翻訳はソリューションアーキテクトの江口が担当しました。