TECHSTEP

ITインフラ関連の記事を公開してます。

Amazon CodeWhispererでCloudFormationコードを生成してみる

今回はAWS製のコード生成ツールであるAmazon CodeWhispererを使ってみました。

docs.aws.amazon.com

背景

Amazon CodeWhispererは機械学習を利用したコード生成を実行するサービスであり、コードを開発しながらリアルタイムにコードをサジェストしてくれます。コード生成サービスは複数ありますが、AWS公式ドキュメントに従えば、CodeWhispererは以下のような特徴を有しています。

  • AWSサービスで使用するために最適化されている: AWS API向けに最適化されたコードを提案し、AWSの各種サービスの効率的な使用を支援します。Amazonのコードをトレーニングに使っていることもあり、関連するクラウドサービスやライブラリを用いた提案、AWSのベストプラクティスを満たすコードの提案などを行います。
  • セキュリティスキャンとコード修復: CodeWhispererにはセキュリティスキャン機能を備えており、脆弱性の発見とそれを修正するコードを提案します。
  • エンタープライズ管理: CodeWhispererは、組織で利用するProfessional版を提供しており、AWS IAM Identity Centerを利用したSSOの提供、リファレンス付きコードの提案などを利用できます。

本記事投稿時点のCodeWhispererの対応する言語・IDEは以下の通りです。なお、言語によって訓練データが異なるため、(生成するコードの精度など?の) サポートの度合いは異なるようです。

検証

今回はVisual Studio CodeにCodeWhispererをインストールし、AWS CloudFormationを例に少しいじってみます。

Visual Studio CodeでCodeWhispererを利用するには、 AWS Toolkit for VSCodeをインストールします。

インストール後はサインインのオプションを選択する画面が表示されます。ここではCodeWhispererを利用するため Amazon Q + CodeWhispererUse for free, no AWS Account required を選択します。

CodeWhispererを無料で使うにはAWS Builder IDを使用します。事前に用意している場合はそれを利用しますが、まだの場合は作成から行います。

ログインしてVSCode画面に戻ると、以下のようにAmazon Qの画面が表示されます。これでCodeWhispererを利用する準備は整いました。

インストール後は以下のように操作します。

  • 手動でCodeWhispererを実行: Alt + c ボタン (Windows) / Option + c ボタン (Mac)
  • 提案をすべて了承する: Tab ボタン
  • 提案を1文字ずつ了承する: Ctrl + ボタン
  • 次の提案を表示する: ボタン
  • 前の提案を表示する: ボタン
  • 提案を否定する: ESC / back space ボタン

例えばUserdataを使用するEC2インスタンスの定義ファイルを生成するようコメントします。ここで改行 (または Alt+C ボタンを押下) すると CodeWhisperer is generating… と表示され、しばらくするとコードの候補が生成されます。コードに問題がなければ Tab または Ctrl + ボタンを押せばコードが書けます。

また、AWS Toolkit for VSCodeをインストールするとCodeWhispererと一緒にAmazon Qも利用できます。例えば表示しているコードの内容を説明するようチャット欄に記入すると、以下のように説明してくれます。

ただし、新しいリソースには対応していない場合もあります。例えば昨年登場したEKS Pod Identityに関するリソースを生成するよう指定しても、想定とは異なるコード (ここで生成されたリソースは実際には存在しません) が生成されました。

なお、CodeWhispererを使ったコードの開発は、AWSブログなどでも紹介されています。

さいごに

今回少しだけ触ってみましたが、コメントの内容に沿ってコードを生成するといっても、そもそも「あるリソースを」「どのような設定で」作成したいかが明確でないと、思ったようなコードを生成するのが難しいと感じました。なので、ある程度AWS CloudFormationを使い慣れており、用意したいリソースや設定も把握している人にとっては、作成するリソースの「大まかな雛形」を作成するには役立つのでは、と思います。ただし、あくまでCloudFormationを作成しただけの感想なので、もしかしたら汎用的なプログラミング言語はもっと違った結果なのかもしれません。例えばTypeScriptでAWS CDKを使ってリソースを定義するのはもっと楽になったりするのかもしれません。

一方で、ある程度書き進めていくと生成されるコードの精度が向上している感覚も得られました。分かりやすい例でいうと、 Parameters で複数の変数を設定後、それを !Ref で参照しようとすると、書きたいものが入力候補として最初に表示される、という体験は何度もありました。また、Resources.XXX.Type まで打った後に必要な Properties を設定するときは、設定しようと思ったパラメータ名が候補として登場する機会も多かったです。こういった体験もあり、「既にあるコードに手を加える」、あるいは「ある一定の量のコードを書き進めた後」の場合、CodeWhispererのいい部分が見えてきたと感じました。

なお、CodeWhispererに限らず生成AIサービスの精度は、時間が経つにつれてさらに改善されるものだと思うので、しばらくは使い続けたいと思います。