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 サポート」をご覧ください。
GitHub Copilot Autofix は、プライベート リポジトリの code scanning分析 (CodeQL 分析を含む)からのアラートの修正を提案します。 Pull request での Copilot Autofix から候補を操作する方法の詳細については、「pull request でのアラートに対する Copilot Autofix 候補の操作」を参照してください。
リポジトリへの書き込み権限がある場合、既存のすべての 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 でのアラートに対する Copilot Autofix 候補の操作
GitHub Copilot Autofix は、code scanning アラート(CodeQLアラートを含む)を修正するために参考になるターゲットを絞った推奨事項を提供する code scanning の拡張機能です。 潜在的な修正は、コードベース、pull request、および code scanning 分析からのデータを使用して、大規模な言語モデル (LLM) によって自動的に生成されます。
Note
GitHub Copilot Autofix の使用には、GitHub Copilot のサブスクリプションは不要です。 Copilot Autofix は、GitHub.com のすべてのパブリック リポジトリと、GitHub Advanced Security のライセンスを持つ GitHub Enterprise Cloud Enterprise のプライベート リポジトリで使用できます。
Copilot Autofix 候補の生成と pull request への公開
リポジトリの Copilot Autofix が有効になっている場合、アラートは通常どおり pull request に表示され、code scanning によって検出されたすべてのアラートからの情報が自動的に LLM に送信され、処理されます。 LLM 分析が完了すると、すべての結果が関連するアラートに対するコメントとして発行されます。 詳しくは、「コード スキャンに対する Copilot Autofix の責任ある使用」をご覧ください。
Note
- Copilot Autofix では、CodeQL クエリのサブセットがサポートされています。 Copilot Autofix の可用性の詳細については、「CodeQL クエリ スイート」からリンクされているクエリ テーブルを参照してください。
- 分析が完了すると、関連するすべての結果が一度に pull request に発行されます。 pull request 内の少なくとも 1 つのアラートに Copilot Autofix 候補がある場合は、LLM がコードに対する潜在的な修正の特定を完了したと想定されます。
- Copilot Autofix でサポートされていないクエリから生成されたアラートでは、クエリがサポートされていないことを示すメモが表示されます。 サポートされているクエリの候補が生成されない場合は、アラートには別のコミットをプッシュしてみるか、サポートに問い合わせるよう促すメモが表示されます。
通常、pull request に変更を提案するときには、pull request で変更された 1 つのファイルに対する変更をコメントに含めます。 次のスクリーンショットは、アラートが表示される index.js
ファイルへの変更を提案する Copilot Autofix コメントを示しています。 潜在的な修正には escape-html
に関する新しい依存関係が必要であるため、元の pull request が package.json
ファイルに変更を加えない場合でも、コメントはこの依存関係をこのファイルに追加することも提案します。
Copilot Autofix 候補の評価とコミット
各 Copilot Autofix 候補は、コードベース内の code scanning アラートに対する潜在的なソリューションを示しています。 提案された変更を評価して、それらがコードベースに適したソリューションであるかどうかを判断し、意図した動作が維持されていることを確認する必要があります。 Copilot Autofix 候補の制限については、「code scanning の Copilot Autofixの責任ある使用」の「候補の制限事項」と「候補の制限の緩和」を参照してください。
-
[編集] をクリックして編集オプションを表示し、希望する方法を選択します。
-
[GitHub CLI で編集する] で、pull request をローカルでチェックアウトし、推奨される修正プログラムを適用する手順に従います。
-
[FILENAME の編集] を選択して、修正候補が適用された GitHub でファイルを直接編集します。
Note
Copilot Workspace for PRs の パブリック プレビュー に参加している場合は、Copilot Autofix 提案の [Open in Workspace] をクリックして、GitHub で直接 Copilot Workspace を開くことができます。 Copilot Workspace for PRs を使うと、pull request のすべての Copilot Autofix 提案とその他のレビューの提案を表示して編集し、CI テストを実行して合格することを確認してから、1 回のコミットで複数の変更を適用することができます。 詳しくは、「Copilot を使って pull request に関する作業を支援する」を参照してください。
-
-
必要に応じて、ローカル リポジトリまたはブランチに修正プログラムを適用する場合は、候補の ドロップダウン メニューを選択します。
- [自動修正パッチの確認] を選択して、推奨される修正プログラムをローカル リポジトリまたはブランチに適用する手順を表示します。
- [修正行 LINE_NUMBERのコピー] を選択して、修正候補の特定の行をコピーします。
-
必要に応じて、提案された修正をテストして変更します。
-
変更のテストが完了したら、変更をコミットして、ブランチにプッシュします。
-
変更をブランチにプッシュすると、pull request に対するすべての通常のテストがトリガーされます。 単体テストに以前と同じくパスすることと、code scanning アラートが修正されたことを確認します。
Copilot Autofix 候補を無視する
Copilot Autofix 候補を却下する場合は、コメントの [修正候補を無視する] をクリックして、提案された修正を無視することができます。
Pull Requestのアラートの却下
アラートをクローズする別の方法として、却下する方法があります。 修正する必要がないと考えられる場合は、アラートを却下できます。 たとえば、テストで使われるだけのコードのエラーや、エラーを修正するための労力がコードを改善することによる潜在的な利点よりも大きい場合です。 リポジトリに書き込み権限を持っているなら、コードのアノテーションとアラートのサマリで [アラートの却下] ボタンが利用できます。 [アラートの却下] をクリックすると、アラートをクローズする理由の選択が求められます。
クエリが将来の分析に含まれ続けるかに影響することがあるので、ドロップダウンメニューから適切な理由を選択することは重要です。 必要に応じて、却下についてコメントを残し、アラートを却下したコンテキストを記録することもできます。 無視のコメントはアラート タイムラインに追加され、監査と報告の間に正当な理由として使用できます。 コード スキャン REST API を使用して、コメントを取得または設定できます。 コメントは、alerts/{alert_number}
エンドポイントの dismissed_comment
に含まれます。 詳しくは、「コード スキャン用の REST API エンドポイント」を参照してください。
たとえばコードがサポートされていないサニタイズ ライブラリを使っているといった理由で、CodeQL のアラートを擬陽性の結果として却下する場合、CodeQL に貢献して分析を改善することを検討してください。 CodeQL の詳細については、「CodeQL に貢献する」を参照してください。
アラートの却下の詳細については、「コード スキャン アラートの解決」を参照してください。