Skip to main content

CodeQL CLI のカスタム クエリの作成と共有

独自の CodeQL クエリを記述して、特定の脆弱性とエラーを見つけることができます。

この機能を使用できるユーザーについて

CodeQL は、次の種類のリポジトリで使用できます:

この記事では、解釈された結果を生成するために AUTOTITLE コマンドで使用するクエリを記述する方法について説明します。 カスタム クエリの概念については、 カスタム CodeQL クエリ を参照してください。

有効なクエリの記述

カスタム分析を実行する前に、有効なクエリを記述し、.ql 拡張子付きのファイルに保存する必要があります。 クエリの記述に役立つ広範なドキュメントがあります。 詳しくは、「CodeQL クエリ」を参照してください。

クエリ メタデータを含める

          `database analyze` コマンドを使用してクエリを実行する場合は、結果が確実に正しく解釈されるように、次の 2 つのプロパティを含める必要があります。
  • クエリ識別子 (@id): / または - で区切られた小文字あるいは数字で構成される一連の単語。クエリを識別して分類します。

  • クエリの種類 (@kind): クエリをシンプルなアラート (@kind problem)、一連のコードの場所で文書化されたアラート (@kind path-problem)、抽出のトラブルシューティング (@kind diagnostic)、またはサマリー メトリック (@kind metric@tags summary) として識別します。

これらのメタデータ プロパティについて詳しくは、「CodeQL クエリのメタデータ」と「クエリ メタデータ スタイル ガイド」を参照してください。

カスタム クエリのパッケージ化

他のユーザーと共有するクエリを作成するときは、それらをカスタム CodeQL パック内に保存します。

カスタム クエリをパッケージ化するには:

  1. CodeQL パックを作成し、そのルート ディレクトリ内に qlpack.yml ファイルを配置します。
  2. カスタム クエリ (.ql ファイル) をパック ルートまたはそのサブディレクトリに保存します。
  3. 次を指定するように qlpack.yml ファイルを構成します。
    • クエリをコンパイルする方法
    • 他の CodeQL パッケージとライブラリへの依存関係
    • クエリ スイートの定義 qlpack.yml プロパティの詳細については、「 CodeQL パックを使った分析のカスタマイズ」を参照してください。
  4. 開発中のパックを GitHub Packages へ公開 - GitHub の Container registry 詳しくは、「CodeQL パックを使った分析のカスタマイズ」をご覧ください。

SARIF ファイルにカスタム CodeQL クエリのクエリサポートを含める

クエリのヘルプとドキュメント形式の詳細については、 AUTOTITLE を参照してください。

コード スキャン分析の実行時に SARIF ファイルにクエリ ヘルプを含めるには:

  1. 次のいずれかの形式でクエリ ヘルプを記述します。 * Markdown ファイル: 同じ名前のクエリと共に Markdown ファイルを保存します (たとえば、my-query.mdmy-query.ql)。 * ** .qhelp ファイル**: .qhelp 形式でクエリ ヘルプを記述し、分析を実行する前に Markdown に変換します。 詳しくは、「クエリ ヘルプ ファイル」と「クエリ ヘルプ ファイルのテスト」を参照してください。

  2.        `codeql database analyze` オプションを使用して`--sarif-add-query-help`を実行します。
    
    codeql database analyze <database> --format=sarif-latest --output=results.sarif --sarif-add-query-help
    

    メモ

           `--sarif-add-query-help` オプションは、 CodeQL CLI v2.7.1 以降から使用できます。
    
  3. SARIF ファイルを GitHub にアップロードします。

詳細については、次を参照してください。

  •         [CodeQL クエリ](https://codeql.github.com/docs/writing-codeql-queries/codeql-queries/#codeql-queries)