Cloud Service
Amazon CodeGuru
機械学習でコードレビューの問題を自動指摘し、本番アプリの性能ボトルネックも検出する開発者向けサービス。
- 1.Reviewer がプルリクエストを自動レビューし、バグやセキュリティ上の問題を指摘する。
- 2.Profiler が本番稼働中のアプリを計測し、CPU やメモリのボトルネックを可視化する。
- 3.レビューと性能分析を機械学習で自動化し、コード品質とコスト最適化を支援する。
解決する課題
コード品質の維持には、人手によるレビューと性能チューニングが欠かせませんが、いずれもレビュアーの経験に依存し、見落としや属人化が起きがちです。また本番環境の性能劣化は、再現が難しく原因特定に時間がかかります。CodeGuru なら:
- プルリクエストの自動レビューで、バグの温床やセキュリティ上の問題を機械的に指摘できる
- 本番で動くアプリを継続的にプロファイリングし、性能のボトルネックを可視化できる
- 指摘や分析結果が改善の根拠とともに提示され、レビューや調査の属人化を減らせる
CodeGuru は大きく Reviewer(コードレビュー) と Profiler(性能分析) の2つの機能で構成されます。
主要概念と用語
- CodeGuru Reviewer: ソースコードを静的に解析し、潜在的なバグ・リソースリーク・並行処理の問題・セキュリティ上の懸念などを指摘する機能
- CodeGuru Profiler: 稼働中のアプリにエージェントを組み込み、実行時のプロファイルを収集して CPU・メモリ消費の多い箇所を特定する機能
- リポジトリ関連付け: Reviewer を使うために、CodeCommit や GitHub などのリポジトリを CodeGuru に関連付ける設定
- コードレビュー: Reviewer が1回の解析で生成する指摘(レコメンデーション)のまとまり
- レコメンデーション: 問題箇所と、その理由・改善の方向性を示す個別の指摘
- プロファイリンググループ: Profiler がプロファイルを集約する単位。同じアプリの複数インスタンスをまとめて分析する
- フレームグラフ: 関数の呼び出し関係と各関数が占める時間の割合を可視化した図
- セキュリティ検出: Reviewer のうち、機密情報のハードコードや脆弱な実装パターンを指摘する分析
仕様・制限・クォータ
- Reviewer は CodeCommit・GitHub・Bitbucket などのリポジトリと関連付けて利用し、プルリクエスト単位または対象ブランチ全体の解析を実行できる
- Reviewer が得意とする言語は Java と Python が中心で、対応言語は時期により拡充される
- Profiler は **エージェント(ライブラリ)**をアプリに組み込んで動作し、Java/JVM 系言語や Python などに対応する
- Profiler のオーバーヘッドは小さく抑えられており、本番環境での常時計測を前提に設計されている
- 指摘や解析の精度・対応範囲は機械学習モデルの更新により変化する
具体的な対応言語・リージョン・上限値は時期によって変わるため、最新の正確な情報は公式ドキュメントで確認してください。
内部の仕組み
Reviewer はリポジトリのコードを取り込み、機械学習モデルとプログラム解析を組み合わせてコードを評価します。プルリクエストに関連付けると、差分を解析し、問題箇所にレコメンデーションをコメントとして残します。
- Reviewer はパターンに基づく解析と学習済みモデルで、リソースリークや例外処理の不備などを検出する
- セキュリティ検出では、機密情報のハードコードや安全でない API 利用などを指摘する
- Profiler はアプリ内のエージェントが一定間隔でスタックをサンプリングし、結果をプロファイリンググループへ送る
- 集約されたプロファイルはフレームグラフとして可視化され、時間を多く消費する関数を特定できる
Profiler は実際の本番トラフィック下で計測してこそ、現実のボトルネックを掴めます。低オーバーヘッドで常時計測する前提なので、テスト環境だけでなく本番のプロファイリンググループを用意しておくと効果的です。
設計パターン / ベストプラクティス
- CI に Reviewer を組み込む: プルリクエストの作成をトリガーに自動レビューを走らせ、マージ前に問題を洗い出す
- 指摘をトリアージする運用: すべての指摘を機械的に従うのではなく、重要度を見て対応するかを判断する
- Profiler を本番に常駐: 代表的なワークロードを継続計測し、性能の変化を経時で追えるようにする
- プロファイリンググループの分離: 環境(本番・ステージング)やサービスごとにグループを分け、混在を避ける
- レビューと性能分析の併用: Reviewer で品質を、Profiler でコスト効率を改善し、両輪で最適化する
運用・監視
- Reviewer の指摘はコンソールやプルリクエストのコメントで確認し、対応状況を追跡する
- Profiler のフレームグラフを定期的に見直し、ボトルネックの推移を把握する
- 性能劣化のリリースがないか、デプロイ前後でプロファイルを比較する
- Reviewer の解析対象ブランチや関連付けを見直し、レビュー漏れを防ぐ
Reviewer の指摘は有用ですが、文脈によっては当てはまらない場合もあります。誤検出(フォールスポジティブ)の可能性を踏まえ、人によるレビューを完全に置き換えるのではなく補助として使ってください。
コスト
Reviewer は解析したコードの規模(行数)に応じた課金、Profiler はプロファイリングするアプリのサンプリング時間に応じた課金が基本です。常時起動のインフラを持つわけではないため、使った分だけの費用感になります。
- Reviewer は大きなリポジトリ全体を頻繁に再解析するとコストが増えやすいので、差分中心の運用が無難
- Profiler のコストは計測対象のインスタンス数や計測時間に比例する
- Profiler でホットスポットを改善し CPU を削減できれば、計算リソースの費用そのものを下げられる
正確な単価は時期・リージョンで変動するため、断定的な金額は公式の料金ページで確認してください。
セキュリティ
- リポジトリの関連付けや結果取得には IAM で権限を制御し、最小権限を徹底する
- Reviewer のセキュリティ検出を活用し、認証情報のハードコードや脆弱なパターンを早期に発見する
- 解析対象のコードや結果には機密が含まれうるため、アクセスできる利用者を限定する
- 指摘で見つかった機密情報は、コードから除去し Secrets Manager などへ移す
Reviewer がハードコードされた認証情報を指摘したのに放置するのは危険です。指摘を契機に値をローテーションし、Secrets Manager 参照へ置き換えてください。
Well-Architected の観点
- パフォーマンス効率: Profiler で本番のボトルネックを定量的に把握し、効果の高い箇所から改善できる
- セキュリティ: Reviewer のセキュリティ検出で、コードに潜む機密漏えいや脆弱パターンを早期に発見できる
- ボトルネック解消による CPU 削減は、コスト最適化にも直結する
試験で問われるポイント
- 機能の役割分担 → Reviewer はコードレビュー、Profiler は本番の性能分析
- いつ使う? → プルリクエストの自動レビューには Reviewer、稼働中アプリのボトルネック特定には Profiler
- セキュリティ → Reviewer は機密情報のハードコードなどを指摘できる
- Profiler の可視化 → フレームグラフで時間を多く消費する関数を特定する
- 得意言語 → Java と Python が中心(時期により拡充)
関連サービス・比較
実行のトレースを追う AWS X-Ray と混同されがちですが、目的が異なります。違いを押さえておきましょう。
| 観点 | CodeGuru Profiler | AWS X-Ray |
|---|---|---|
| 主な目的 | アプリ内部の性能ボトルネック特定 | 分散システムのリクエスト追跡 |
| 分析の単位 | 関数・メソッドのCPUやメモリ消費 | サービス間のトレースと遅延 |
| 可視化 | フレームグラフ | サービスマップとトレース |
| 主な使いどころ | コードのホットスポット改善 | ボトルネックとなる区間の特定 |
ハンズオン / CLI例
# Reviewer: リポジトリの関連付け一覧を取得
aws codeguru-reviewer list-repository-associations
# Reviewer: 指定の関連付けに対するコードレビュー一覧を取得
aws codeguru-reviewer list-code-reviews --type PullRequest \
--query "CodeReviewSummaries[].{Name:Name,State:State}"
# Profiler: プロファイリンググループの一覧を取得
aws codeguruprofiler list-profiling-groups \
--query "profilingGroupNames"
AWS Service
Amazon CodeGuruを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
開発者ツール
比較で見る軸
クラウド: AWS / カテゴリ: 開発者ツール / 難易度: intermediate
導入後に効く点
Profiler が本番稼働中のアプリを計測し、CPU やメモリのボトルネックを可視化する。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 開発者ツール
- 難易度
- intermediate
- 関連資格
- DOP-C02 / DVA-C02
- 設計柱
- performance / security
判断チェックリスト
- 自社の用途が「開発者ツール / performance」に近いか確認する。
- 強みである「Reviewer がプルリクエストを自動レビューし、バグやセキュリティ上の問題を指摘する。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。