Amazon CodeGuruを使い倒してユースケースを考えてみた

こんにちは!エンジニアの君島です。

先日AWS BugBustの記事を書きました。

最初のイベント作成後1か月間Amazon CodeGuruの料金が無料ということで、この機会に使い倒してみました。

CodeGuruにはProfilerとReviewerという2つの機能がありますが、主にAmazon CodeGuru Reviewerという静的なコード解析のサービスを利用しました。

 

Amazon CodeGuru Reviewer

概要

CodeGuru Reviewer は機械学習および自動推論を使用して、アプリケーション開発中に重大な問題、セキュリティの脆弱性、見つけにくいバグを特定し、推奨事項を提供することで、コードの品質を向上します。

料金

利用コストは意識する必要があります。もちろん通常利用は無料ではありません。

 

オンボーディングリポジトリの最初の 10 万行のコード 10.00USD
オンボーディングされたリポジトリの追加の 10 万行のコード (最も近い 10 万に丸められます) 30.00USD (10 万行のコードあたり)
リポジトリごとに 2 回を超えるフルリポジトリスキャン 10.00USD (10 万行のコードあたり)

ということですが、具体的にいくらかかるのか、調べてみました。

無償期間に使用した量を例に見てみましょう。

 

 

  • 75 repositories x 1,240,000 lines of code = 93,000,000 lines of code across all repositories
  • 93,000,000 lines of code / 100000 lines of code = 930 repository size pricing tier
  • RoundUp (930) = 930 repository size pricing tier (rounded)
  • Tiered price for: 930 repository size pricing tier
  • 1 repository size pricing tier x 10.0000000000 USD = 10.00 USD
  • 929 repository size pricing tier x 30.0000000000 USD = 27870.00 USD
  • Total tier cost: 10.00 USD + 27870.00 USD = 27880.00 USD
  • CodeGuru Reviewer cost (monthly): 27,880.00 USD

 

…普通に有償で使ったら怒られるであろうくらいは使っていましたね。

 

料金が発生し続ける?

分析開始のトリガーは

  • リポジトリの関連付け
  • プルリクエストの作成

となっています。

つまり、新たなリポジトリを関連付けるか、関連付けたリポジトリで継続的に開発し続けていれば、費用が発生することになります。

CodeGuruにもBugBustにも無料期間も設けられていますが、不安がある場合にはリポジトリの関連付けを外しておきましょう。

 

大規模なリポジトリを分析したらどうなる?

例えばOpenJDKのJavaリポジトリで試してみたところ、リポジトリの紐づけはできるものの、フルリポジトリスキャンに失敗しました。

分析開始から十分以上待ったところで、×が表示されてしまいました。

その時のリポジトリの容量は、Javaファイルだけに限定して300MB程度、行の総数は9,094,856行でした。

なかなかこれだけの規模のリポジトリを一度に分析することはないと思いますが、ご参考までに。

 

思いついたユースケース

開発初期~中期にかけてのソースコード解析

ある程度の設計に基づいた実装が進んできたところで、フルリポジトリスキャンをかけてみましょう。

色々な指摘をされたとしても、開発の初期~中期であれば、まだ修正や方針転換が可能だと思います。

これが開発の後半になるとかなり辛くなってくるはずです。併せて、その修正による影響も考慮しなくてはなりません。

そうならないために、開発の序盤でソースコード解析をするのが良いと感じました。

 

コードレビューの効率化

チームで開発する場合には、コードレビューを何らかの形で実施されていると思います。

ですが、なかなか時間が時間が取れなかったり、指摘箇所を探すのに苦労することがあります。

CodeGuru Reviewerでは循環的複雑度(Cyclomatic Complexity)や参照回数が多いクラス等の定量的な指標を用いた指摘までしてくれます。

一般的にこうした値が大きいクラスや関数にはバグが潜んでいる可能性が高いです。

指摘された箇所だけではなく、その周辺も目視で確認することをおすすめします。

 

ベストプラクティスなコードを書くためのトレーニング

個人開発の観点でも、CodeGuruは有用です。

単に指摘をするだけではなく、修正方法や解説も提示してくれます。

OWASP Top 10の脆弱性であったり、各言語のベストプラクティスについても指摘をしてくれます。

開発者自身がそれらを理解して正しく修正できたかどうかは、再度プルリクエストを作成すればCodeGuruがチェックしてくれます。

これを根気強く繰り返すことで、コーディングスキルが向上することでしょう。

 

まとめ

Amazon CodeGuru Reviewerを使い倒して、どのような場合に有効かを検討しました。

チームで行う開発から個人開発まで役に立つサービスと言えるでしょう。

ただ、Amazon CodeGuru Reviewerのみに頼り、コードレビューを無くすのは良くないでしょう。

Amazon CodeGuru Reviewerは、Syntax Errorは検出してくれますが、コンパイラではありませんし、全ての不具合を正しく指摘してくれるとは限りません。

ですが、わずかな時間でコードレビューを実施してくれる素晴らしいサービスだと思います。

明らかに、レビューポイントの発見までの時間短縮にはなるのではないでしょうか。

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 AWS認定は12個持ってます。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ