Skip to main content

Pull RequestでCode scanningアラートをトリアージする

Pull Requestで code scanning が問題を特定した場合、強調表示されたコードを確認してアラートを解決できます。

Who can use this feature

If you have read permission for a repository, you can see annotations on pull requests. With write permission, you can see detailed information and resolve code scanning alerts for that repository.

Code scanning は、GitHub.com のすべてのパブリック リポジトリに使用できます。 Organization によって所有されるプライベート リポジトリで code scanning を使うには、GitHub Advanced Security のライセンスが必要です。 詳細については、「GitHub Advanced Security について」を参照してください。

Pull Requestの code scanning 結果について

プルリクエストのチェック用に code scanning が設定されているリポジトリでは、code scanningがプルリクエストのコードをチェックします。 デフォルトでは、このチェックはデフォルトブランチを対象とするプルリクエストに限定されていますが、この設定は GitHub Actions またはサードパーティの CI/CD システム内で変更できます。 変更をマージすることで、対象となるブランチに新たな code scanning アラートが発生する場合には、そのアラートは複数の場所で報告されます。

  • pull request のチェック結果
  • pull request の [会話] タブ (pull request レビューの一部として)
  • pull request の [変更されたファイル] タブ

リポジトリへの書き込み権限がある場合は、 [セキュリティ] タブに既存の code scanning アラートが表示されます。リポジトリ アラートの詳細については、「リポジトリの code scanning アラートの管理」を参照してください。

タイム コードがプッシュされるたびにスキャンされるように code scanning が設定されているリポジトリでは、code scanning の結果がすべてのオープンな pull request にマップされ、アラートは他の pull request でチェックされるのと同じ場所にアノテーションとして追加されます。 詳細については、「code scanning のカスタマイズ」を参照してください。

pull request が code scanning を使用する保護されたブランチをターゲットとし、リポジトリの所有者が必要なステータス チェックを設定している場合、pull request をマージするには "Code scanning の結果" チェックに合格する必要があります。 詳細については、「保護されたブランチについて」を参照してください。

Pull Requestのチェックとしての code scanning について

code scanning を pull request のチェックとして構成するためのオプションは多数あるので、厳密な構成はそれぞれのリポジトリで異なり、複数のチェックを行う場合もあります。

Code scanning の結果チェック

code scanning のすべての設定で、code scanning の結果を含むチェックが、 Code scanning の結果です。 使用される分析ツールの結果はそれぞれ個別に表示されます。 pull request の変更によって発生した新しいアラートは、すべてアノテーションとして表示されます。

分析されたブランチのアラートの完全なセットを表示するには、 [すべてのブランチ アラートを表示する] をクリックします。 これにより、ブランチのすべてのアラートを種類、重大度、タグなどでフィルター処理できる完全なアラート ビューが開きます。詳細については、「リポジトリの code scanning アラートの管理」を参照してください。

pull request の Code scanning の結果チェック

Code scanning の結果チェックのエラー

code scanning の結果チェックで、重大度が errorcritical、または high の問題が検出された場合、チェックは失敗し、チェック結果にエラーが報告されます。 code scanning で検出されたすべての結果の重大度が低い場合、アラートは警告または通知として扱われ、チェックは成功となります。

プルリクエストの失敗した code scanning チェック

リポジトリ設定で既定の動作をオーバーライドできます。そのためには、重大度のレベルと、pull request のチェック エラーが発生するセキュリティ重大度を指定します。 詳細については、「code scanning のカスタマイズ」を参照してください。

その他のcode scanning チェック

設定によっては、code scanning が設定された pull request で実行される追加のチェックが表示される場合があります。 これらは通常、コードを分析する、またはcode scanning の結果をアップロードするワークフローです。 これらのチェックは、分析に問題がある場合のトラブルシューティングに役立ちます。

たとえば、リポジトリが CodeQL analysis workflow を使用している場合、 CodeQL / 分析 (言語) チェックを各言語で実行してから、結果チェックを実行します。 設定に問題がある場合、解析がコンパイルする必要がある言語 (C/C++、C#、Java など) でプルリクエストがビルドを中断している場合、解析は失敗することがあります。

他の pull request のチェックと同様に、 [チェック] タブでチェック エラーの詳細を確認できます。構成とトラブルシューティングの詳細については、「code scanning のカスタマイズ」または「CodeQL ワークフローのトラブルシューティング」を参照してください。

pull request でのアラートの表示

[会話] タブを表示すると、pull request で発生した code scanning アラートを確認できます。Code scanning は、アラートのトリガーとなったコード行に注釈として各アラートを表示する pull request レビューを提示します。 注釈から直接、アラートにコメントを付け、アラートを無視し、アラートのパスを表示できます。 アラートの詳細を表示するには、[詳細の表示] リンクをクリックします。すると、アラートの詳細ページに移動します。

pull request の [会話] タブでのアラートの注釈

pull request の [変更されたファイル] タブで、すべての code scanning アラートを表示することもできます。 pull request によって加えられた変更の差分に含まれない、ファイルに対する既存の code scanning アラートは、 [変更されたファイル] タブにのみ表示されます。

リポジトリへの書き込み権限がある場合、一部のアノテーションにはアラートの追加的な背景を説明するリンクが含まれています。 上の例では、CodeQL 分析から [ユーザー指定の値] をクリックすると、データ フローに信頼されていないデータが入っている場所 (ソース) が表示されます。 この場合、 [パスの表示] をクリックすることで、ソースからデータ (シンク) を使用するコードまでのフル パスを表示することもできます。 これにより、データが信頼されていないかや、ソースとシンクの間のデータサニタイズのステップを解析が認識できなかったかを簡単に確認できます。 CodeQL を使用したデータ フローの分析については、「データ フロー分析について」を参照してください。

アラートの詳細情報を表示するには、書き込み権限を持つユーザが、アノテーションに表示されている [詳細を表示] のリンクをクリックします。 これにより、ツールが提供するコンテキストとメタデータのすべてをアラートビューで確認できます。 下の例では、問題の重要度、タイプ、および関連する共通脆弱性タイプ一覧 (CWE) を示すタグが表示されています。 また、どのコミットが問題を引き起したかも表示されています。

[アラート] ページのステータスと詳細は、他のブランチにアラートが存在する場合であっても、リポジトリの既定のブランチに対するアラートのステータスを反映するのみです。 既定以外のブランチのアラートの状態は、[アラート] ページの右側にある [影響を受けるブランチ] セクションで確認できます。 既定のブランチにアラートが存在しない場合、アラートの状態は、[in pull request] または [in branch] として、グレー表示されます。

アラートの詳細画面において、CodeQL 分析のような一部のcode scanning ツールでは、問題の説明や、コードを修正する方法を説明するための [詳細を表示] リンクも含まれています。

アラートの説明と詳しい情報へのリンク

pull request のアラートに対するコメント

pull request での変更によって発生した code scanning アラートにコメントを付けることができます。 アラートは、pull request レビューの一環として pull request の [会話] タブに注釈として表示され、 [変更されたファイル] タブにも表示されます。pull request での変更によって発生したアラートに対してのみコメントできます。 pull request で加えられた変更に含まれない、ファイルに対する既存の code scanning アラートは、 [変更されたファイル] タブに表示されますが、コメントすることはできません。

pull request をマージする前に pull request でのすべての会話 (code scanning アラートに関するものを含む) を解決するように要求することを選べます。 詳細については、「保護されたブランチについて」を参照してください。

Pull Requestのアラートの修正

プルリクエストへのプッシュアクセスがあるユーザなら誰でも、プルリクエストで特定された code scanning アラートを解決できます。 プルリクエストに変更をコミットすると、プルリクエストのチェック実行が新しくトリガーされます。 問題を修正すると、アラートは閉じられ、アノテーションは削除されます。

Pull Requestのアラートの却下

アラートを閉じる別の方法として、却下する方法があります。 修正する必要がないと考えられる場合は、アラートを却下できます。 たとえば、テストで使われるだけのコードのエラーや、エラーを修正するための労力がコードを改善することによる潜在的な利点よりも大きい場合です。 リポジトリに書き込み権限を持っているなら、コードのアノテーションとアラートのサマリで [却下] ボタンが利用できます。 [却下] をクリックすると、アラートをクローズする理由の選択が求められます。 Code Scanning アラートのスクリーンショット。無視する理由を選ぶドロップダウンが強調されています クエリが将来の分析に含まれ続けるかに影響することがあるので、ドロップダウンメニューから適切な理由を選択することは重要です。 必要に応じて、無視にコメントを付けて、アラートを無視するコンテキストを記録できます。 無視のコメントはアラート タイムラインに追加され、監査と報告の間に正当な理由として使用できます。 コード スキャン REST API を使用して、コメントを取得または設定できます。 コメントは、alerts/{alert_number} エンドポイントの dismissed_comment に含まれます。 詳細については、コード スキャンに関するページを参照してください。

たとえばコードがサポートされていないサニタイズ ライブラリを使っているといった理由で、CodeQL のアラートを擬陽性の結果として却下する場合、CodeQL に貢献して分析を改善することを検討してください。 CodeQL の詳細については、「CodeQL に貢献する」を参照してください。

アラートの無視に関する詳しい情報については、「リポジトリの code scanning アラートの管理」を参照してください。