CodeWhisperer の基本的な使い方やプロンプトについて学べるワークショップに参加しました(DOP307) #AWSreInvent

2023.11.28

re:Invent 2023 でワークショップ「Hands-on with Amazon CodeWhisperer」に参加しました。

Amazon CodeWhisperer の使い方やユースケースについて学べるワークショップです。これから CodeWhisperer を使っていきたいと思えるような良いワークショプでした。

ワークショップの概要

タイトル

Hands-on with Amazon CodeWhisperer

概要

In this workshop, learn how to build applications faster and more securely with Amazon CodeWhisperer. The workshop begins with several examples highlighting how CodeWhisperer incorporates your comments and existing code to produce results. Then dive into a series of challenges designed to improve your productivity using multiple languages and frameworks. You must bring your laptop to participate.

SPEAKERS

Mohit Gadkari
MJ Kubba

LEVEL

300

学んだこと

これまで CodeWhisperer を利用したことがなかったので、よい機会と思って参加しました。このワークショップに参加することで、次のような基本的な使い方に加えてうまく活用するための方法が学べました。今後も使ってみたいと思うようになりました。

  • CodeWhisperer の基本的な使い方
  • CodeWhisperer をうまく活用するためのプロンプトの重要さ
  • CodeWhisperer にはセキュリティスキャン機能もある


基本的な使い方は、コメントで指示する方法や提案内容を反映する方法などです。

さらに、プロンプトの指示による提案内容の違いも学べます。プロントの重要さを知ることで、提案内容が使えないと思う前にプロンプトが適切だったかを考えることが大事と思いました。同じ入力に対して必ずしも同じ出力をしないことがある点には注意が必要となります。

セキュリティスキャンについては単純に機能としてあることを知らなかったので、新しい発見でした。

ワークショップの内容

最初に 10 分ほど簡単な CodeWhisperer の紹介があった後、ワークショップがすぐに始まりました。

ワークショップは基本的な使い方の他に、次の言語・サービス・機能について CodeWhisperer を使ってみる内容でした。

  • Python
  • Java
  • C#
  • React
  • SQL
  • Shell
  • SageMaker
  • Secuirty Scan

うれしいことに日本語にも対応しており、日本語で質問できる方もいました。

ワークショップの想定時間は 2 時間でしたが、私のスキル的に時間がかかりそうと思ったため、次の内容に絞って実施することにしました。

  • Python
  • Shell
  • Security Scans

Python と Shell スクリプトのワークショップはクイズ形式でした。プログラムと問題が与えられ、 CodeWhisperer で解決するという流れです。ヒントもあります(プロンプト案が掲載されていました)。

Security Scans は CodeWhisperer のセキュリティスキャン機能のワークショップでした。例えば、ハードコードされた資格情報、機密情報の平文送信、SQL インジェクション攻撃に対する脆弱性などの検出を試すことができました。スキャン機能があることは知らなかったので勉強になりました。


基本的な内容も学べました。

例えば、コメントで指示をする方法です。1 行目のコメント(プロンプト)に対して提案された内容が 2 行目以降の内容です。

# Function to upload a file to an S3 bucket
import logging
import boto3
def upload_file(file_name, bucket, object_name=None):
    if object_name is None:
        object_name = file_name

    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True
    # return response

複数のコメントを用いた指示でもできました。


他にもオートコンプリートとして利用する方法もありました。2 行目で改行すると下段のようにデータを提案して、Tab キーで反映します。

fakeUsers = [
    { "name": "Harry Potter", "id": "user1" },
]
fakeUsers = [
    { "name": "Harry Potter", "id": "user1" },
    { "name": "Ron Weasley", "id": "user2" },
]


CodeWhisperer を使うためのプロンプトエンジニアリングについても学べます。

プロンプトの学習では、指示の仕方により出力内容に違いがあることを比較して分かるような流れとなっていました。例えば、二分探索の関数を作成する指示をする場合に、シンプルな文章だけでお願いする場合と、再帰的な方法を条件として指定する場合の提案内容の違いなどです。分かりやすく理解しやすかったです。

さいごに

ワークショップ「Hands-on with Amazon CodeWhisperer」に参加してみました。CodeWhisperer を使い始めるよいきっかけとなるようなワークショプでした。また、これから使っていきたい方にも適していると思います。