コード スキャンとは?

完了

コード スキャンでは、CodeQL を使用して GitHub リポジトリ内のコードを分析し、セキュリティの脆弱性とコーディング エラーを見つけます。 コード スキャンは、すべてのパブリック リポジトリで使用できます。また、GitHub Advanced Security が有効になっている組織が所有するプライベート リポジトリでも使用できます。 コード スキャンによってコード内に潜在的な脆弱性またはエラーが見つかった場合、GitHub でリポジトリの [セキュリティ] タブにアラートが表示されます。アラートをトリガーしたコードを修正すると、GitHub でアラートが閉じられます。

コード スキャンを使用して、コード内の既存の問題の検出、トリアージ、修正の優先度付けができます。 コード スキャンを使用すると、開発者による新たな問題の混入を防止することもできます。 特定の日時でスキャンのスケジュールを設定することも、プッシュなどの特定のイベントがリポジトリで発生したときにスキャンをトリガーすることもできます。

このユニットでは、CodeQL、コード スキャンを設定するための 3 つのオプション、リポジトリへの CodeQL ワークフローの追加方法について学習します。

CodeQL によるコード スキャンについて

CodeQL は、セキュリティ チェックを自動化するために GitHub によって開発されたコード分析エンジンです。 CodeQL を使用してコードを分析し、結果をコード スキャン アラートとして表示できます。 CodeQL 分析をコード スキャン用に設定する場合、主に 3 つの方法があります。

  • 既定のセットアップを使用して、リポジトリでのコード スキャン用に CodeQL 分析をすばやく構成します。 既定のセットアップでは、分析する言語、実行するクエリ スイート、言語とクエリ スイートを手動で構成するオプションを使用してスキャンをトリガーするイベントの選択が処理されます。 このセットアップ オプションは、GitHub アクションとしてコード スキャンを実行します。
  • 高度なセットアップを使用して、CodeQL ワークフローをリポジトリに直接追加します。 CodeQL ワークフローをリポジトリに直接追加すると、カスタマイズ可能なワークフロー ファイルが生成されます。このファイルでは、github/codeql-action を使用して CodeQL CLI を GitHub アクションとして実行します。
  • CodeQL CLI を外部 CI システムで直接実行し、結果を GitHub にアップロードします。

CodeQL ではコードをデータのように扱うため、従来の静的なアナライザーより高い信頼性をもって、コード内の潜在的な脆弱性を見つけることができます。 コードベースを表す CodeQL データベースを生成し、そのデータベースに対して CodeQL クエリを実行して、コードベース内の問題を特定します。 コード スキャンで CodeQL を使用する場合、クエリ結果が GitHub にコード スキャン アラートとして表示されます。

CodeQL では、コンパイルされた言語と解釈された言語の両方がサポートされており、次のサポートされている言語で記述されたコードで脆弱性やエラーが見つかる可能性があります。

  • C または C++
  • C#
  • Go
  • Java/Kotlin
  • JavaScript/TypeScript
  • Python
  • Ruby
  • Swift

次のセクションでは、CodeQL ワークフローをリポジトリに追加する方法について説明します。 外部ツールを使用して CodeQL を設定する方法については、「サードパーティ製ツールを使用してコード スキャンを有効にする」ユニットで説明します。

既定のセットアップを使用してリポジトリで CodeQL を有効にする

リポジトリに対する書き込みアクセス許可がある場合は、そのリポジトリのコード スキャンを設定または構成できます。

CodeQL GitHub Actions ワークフローを使用してコード スキャンを設定するには、次の手順に従います。

  1. GitHub.com で、リポジトリのメイン ページに移動します。

  2. リポジトリ名の下にある、[セキュリティ] を選択します。

    [セキュリティ] タブのスクリーンショット。

  3. [Set up code scanning](コード スキャンの設定) をクリックします。 このオプションを使用できない場合は、組織の所有者またはリポジトリの管理者に GitHub Advanced Security を有効にするよう依頼してください。

    [set up code scanning](コード スキャンの設定) ボタンのスクリーンショット。

  4. [設定] ドロップダウンで、[既定] を選択します。

  5. 既定のオプションを確認します。 必要に応じて、新しいウィンドウの左下隅にある [編集] ボタンを選択して、CodeQL の実行方法をカスタマイズします。

    on:pull_requeston:push トリガーはコード スキャンのトリガーであり、それぞれ異なる目的に役立ちます。 これらのトリガーの詳細については、「コードスキャンを構成する」ユニットを参照してください。

  6. コード スキャンを有効にする準備ができたら、[CodeQL を有効にする] を選択します。

    CodeQL の既定の分析ワークフローのコード スキャンは、保護されたブランチに変更をプッシュするか、既定のブランチに pull request 要求を発行するたびに、コードを分析するように構成されています。 プッシュが行われると、コード スキャンが自動的に実行されます。

前のセクションでは、既定のセットアップを使用してコード スキャンを有効にしました。これにより、ワークフロー ファイルをメンテナンスする必要なく、コード スキャンが GitHub アクションとして実行されます。 もう 1 つのオプションは 高度なセットアップです。これにより、高度な構成や追加の手順のために編集できる既定のワークフロー ファイルが生成されます。 後のユニットで、コード スキャンを構成するための高度なセットアップの使用について説明します。

GitHub Actions でコード スキャンを実行すると、毎月の請求時間 (分) に影響します。 アカウントに含まれるストレージまたは時間 (分) を超えて GitHub Actions を使用すると、追加の使用量に対して課金されます。

Actions の課金について

コード スキャンでは GitHub Actions が使用され、コード スキャン ワークフローの実行ごとに GitHub Actions の時間 (分) が消費されます。 GitHub Actions の使用は、パブリック リポジトリとセルフホステッド ランナーではいずれも無料です。 プライベート リポジトリの場合、各 GitHub アカウントは、アカウントで使用している製品に応じて、一定の無料の時間 (分) とストレージを受け取ります。 使用制限は、含まれる金額を超える使用量を制御します。 毎月請求される顧客の場合、アカウントの既定の使用制限は 0 米ドル (USD) です。これにより、アカウントに含まれる金額を超えてプライベート リポジトリの分またはストレージを余分に使用できなくなります。 アカウントを請求書で支払っている場合、そのアカウントの既定の使用制限は無制限となります。 時間 (分) は毎月リセットされますが、ストレージはリセットされません。