Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

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

CodeQL を使うと、コード内の脆弱性とエラーを特定することができます。 結果は、GitHub 内で code scanning アラートとして表示されます。

Code scanning は、GitHub Enterprise Server の Organization 所有のリポジトリで利用できます。 この機能には、GitHub Advanced Security のライセンスが必要です。 詳細については、「GitHub Advanced Security について」を参照してください。

注: この機能を使うには、サイト管理者が your GitHub Enterprise Server instance の code scanning を有効にする必要があります。 詳細については、「アプライアンスでの code scanning の構成」を参照してください。

code scanning と CodeQL について

CodeQL は、セキュリティ チェックを自動化するために GitHub が開発した、コード分析エンジンです。 CodeQL を使用してコードを分析し、結果を code scanning アラートとして表示することができます。

code scanning に対して CodeQL 分析を使用する方法には、主に 2 通りあります。

GitHub Enterprise Server 3.6 の場合は、CodeQL アクションの既定で CodeQL CLI バージョン 2.9.4 が使われます。 外部 CI システムで分析を実行する場合は、同じバージョンの CodeQL CLI を使うことをお勧めします。

CodeQL について

CodeQL はコードをデータのように扱い、コードの潜在的な脆弱性を従来の静的分析よりも高い精度で見つけることができます。

  1. ご利用のコードベースを表現する CodeQL データベースを生成します。
  2. 次に、そのデータベースに対して CodeQL クエリを実行して、コードベース内の問題を特定します。
  3. CodeQL を code scanning で使用すると、クエリ結果は GitHub Enterprise Server に code scanning アラートとして表示されます。

CodeQL ではコンパイルおよびインタープリタ言語の両方がサポートされていて、サポートされている言語で記述されたコードの脆弱性とエラーを見つけることができます。

  • C/C++
  • C#
  • Go
  • Java
  • JavaScript/TypeScript
  • Python
  • Ruby

:

  • Ruby の CodeQL 分析は、現在ベータ版です。 ベータ版の間、Ruby の分析は他の言語の CodeQL 分析ほど包括的ではありません。
  • JavaScript、TypeScript、またはその両方で記述されたコードを分析するには javascript を使用します。

詳細については、CodeQL Web サイトのドキュメント「サポートされている言語とフレームワーク」を参照してください。

CodeQL クエリについて

GitHub 専門家、セキュリティ研究者、およびコミュニティの貢献者は、code scanning に使用される既定の CodeQL クエリを作成して維持します。 クエリは、分析を改善し、誤検知の結果を減らすために定期的に更新されます。 クエリはオープン ソースであるため、github/codeql リポジトリ内のクエリを表示して投稿できます。 詳細については、CodeQL Web サイトの CodeQL に関するページを参照してください。 自分で独自のクエリを記述することもできます。 詳細については、CodeQL ドキュメントにある CodeQL クエリに関するページを参照してください。

詳細設定または外部 CI システムを使用してコードをスキャンする場合は、分析の一環として追加のクエリを実行できます。 実行したいクエリは、リポジトリ内の QL パックに属していなければなりません。 クエリは、標準ライブラリ (クエリの import LANGUAGE ステートメントによって参照されるライブラリ)、またはクエリと同じ QL パック内のライブラリにのみ依存している必要があります。