pull request の code scanning 結果について
プルリクエストのチェック用に code scanning が設定されているリポジトリでは、code scanningがプルリクエストのコードをチェックします。 デフォルトでは、このチェックはデフォルトブランチを対象とする pull request に限定されていますが、この設定は GitHub Actions またはサードパーティの CI/CD システム内で変更できます。
pull request で変更されたコード行が code scanning アラートを生成した場合、アラートは pull request の次の場所で報告されます。
- pull request で結果を確認する
- pull request の [会話] タブ (pull request レビューの一部として)
- pull request の [変更されたファイル] タブ
Note
Code scanning では、アラートによって識別されたすべてのコード行が pull request の差分に存在する場合にのみ、pull request のアラートが表示されます。 詳しくは、「Code scanningの SARIF サポート」をご覧ください。
リポジトリへの書き込み権限がある場合、既存のすべての code scanning アラートを [Security] タブで表示できます。リポジトリ アラートの詳細については、「リポジトリのコード スキャンのアラートの評価」を参照してください。
タイム コードがプッシュされるたびにスキャンされるように code scanning が設定されているリポジトリでは、code scanning の結果がすべてのオープンな pull request にマップされ、アラートは他の pull request でチェックされるのと同じ場所にアノテーションとして追加されます。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」をご覧ください。
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 の結果チェックのエラー
code scanning の結果チェックで、重大度が error
、critical
、または high
の問題が検出された場合、チェックは失敗し、チェック結果にエラーが報告されます。 code scanning で検出されたすべての結果の重大度が低い場合、アラートは警告または通知として扱われ、チェックは成功となります。
リポジトリ設定でデフォルトの動作をオーバーライドできます。そのためには、重大度のレベルと、pull request のチェック エラーが発生するセキュリティ重大度を指定します。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」をご覧ください。
その他のcode scanning チェック
設定によっては、code scanning が設定された pull request で実行される追加のチェックが表示される場合があります。 これらは通常、コードを分析する、またはcode scanning の結果をアップロードするワークフローです。 これらのチェックは、分析に問題がある場合のトラブルシューティングに役立ちます。
たとえば、リポジトリが CodeQL 分析ワークフロー を使用している場合、 CodeQL / 分析 (言語) チェックを各言語で実行してから、結果チェックを実行します。 構成に問題がある場合、または分析がコンパイルする言語 (C/C++、C#、Go、Java、Kotlin、および Swift など) で pull request がビルドを中断している場合、分析のチェックは失敗することがあります。
他の pull request と同様に、チェック失敗の詳細内容は [Checks] タブで確認できます。構成とトラブルシューティングの詳細については、「コード スキャン用の高度なセットアップのカスタマイズ」または「code scanning のトラブルシューティング」を参照してください。
pull request でのアラートの表示
pull request に導入された code scanning アラートのうち変更の差分に含まれるものは、[会話] タブで表示できます。Code scanning は、各アラートを、アラートをトリガーしたコード行の注釈として表示する pull request レビューを投稿します。 注釈から直接、アラートにコメントを付け、アラートを無視し、アラートのパスを表示できます。 アラートの詳細を表示するには、[詳細の表示] リンクをクリックします。すると、アラートの詳細ページに移動します。
[変更されたファイル] タブでは、pull request で導入された変更の差分内にあるすべての code scanning アラートを表示することもできます。
pull request に新しいコード スキャン構成を追加すると、pull request にコメントが表示され、リポジトリの [セキュリティ] タブに移動して、pull request ブランチのすべてのアラートを表示できます。 リポジトリのアラートの表示の詳細については、「リポジトリのコード スキャンのアラートの評価」を参照してください。
リポジトリへの書き込み権限がある場合、一部のアノテーションにはアラートの追加的な背景を説明するリンクが含まれています。 上の例では、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のアラートの修正
プルリクエストへのプッシュアクセスがあるユーザなら誰でも、プルリクエストで特定された code scanning アラートを解決できます。 プルリクエストに変更をコミットすると、プルリクエストのチェック実行が新しくトリガーされます。 問題を修正すると、アラートはクローズし、アノテーションは削除されます。
Pull Requestのアラートの却下
アラートをクローズする別の方法として、却下する方法があります。 修正する必要がないと考えられる場合は、アラートを却下できます。 たとえば、テストで使われるだけのコードのエラーや、エラーを修正するための労力がコードを改善することによる潜在的な利点よりも大きい場合です。 リポジトリに書き込み権限を持っているなら、コードのアノテーションとアラートのサマリで [アラートの却下] ボタンが利用できます。 [アラートの却下] をクリックすると、アラートをクローズする理由の選択が求められます。
クエリが将来の分析に含まれ続けるかに影響することがあるので、ドロップダウンメニューから適切な理由を選択することは重要です。 必要に応じて、却下についてコメントを残し、アラートを却下したコンテキストを記録することもできます。 無視のコメントはアラート タイムラインに追加され、監査と報告の間に正当な理由として使用できます。 コード スキャン REST API を使用して、コメントを取得または設定できます。 コメントは、alerts/{alert_number}
エンドポイントの dismissed_comment
に含まれます。 詳しくは、「コード スキャン用の REST API エンドポイント」を参照してください。
たとえばコードがサポートされていないサニタイズ ライブラリを使っているといった理由で、CodeQL のアラートを擬陽性の結果として却下する場合、CodeQL に貢献して分析を改善することを検討してください。 CodeQL の詳細については、「CodeQL に貢献する」を参照してください。
アラートの却下の詳細については、「コード スキャン アラートの解決」を参照してください。