Amazon CodeGuruによるコードレビューと性能分析

Amazon CodeGuru ReviewerとProfilerの役割、レビュー方式、実行時プロファイリング、CodeGuru Securityの提供状況と現在の代替機能を学びます。

学習順Step 120 / 121サービスCodePipeline試験ドメインデプロイメント

Amazon CodeGuruによるコードレビューと性能分析

コードの品質とアプリケーションの性能は、別の段階で別の方法により調べます。コードを実行する前には、変更された処理やリポジトリ全体を静的に分析して、欠陥につながる書き方や改善候補を探せます。アプリケーションを稼働させた後は、実際のリクエストを処理するときにどのメソッドがCPUや待ち時間を多く消費するかを観測します。

Amazon CodeGuruは、このうちコードレビューを支援するCodeGuru Reviewerと、実行中アプリケーションを分析するCodeGuru Profilerを提供してきました。両者は同じコード改善に関わりますが、分析するデータと使うタイミングが異なります。Reviewerはソースコードを読み、Profilerはランタイムのサンプルを調べます。

現在の利用可否には注意が必要です。2025年11月7日以降、CodeGuru Reviewerで新しいリポジトリ関連付けを作成できません。既存の関連付けがある利用者はその関連付けを使えますが、新しいプロジェクトでReviewerを導入することはできません。また、CodeGuru Securityは2025年11月20日にサポートが終了しました。これらの変更と、現在も利用できるCodeGuru Profilerを区別して理解しましょう。

CodeGuruの機能と分析対象

機能 主に調べるデータ 分かること 分析するタイミング
CodeGuru Reviewer ソースコードと変更内容 欠陥、改善できる実装、ベストプラクティスから外れた箇所 プルリクエストやリポジトリのコードレビュー時(現在は既存の関連付けが対象)
CodeGuru Profiler 実行時に採取したスタックトレースやプロファイル情報 CPUを使う処理、レイテンシーの要因、ヒープ上のオブジェクトの傾向 アプリケーションの実行中
CodeGuru Security ソースコードのセキュリティ分析 脆弱性やセキュリティ上の問題の候補 過去に提供されていたコードスキャン時(2025年11月にサポート終了)

ReviewerとProfilerは、同じソースリポジトリに関係する場合でも処理の段階が違います。プルリクエストの内容から潜在的な問題を探すならコードレビュー、遅いAPIの処理時間がどのメソッドで費やされるかを探すならプロファイリングが適しています。

CodeGuru Reviewer:変更やリポジトリを静的にレビューする

CodeGuru Reviewerは、機械学習や自動推論を使ってソースコードを分析し、欠陥につながる可能性のある書き方やベストプラクティスに沿わない箇所を提案するコードレビュー機能です。実行時のリクエストやCPU使用状況を計測する機能ではありません。

Reviewerには、分析する範囲が異なるレビュー方式があります。

レビュー方式 分析する範囲 主な使いどころ
増分コードレビュー プルリクエストで変更されたコード 変更をマージする前に、今回追加・変更した処理に問題がないか確認する
リポジトリ全体の分析 指定したブランチのコード全体 既存コードも含め、リポジトリ内にある改善候補を調べる
CI/CDで実行する全体分析 CI/CDワークフローから指定したソースコード パイプラインの中でリポジトリを分析する

たとえば、配送状況を表示するAPIに新しいレスポンス処理を加えるプルリクエストでは、増分レビューがその変更部分を調べ、潜在的なバグや望ましくない実装についてコメントを返します。リポジトリ全体の分析では、今回のプルリクエストに含まれない既存のブランチ内のコードも対象になります。目的が変更箇所の確認なのか、コードベース全体の棚卸しなのかで方式を選びます。

レビュー結果は自動修正ではなく、開発者が判断するための推奨事項です。たとえば、古いAPIの利用箇所とより新しいAPIへの変更案が示されても、互換性やアプリケーションの要件を確認したうえで修正を決めます。推奨事項の内容を確認し、必要に応じてコードへ反映し、チームの通常のピアレビューも続けます。

CodeGuru Reviewerがリポジトリをレビューするには、ソースリポジトリとの関連付けが必要です。対応していたソースプロバイダーにはAWS CodeCommit、GitHub、GitHub Enterprise、Bitbucketが含まれます。関連付けはレビューの起点となる通知設定やソースへのアクセスを構成する役割を持ちます。

ただし、2025年11月7日以降は新しいリポジトリ関連付けを作成できません。現在のReviewerの説明は、すでに関連付けを持つ環境やサービスの仕組みを理解するためのものです。新規導入の選択肢を検討するときは、AWSのCodeGuru Reviewerの提供変更で最新の案内を確認してください。

CodeGuru Profiler:実行中のアプリケーションを分析する

CodeGuru Profilerは、稼働中のアプリケーションにプロファイリングエージェントを設定し、実際の処理から得られるランタイムデータを分析します。遅い処理やCPUボトルネックを探し、効率改善やインフラストラクチャコストの削減に役立つ候補を見つけるための機能です。アプリケーションを本番環境で継続的にプロファイルすることもできます。

Profilerで調べられる主な観点は次のとおりです。

  • CPU使用状況:CPU時間を多く消費しているメソッドや呼び出し経路を探す。
  • レイテンシー:処理が実行中なのか、待機やブロック状態なのかを含め、遅延の原因となる経路を調べる。
  • ヒープ使用状況:ヒープ上でどの種類のオブジェクトがメモリを使っているかを把握する。
  • 異常や改善候補:プロファイルの変化をもとにした異常や、効率を高めるための推奨事項を確認する。

対応言語はJava仮想マシン(JVM)上の言語とPython 3.6以降です。CPUプロファイリング、AWS Lambdaを含むAWS上の計算環境への対応、異常・推奨レポートは両方の言語で利用できます。一方、ヒープ要約の可視化はJVMアプリケーション向けです。Profilerを有効にしたからといって、PythonでもJVMと同じヒープ可視化が使えるわけではありません。

Profilerのエージェントは、スタックトレースやヒープ要約などのプロファイリング情報を送信します。ソースコード全体やメソッドの引数・変数の値を集める仕組みとは異なります。収集データの詳細やセキュリティ上の取り扱いは、CodeGuru Profilerのサービスセキュリティで確認できます。

プロファイリンググループ

プロファイリンググループは、分析データをひとまとまりとして集約するアプリケーション群です。1つのアプリケーションが複数のインスタンスやホストで動く場合、それぞれのエージェントから同じグループに送られたデータを集約して分析できます。関連する複数のアプリケーションを同じ単位で観測する用途にも使えます。

グループを設計するときは、どのアプリケーションの負荷を一緒に分析したいかを考えます。性質の異なるサービスのデータを同じグループへ混在させると、ある処理のプロファイルを見分けにくくなることがあります。対象サービスや実行環境ごとに適切なグループを設定し、分析結果を比較しやすくします。

プロファイルの可視化

Profilerは採取したスタックトレースを集約し、どのメソッドがどの呼び出し経路の中で実行されたかを可視化します。フレームグラフ(flame graph)では、呼び出し階層にあるメソッドがフレームとして表示され、サンプル上で多くの実行時間を占めるメソッドほど横幅が広くなります。横方向は実行中の経過時間を表すタイムラインではありません。

CodeGuru ReviewerのコードレビューとCodeGuru Profilerの実行時分析の流れ

フレームグラフを読むときは、幅の広い箇所からメソッド名と呼び出し元をたどり、処理時間を消費する経路を特定します。たとえば、商品検索APIの応答が遅くなった場合、ProfilerでCPUプロファイルとレイテンシープロファイルを調べます。データ整形処理がCPUを多く使っているのか、外部サービスからの応答待ちが支配的なのかを見分け、最適化する箇所を絞り込みます。単にアプリケーション全体のCPU使用率を見るだけでは分からない、コード内の呼び出し経路を確認できます。

AWSはProfilerを本番環境で使うことを想定し、エージェントのオーバーヘッドを抑えた設計を案内しています。それでも、必要な言語ランタイム、サンプリング対象の処理量、プロファイリンググループ、料金を確認して構成します。Profilerの料金はサンプリング時間などの利用条件に応じて変わるため、利用前にAmazon CodeGuru Profilerの料金を確認してください。

CodeGuru Securityのサポート終了と現在の選択肢

CodeGuru Securityは、プログラム解析や機械学習を使ってソースコード内の脆弱性やセキュリティポリシー上の問題を検出し、修正方法を提案していた静的分析機能です。OWASP Top 10やCWE Top 25に関係する一般的な問題などを検出する用途で紹介されていました。

このサービスは2025年11月20日にサポートが終了し、その日以降、CodeGuru Securityのコンソール、サービスリソース、ドキュメントへアクセスできなくなりました。したがって、現在利用できるCodeGuruの主要機能として扱わないでください。また、CodeGuru SecurityがAmazon Inspectorへそのまま統合されて同一のスキャン機能になったと考えるのも正確ではありません。

現在、要件に応じて次のような選択肢を検討できます。

要件 AWSの選択肢 特徴
IDEやGitHub上でコードレビューを行い、品質・セキュリティ上の問題を調べる Amazon Q Developerのコードレビュー 静的分析、シークレット検出、依存関係の脆弱性検出、コード品質の確認などを提供する
ソースコード、サードパーティ依存関係、Infrastructure as Codeをスキャンする Amazon Inspector Code Security リポジトリを検出し、ソフトウェア脆弱性や意図しないネットワーク露出などを調べる
既存関連付けのコードレビューを継続する CodeGuru Reviewer 2025年11月7日以前に作成されたリポジトリ関連付けがある環境に限って利用する

Amazon Q DeveloperとAmazon Inspector Code Securityは、CodeGuru ReviewerやCodeGuru Securityと完全に同じ機能ではありません。コードレビューの支援を求めるのか、リポジトリの脆弱性スキャンを求めるのか、依存関係やIaCも分析対象に含めたいのかを整理して選びます。現在の機能差はAWSのCodeGuru Reviewer提供変更ガイド、Inspectorの対象範囲はAmazon Inspector Code Securityを確認してください。

CodeGuruとCI/CDサービスの役割分担

CodeGuruはCI/CD環境と組み合わせられますが、パイプライン全体の制御やビルド工程を担うサービスではありません。

サービスやツール 主な役割
CodeGuru Reviewer 関連付け済みソースリポジトリのコードレビューを支援する
CodeGuru Profiler アプリケーションのランタイム性能を分析する
AWS CodePipeline ソース取得、ビルド、承認、デプロイなどのリリース工程を編成する
AWS CodeBuild 指定された環境とビルド手順でビルドやテストを実行する

たとえば、CodePipelineがソース変更を受け取り、CodeBuildでテストを実行し、後続アクションでデプロイする構成を作れます。既存のReviewer関連付けがあるリポジトリでは、プルリクエストに対する増分レビューが開発時の確認に加わります。アプリケーションをデプロイした後はProfilerで実際の実行状況を分析できます。このように、ソース変更のレビュー、ビルドとリリース、稼働後の性能改善を別の機能として組み合わせます。

試験で整理するポイント

  • ソースコードの静的分析ならReviewer、実行中アプリケーションの性能分析ならProfilerを選ぶ。
  • Reviewerの増分コードレビューはプルリクエストの変更箇所を調べ、リポジトリ全体の分析は指定ブランチ全体を対象にする。
  • Reviewerは問題の候補や推奨事項を提示する。結果の採用とコード変更は開発者が判断し、通常のピアレビューも続ける。
  • 2025年11月7日以降、Reviewerで新しいリポジトリ関連付けは作れない。既存の関連付けを持つ利用者のみ、その関連付けを使える。
  • CodeGuru Profilerはエージェントが集めたランタイムデータからCPU、レイテンシー、ヒープ使用状況を分析する。Profilerはすべての言語で同じ可視化機能を提供するわけではなく、ヒープ要約はJVMのみで使える。
  • フレームグラフの横幅はサンプル上で占める実行時間の多さを示す。横軸を時系列の経過時間やプロセス数と読み違えない。
  • CodeGuru Securityは2025年11月20日にサポート終了した。現在のコードレビューや脆弱性スキャンでは、要件に応じてAmazon Q DeveloperやAmazon Inspector Code Securityを検討する。
  • CodePipelineはリリース工程、CodeBuildはビルドとテスト、CodeGuruはコードレビューまたは実行時プロファイリングを担う。

公式ドキュメント

重要ポイント

  • ▸CodeGuru Reviewerはソースコードを静的に確認し、プルリクエストの変更部分を対象にする増分レビューと、ブランチ全体を対象にするリポジトリ分析を提供していた。2025年11月7日以降、新しいリポジトリ関連付けは作成できず、既存の関連付けだけを利用できる
  • ▸Reviewerの指摘はコードの欠陥やベストプラクティスに関する提案であり、開発者が内容を確認して修正する。コードレビューを人によるレビューの代わりにしない
  • ▸CodeGuru Profilerは実行中のアプリケーションからランタイムデータを集め、CPUやレイテンシーのボトルネック、ヒープ使用状況を分析する。JVM系言語とPython 3.6以降をサポートし、ヒープ要約はJVMのみで利用できる
  • ▸Profilerのフレームグラフでは、幅の広いメソッドほどサンプル上で多くの実行時間を占める。横軸を経過時間と誤解せず、呼び出し階層とサンプルの重みから負荷の高い処理を探す
  • ▸CodeGuru Securityは2025年11月20日にサポートが終了した。現在のコードレビューにはAmazon Q Developer、リポジトリの脆弱性スキャンにはAmazon Inspector Code Securityなど、要件に応じて異なる機能を選ぶ
  • ▸Reviewerは開発時の静的なコード分析、Profilerは実行時の性能分析を担う。CodePipelineは工程を編成し、CodeBuildはビルドやテストを実行するため、それぞれ役割が異なる

このトピックの学習を完了しますか?

完了状態はいつでも切り替えられます