はじめに
この記事では AWSのコードレビューサービスであるAWS CodeGuruについて解説した記事です。
記事の途中ではハンズオンがあります。
想定している読者としてはAWSのアカウントを既に持っており、Codeシリーズに興味がある人
を対象にしています。
注意事項
-
AWS初学者向けかと問われると若干怪しいところがあります
- AWSのアソシエイトレベルはクリアできる/クリアできる見込みのある人であれば、概ねできるように書いています
- 上記に該当する人で難しいと感じてしまったのであれば、ごめんなさい
- AWSのアソシエイトレベルはクリアできる/クリアできる見込みのある人であれば、概ねできるように書いています
-
記事の内容につきましてはある程度が時間が経過しても読めるように努力します
-
できる限り
というベストエフォートな対応になりますのでご了承下さい - 最新の情報はAWSの公式ドキュメントを見ていただくようにお願いできればと思います
-
-
本記事のハンズオンで発生した料金については一切責任を負いません
- 利用しないサービスについては作成後に必ず削除することをお勧めします。
Amazon CodeGuru とは
まず最初に Amazon CodeGuru Reviewerの機能を提供しているAmazon CodeGuruについて見ていきましょう。
Amazon CodeGuruについてはAWSのドキュメントに以下のように説明があります。
ML を活用した推奨事項を使用して、コードレビューを自動化し、アプリケーションのパフォーマンスを最適化
簡単に言うと人間の代わりに機械学習でソースコードを改善しようというサービスです。
Amazon CodeGuru には2つの機能があります。
- CodeGuru Reviewer
- 機械学習を利用したコードレビューのサービス
- CodeGuru Profiler
- アプリケーションのパフォーマンスを分析するサービス
各機能について見ていきましょう。
CodeGuru Reviewerとは
端的に言えば、ML(機械学習)を利用したコードレビューのサービスです。
AWSのドキュメントに以下のように説明があります。
機械学習および自動推論を使用して、アプリケーション開発中に重大な問題、セキュリティの脆弱性、見つけにくいバグを特定し、推奨事項を提供することで、コードの品質を向上します。
アプリケーションの問題やアプリケーションの脆弱性、バグを見つける作業をMLによる自動推論で解決するというものです。
分析の対象はAWSに連携されたリポジトリサービスであり、CodeCommitやGitHubのリポジトリを連携することによって利用できます。
ただし、人によるレビューと同じく、レビューを開始するにはプルリクエストを発行する必要があります。
CodeGuru Reviewerの料金体系
スキャンされた行数に応じて料金が発生します。スキャンにはフルリポジトリスキャンと増分スキャンの2つがあります。
お試しの利用で最初の90日間は無料です。以降はリポジトリサイズ(コードの行数)で決まります。
2023年05月03日現在では10万行で10USD(東京リージョン)であり、以降に追加されたコードに対しては10万行単位で料金が発生します。
また、リポジトリごとに 2 回を超えるフルリポジトリスキャンについては10万行単位で料金が発生します。
CodeGuru Profilerとは
CodeGuru Reviewerがソースコードのレビュアーをしくれるサービスであることに対してCodeGuru Profilerはアプリケーションのパフォーマンスを分析するサービスです。
AWSのドキュメントに以下のように説明があります。
CodeGuru Profiler は、実稼働しているアプリケーションのパフォーマンスを最適化、および最もコストが高いコード行を特定します。アプリケーションのパフォーマンスの最適化を常に模索しており、CPU 使用率を削減し、計算コストを低減し、アプリケーションのパフォーマンスを向上させるための修正方法を推奨します。
つまり、人間の目では測定できないマシンスペックに依存するようなところ(CPU使用率など)を分析してアプリケーションパフォーマンスを測定するサービスです。
補足になりますが、アプリケーションのプロファイリングを実行するサービスとしてAWS X-Ray
というサービスがありますが、AWS X-Ray
はサービス間のレイテンシを測定するなどリクエスト周りの測定を実行するサービスであり、マシンスペックに依存するようなところは分析しません。
CodeGuru Profilerの料金体系
お試しの利用で最初の90日間は無料です。以降はサンプリング時間数に基づいた料金がかかります。
サンプリングはプロファイリンググループという単位で実行します。また、プロファイリングを実行するAWSサービス毎に料金の計算方法が異なります。
- Amazon EC2 インスタンス、Amazon ECS、EKS、AWS Fargate Containers 上のアプリケーションのプロファイリングの場合
プロファイリンググループごとに最初の 36,000 サンプリング時間まで、1 サンプリング時間あたり 0.005 USD/月。プロファイリンググループごとに 1 か月あたり 36,000 サンプリング時間を超える分については、追加料金は発生しません。
- AWS Lambda でのアプリケーションプロファイリング
支払いアカウントごとに、最初の 500 サンプリング時間は無料です。その後、プロファイリンググループごとに最初の 36,000 サンプリング時間まで、1 サンプリング時間あたり 0.005 USD/月。プロファイリンググループごとに 1 か月あたり 36,000 サンプリング時間を超える分については、追加料金は発生しません。
概ね組織のプロダクション環境で利用する場合は注意が必要ですが、個人で少しだけ触ってみる分には無料枠の範囲で対応できます。
実際に CodeGuru Reviewerを使ってみよう
CodeCommitでリポジトリを作成する
ブランチを切る
CodeGuru Reviewerはプルリクエストを起点に動作する為、ブランチを切ります。
ブランチ名はtest
とします。
cd ~/Desktop/cicd_handson
git checkout -b test
git push -u origin test
Codeを追加
新しくファイルを作成します。今回はapp.py
というファイルを作成して以下のコードを追記します。
# クソコードを書く
if __name__ == '__main__':
for cnt in range(1, 9):
print(f"test{cnt}")
CodeをPush
変更をコミット後、testブランチをpushします。
git add .
git commit -m "app.pyを追加"
git push -u
利用開始
AWSマネジメントコンソールからCodeGuruの画面に移動します。
プルダウンメニューをクリックします。
プルダウンメニューからCodeGuru Reviewer
を選択します。
ご利用開始にあたって
をクリックします。
リポジトリを関連付ける
AWS CodeCommit
を選択、リポジトリをcicd_handson
に指定します。暗号化設定はカスタマイズしません。
分析するブランチを指定します。今回は事前に切っておいたtestブランチを指定します。
最後にKeyとValueを設定してリポジトリを関連づけて実行
をクリックします。
時間がかかりますが、しばらくすると指定のブランチの解析が終わり、ステータスがpending
からCompleted
に変わります。
初めてリポジトリの関連付けを実行した場合はフルリポジトリ分析
が実行されます。
プルリクエストをイベントソースにしてCodeGuru Reviewerを動かす
CodeGuru Reviewer
はプルリクエストをイベントソースとして実行することができます。
実際に試してみましょう。まずは新規にブランチを切ります。
git checkout -b pull_request
pushするソースコードを修正します。
# コードを修正する
if __name__ == '__main__':
for cnt in range(1, 10):
print(f"test{cnt}")
変更をブランチに追加してブランチをリモートに追加します。
git add .
git commit -m "forを書き換え"
git push -u origin pull_request
CodeCommitでプルリクエストを作成
CodeCommitのリポジトリ画面からプルリクエストを作成します。
まずは対象のリポジトリをクリックします。
ターゲットをtest
、ソースをpull_request
に変更します。
比較をクリックします。Mergeble と表示されたらマージができます。
タイトルと説明を入れます。
タイトルはpull_request
、説明はCodeGuruのテストです。
と入力します。
成功
と表示されれば、問題なくプルリクエストが作成できています。
CodeGuru の画面に戻る
CodeGuru の画面に戻って増分コードレビューが動いているか確認してみましょう。
プルリクエスト作成直後はpending
という状態になっています。
しばらくするとCompleted
に変わります。
まとめ
- CodeGuruには2つの機能がある
- CodeGuru Reviewer
- CodeGuru Profiler
- 今回はCodeGuru Reviewerをハンズオン
- 初めてのリポジトリ連携ではフルリポジトリ分析が実行される
- プルリクエストによる分析は増分コードレビューが実行される
おまけ
いろんな調査をしていく中でCodeGuru Reviewer
がやってくれないことがいくつか明らかになりました。
また、今回は指摘事項がなかったのでしっかりレビューをしてくれたのか分かりにくいところもあり、「コードレビューさせていたつもりがレビューできていませんでした」というインシデントが起きそうです。間違いだけでなくグッドな部分についても評価してくれたら褒めて伸びるタイプの人は嬉しいかもしれません。
今後のアップデートに期待したいです。