
・Amazon CodeGuruが発表
・書いたコードを自動でレビューしてくれる
・コード行の中から最も高価なコストがかかっている部分を特定してくれる
はじめに
AWS re:Invent 2019のエントリです。
KeynoteにてAmazon Web Service CEOのAndy Jassyにより新サービス「Amazon CodeGuru」が発表されたのでそちらの内容をまとめています。

Amazon CodeGuruとは

一般的なコーディングサイクルでは、書く→レビュー→ビルド・デプロイ→評価→改善→書く→…というのを繰り返します。
Amazon CodeGuru(以下CodeGuru)とは、AWSが用意したモデルをベースとした機械学習によって、書いたコードを自動でレビューを行ってくれるサービスとなります。
何が嬉しいのか?
- ・自動でレビューしてくれるので人間の手間を削減しつつコードの品質を保てるようになる
- ・AWSのベストプラクティスについて指摘してくれるので自然とよい実装になる
- ・高価なコード行を指摘してくれるので、意図せず高価なリソースの使用を事前に防ぐことができる
Amazon CodeGuruによるレビューの流れ

CodeGuruでは、通常のプルリクエストにCodeGuruを追加することで、自動でコードレビューを行い、人間に理解できる文章でレビュー結果をコメントしてくれるようになります。
具体的にはコード行の特定と、問題の指摘、修正方法の提案、そして関連するドキュメントへのひも付けを行ってくれます。AWSのサービスらしく、AWSのベストプラクティスに反する記述に対してもコメントされるようになっています。

この自動レビューの内容は、Amazonとトップ10000のオープンソースプロジェクトのレビューがベースになっているようです。
高価なコード行の特定とその成果

また、アプリの設定とエージェントをインストールすることで、コードの中でレイテンシやCPU使用率、コストがかかっている(高価な)コード行の特定、フレームグラフ形式によるパフォーマンスの可視化を行うことできます。
CodeGuruによってAmazon自身が改善を行っており、Amazonプライムデーを2017年と2018年で比較すると、最も”高価な”コード行ではCPU使用率が325%改善、コストは39%も改善したそうです。
CodeGuruはGitHubおよびAWS CodeCommitと統合されており、プレビュー版が本日より利用可能となっています。
最後に
開発者向けの機械学習を利用したツールであるCodeGuru。
従来の人間の手によるレビューというものは(良し悪しは置いておいて)その人の技術水準や主義というものによって質にばらつきがあったものですが、そこに機械学習による一定水準の軸となるレビューが加わると考えると、非常に優れたサービスになりそうだと思います。
単純に自分の書いたコードに対してどんなレビューをしてくれるのかというのが非常に興味深いです。
