AIが自動的にコードレビューする「Amazon CodeGuru」

Pocket

AWS re:invent 2019の基調講演にて、新サービス「Amazon CodeGuru」が発表されました。

Amazon CodeGuruとは

機械学習で自動的にコードレビューを行うことができる、プログラミングに関わるほぼすべての企業やデベロッパーにとって嬉しいサービスです。Amazonが自社プロダクトのために行ってきた数十万の開発プロジェクトとGitHubの10,000を超えるオープンソースソフトプロジェクトをもとにして開発されました。

AWSのベストプラクティスに則っていない部分やリソースリーク、潜在的な同時実行の競合状態、CPUサイクルの浪費などのコードの問題、脆弱性などの「問題がある(ありそうな)」ソースの場所を教えてくれます。
CodeGuruには、CodeGuru Review」と「CodeGuru Profiler」の2つの機能があります。

「CodeGuru Review」とは

「CodeGuru Review」はベストプラクティスから逸脱している部分やページングの欠落、バッチ操作のエラー処理など、本番に影響がある可能性のある部分を検出する手助けをしてくれます。
公式ウェブサイトには「夜に目を覚ましてしまう様なコードを見つける」とあります (プログラミングをしている人なら経験があると思います)。プルリクエストしてコードレビューを依頼するなどの対策をしても、ちょっとしたミスでサービスに大きな影響があるバグが発生してしまわないかという恐れは常に抱えているものです。コードレビューをいつでも24時間365日利用できるというのは、開発者にとってこの上ないほど心強いサービスです。

「CodeGuru Profiler」とは

「CodeGuru Review」が本番運用に影響があるコードを見つけるサービスであるのに対して、「CodeGuru Profiler」はコスト削減を目的としたサービスです。

CPUを大量に使う処理や再実行などによる過剰なコンピューティングリソースの使用を検出し、AWS上でコスト効率よく稼働するプログラムを作成するサポートをしてくれます。ゲーム会社などアプリケーション開発の経験値が高い企業であればこれを十分に考慮したうえでコーディングするノウハウが蓄積されていますが、そのような知識を持っている技術者がいなくてもコスト削減のためのコードチェックを行うことができます。「コストが下がる」ケースの多くは同時に処理速度も早くなる可能性が十分にあり、多くの開発現場で役立つサービスです。

早速「CodeGuru Review」を使ってみた

CodeCommitで Source > Repositories > Settings > Amazon CodeGuru Reviewer で設定を有効にするだけで利用可能です。

以後、Pull Requestを実行すると自動的に CodeGuru Review も実行され、特に何もなかった場合は Pull requests > Activity に以下のように表示されます。なお、あえてバグを作ってチェックしてみましたがバグ自体のチェックは行われないようです。(IDEでチェックできるので、あえてチェックしていないのかもしれません)

逆に本番に影響ある可能性があるコードについては以下のように表示されます。どのプログラムのどの行でどんな問題があるかを教えてくれます。

「利用料金」は

「CodeGuru Review」は1か月にスキャンされるコード100行あたり0.75ドル
「CodeGuru Profiler」はサンプリング時間あたり0.005ドル/月(ただし、1アプリケーションプロファイルで36,000サンプル時間は無料)
となっています。

例えば、200行のプルリクエストに対して「CodeGuru Review」を利用すれば 20.75ドル=1.5ドルとなります。1つのプロジェクトで1ヶ月10プルリクエストあり、プルリクエストあたり平均300行だとすると、10回3(00行)*0.75=22.5ドルとなります。
プルリクエストとコードレビューに要する時間を考慮すると、この金額は驚異的です。

「CodeGuru Profiler」はプログラムを実行するEC2、ECS、EKS、Fargate上のCPU使用率とレイテンシー特性をサンプリングしてくれます。1インスタンスで利用した場合は1アプリケーション1インスタンス24時間*30日=720サンプル時間となり、3.6ドルとなります。台数及びアプリケーションが増えるとコストも増えますが、過剰な処理が行われている部分を見つけてくれるので、安定稼働するまでは有効するといった利用方法も可能と思われます。

どんな言語が使えるの

2019年12月現在、Javaのみ対応となっています。「より多くの言語をサポートする予定」となっているので、機械学習と相性が良いPythonの対応が楽しみです。