AWS CodeGuru の探索: 新しい自動コードレビューにはスマートな機能が搭載されているが、Java のみ

Table of Contents

AWS CodeGuru の探索: 新しい自動コードレビューにはスマートな機能が搭載されているが、Java のみ

分析AWS の自動コードレビューおよびプロファイリングツール CodeGuru は、今月ラスベガスで開催されたベンダーの re:Invent パーティーで発表され、大きな注目を集めました。

開発者は自動コードレビューのアイデアを好んでおり、たとえわずかな時間節約やバグ回避であっても、大きな価値をもたらします。EclipseやVisual Studio Codeといった最新のエディターは、よくあるエラー、自動補完、自動フォーマットといっ​​たコーディング支援機能を既に提供しています。こうした支援機能のないメモ帳でコーディングしてみると、その便利さがすぐに分かるでしょう。

言うまでもなく、CodeGuru は「数十万の社内プロジェクト」と「GitHub 上の 10,000 を超えるオープンソース プロジェクト」に基づいて、機械学習の魔法を約束しています。

また、CodeGuru Profilerもバンドルされていますが、実際には別のツールであり、コストの高いコード行を特定するのに役立ちます。プロファイリング自体は目新しいものではありませんが、修正することで大きな改善につながる非効率性を特定するのに役立ちます。re:Inventでのプレゼンテーションでは、スレッド競合の問題を最適化した結果、アプリケーションの実行に必要なインスタンス数が75%削減された事例や、別のケースでは40%から67%削減された事例が参加者に紹介されました。

CodeGuruはプレビュー版で、簡単に確認してみました。いくつかの制限事項があります。コードレビューとプロファイラーはどちらもJavaアプリケーションでのみ動作します。コードレビューはGitHubまたはAWS CodeCommitリポジトリのみをサポートし、プロファイラーを使用するにはAmazon EC2でホストされているか、ECS(Elastic Container Service)またはFargateでコンテナ化されたアプリケーションが必要です。

CodeGuruのプロセス:その仕組み

CodeGuruプロセス: コードレビューにMLを適用

エル・レグがスピン

Reviewer を使い始めるには、AWS にサインインし、CodeGuru ダッシュボードにアクセスして、GitHub リポジトリを「関連付ける」だけです。リポジトリのオーナーとして GitHub にサインインした際には問題なく動作しましたが、ドキュメントでは GitHub 上に専用の CodeGuru ユーザーを作成することが推奨されています。これは、関連付けに使用したアカウントによってレビューがコメントとして投稿されるため、混乱を招く可能性があるためです。

プロジェクトの共同作業者として別のGitHubユーザーを設定することでこれを試みましたが、リポジトリの関連付けに失敗しました。ビジネスではより一般的なシナリオであるGitHub組織であれば問題なく動作するはずです。しかし、困ったことに、失敗した関連付けを削除できず(「関連付けを解除」も機能せず)、再度追加することもできませんでした。そのため、CodeGuruをテストするために新しいリポジトリを作成する必要がありました。

CodeGuruはコードを分析しているが、推奨事項は見つからないと言っています

CodeGuruはコードを分析しているが、推奨事項は見つからないと言っています

CodeGuruはプルリクエストによって起動します。プルリクエストとは、開発者が自分のコードをリポジトリにマージするよう依頼することです。私たちはシンプルなSpring Boot Javaプロジェクトを使い、プルリクエストを送信し始めました。残念ながら、CodeGuruに推奨事項を提示させることはできませんでした。ドキュメントによると、CodeGuruはAWSのベストプラクティス、同時実行性、リソースリーク、機密情報漏洩、そして一般的なコーディングのベストプラクティスに関する推奨事項を提示します。明らかにバグのあるコードをいくつか試してみました。

MyClass c = 新しい MyClass();
c = ヌル;
c.GetMessage() を返します。

そして、それが気付かれずに通り過ぎたとき、単純な競合状態でしたが、CodeGuru はコードを分析したと言っても、推奨事項はありませんでした。

CodeReviewの仕組み

CodeReviewの仕組み

これはプレビュー版であり、私たちだけではありません。AWSフォーラムで別のユーザーが同じ問題を報告しています。サポートが解決してくれることは間違いありません。こちらのプレゼンテーションで、想定されている動作を確認できます。仮に動作すると仮定した場合、費用はいくらになるのでしょうか? 料金はコード100行あたり0.75ドルで、高額になる可能性があります。Amazonの料金体系の例では、50人の開発者が200行のコードを含むプルリクエストを600件作成すると、月額900ドルになります。しかし、大規模なプルリクエストが数回修正された場合、コード量はこの見積もりを簡単に超える可能性があります。

CodeGuru プロファイラー

CodeGuru プロファイラー

プロファイラーの料金は、サンプリング時間あたり0.005ドルで、月間最大36,000時間まで利用できるため、アプリケーション1つあたり最大180ドルとなります。必要な最適化が見つかればすぐに元が取れるかもしれませんが、アプリケーションがスムーズに動作するようになったら、プロファイラーをオフにした方が良いかもしれません。また、CodeGuruプロファイラーが、より費用対効果の高い他のプロファイラーが見逃すような点を見つけていることを確信したい場合もあるでしょう。AWSは、プロファイラーは最適化が必要なコード行を容易に特定し、「アプリケーションに影響を与えることなく」本番環境で実行できると主張しています。

プロファイラーには3つのコンポーネントがあります。アプリケーションに追加するエージェント、プロファイラーサービス、そしてレコメンデーションエンジンです。結果はインタラクティブな視覚化として表示されます。視覚化には3つの種類があります。概要、最も時間を消費する関数を示す「ホットスポット」視覚化、そして、コードとその関数、そしてその関数が呼び出される関数をグループ化して表示する「検査」視覚化です。

朗報です。AWS CodeGuru には90日間の無料トライアルが提供されています。これは、既存のアプリケーションのプロファイルを作成するだけでなく、CodeGuru Reviewer を実際に試用して、そのコストに見合うだけの価値があるかどうかを確認するのに十分な期間です。ただし、これらのサービスは安価ではありませんので、慎重に評価することをお勧めします。®

Discover More