{"meta":{"title":"エクストラクターのオプション","intro":"CodeQL CLI が、[抽出] オプションを使用して分析用にデータベースを構築する方法を制御します。","product":"セキュリティとコードの品質","breadcrumbs":[{"href":"/ja/code-security","title":"セキュリティとコードの品質"},{"href":"/ja/code-security/reference","title":"リファレンス"},{"href":"/ja/code-security/reference/code-scanning","title":"コード スキャン"},{"href":"/ja/code-security/reference/code-scanning/codeql","title":"CodeQL"},{"href":"/ja/code-security/reference/code-scanning/codeql/codeql-cli","title":"CodeQL コマンドラインインターフェース (CLI)"},{"href":"/ja/code-security/reference/code-scanning/codeql/codeql-cli/extractor-options","title":"エクストラクターのオプション"}],"documentType":"article"},"body":"# エクストラクターのオプション\n\nCodeQL CLI が、[抽出] オプションを使用して分析用にデータベースを構築する方法を制御します。\n\n<!--The CodeQL CLI man pages include a link to this article. If you rename this article,\nmake sure that you also update the MS short link: https://aka.ms/codeql-cli-docs/extractor-options.-->\n\n## 使用可能なエクストラクター オプション\n\n各エクストラクターは、ソース コードからクエリ可能な CodeQL データベースを構築するための独自の構成オプションのセットを定義します。 特定のエクストラクターで使用できるオプションを確認するには、次のいずれかのコマンドを実行します。\n* `codeql resolve languages --format=betterjson`\n* `codeql resolve extractor --language=LANGUAGE --format=betterjson`\n\n              `betterjson` 出力形式は、エクストラクターのルート パスと追加情報を提供します。 \n              `codeql resolve extractor --language=LANGUAGE --format=betterjson` の出力は、多くの場合、次の例のようにフォーマットされます。\n\n```json\n{\n    \"extractor_root\" : \"/home/user/codeql/java\",\n    \"extractor_options\" : {\n        \"option1\" : {\n            \"title\" : \"Java extractor option 1\",\n            \"description\" : \"An example string option for the Java extractor.\",\n            \"type\" : \"string\",\n            \"pattern\" : \"[a-z]+\"\n        },\n        \"group1\" : {\n            \"title\" : \"Java extractor group 1\",\n            \"description\" : \"An example option group for the Java extractor.\",\n            \"type\" : \"object\",\n            \"properties\" : {\n                \"option2\" : {\n                    \"title\" : \"Java extractor option 2\",\n                    \"description\" : \"An example array option for the Java extractor\",\n                    \"type\" : \"array\",\n                    \"pattern\" : \"[1-9][0-9]*\"\n                }\n            }\n        }\n    }\n}\n```\n\nエクストラクターのオプションの名前と説明は、`extractor_options` の下に一覧表示されます。 各オプションには、次のフィールドを含めることができます。\n\n* \n              `title` (必須): オプションのタイトル\n* \n              `description` (必須): オプションの説明\n* \n              `type` (必須): オプションの種類。次の値を指定できます。\n  * \n              `string`: オプションに 1 つの文字列値を指定できることを示します\n  * \n              `array`: オプションに文字列値のシーケンスを指定できることを示します\n  * \n              `object`: オプションそのものではなく、他のオプションやオプション グループを含む可能性があるグループであることを示します\n* \n              `pattern` (省略可能): オプションのすべての値が一致する正規表現パターン。 この正規表現パターンで表現されない、または表現できないオプション値に対して、エクストラクターによって追加の制約が課される場合があることにご注意ください。 このような制約が存在する場合は、[説明] フィールドで説明されます。\n* \n              `properties` (省略可能): オプション グループ内のエクストラクター オプション名から、対応するエクストラクター オプションの説明へのマップ。 このフィールドは、オプション グループにのみ存在することができます。 たとえば、`object` 型のオプションです。\n\n上の例では、エクストラクターによって 2 つのオプションが宣言されています。\n\n* \n              `option1` は、`string` に一致する値を持つ `[a-z]+` オプションである\n* \n              `group1.option2` は、`array` に一致する値を持つ `[1-9][0-9]\\*` オプションである\n\n## エクストラクター オプションを設定するためのコマンド\n\nCodeQL CLI では、エクストラクターを直接または間接的に呼び出すサブコマンドでのエクストラクター オプションの設定がサポートされています。 そのコマンドを次に示します。\n\n* `codeql database create`\n* `codeql database start-tracing`\n* `codeql database trace-command`\n* `codeql database index-files`\n\nこれらのサブコマンドを実行する場合は、`--extractor-option` CLI オプションを使ってエクストラクター オプションを設定できます。 例えば次が挙げられます。\n\n* `codeql database create --extractor-option java.option1=abc ...`\n* `codeql database start-tracing --extractor-option java.group1.option2=102 ...`\n\n              `--extractor-option` には、フォーム `extractor_option_name=extractor_option_value`の引数が 1 つだけ必要です。\n* \n              `extractor_option_name` は、エクストラクターの名前 (この例では `java`) の後にピリオド、さらにエクストラクター オプションの名前 (この例では `option1` または `group1.option2` のいずれか) が続きます。\n* \n              `extractor_option_value` は、エクストラクター オプションに割り当てられている値です。 この値は、エクストラクター オプションの正規表現パターンと一致する必要があり (存在する場合)、改行文字を含めることはできません。\n\n              `--extractor-option` を使用して、存在しないエクストラクター オプションを割り当てるとエラーになります。\n\nCodeQL CLI は、同じ呼び出しで複数の `--extractor-option` オプションを受け付けます。 \n              `string` エクストラクター オプションを複数回設定すると、最後のオプション値により前のすべてのオプションが上書きされます。 配列エクストラクター オプションを複数回設定すると、すべてのオプション値が順番に連結されます。\n\nエクストラクター名なしでエクストラクター オプション名を指定することもできます。 例えば次が挙げられます。\n\n* `codeql database create --extractor-option option1=abc ...`\n* `codeql database start-tracing --extractor-option group1.option2=102 ...`\n\nエクストラクター名を指定しない場合、エクストラクター オプションの設定は、指定された名前でオプションを宣言するすべてのエクストラクターに適用されます。 上記の例では、最初のコマンドにより、`option1` エクストラクターと、`abc` のオプションを持つすべてのエクストラクターに対してエクストラクター オプション `java` を `option1` に設定します。たとえば、`cpp` エクストラクター オプションがそのエクストラクターに対して存在する場合は、`option1` エクストラクターです。\n\n## 抽出オプションのファイル形式\n\nファイルを使ってエクストラクター オプションを設定することもできます。 \n              `--extractor-option` を受け入れる CodeQL CLI サブコマンドは `--extractor-options-file` も受け入れます。これは、YAML ファイルへのパスの必須引数 (拡張子は `.yaml` または `.yml`) または JSON ファイル (拡張子は `.json`) を持ちます。 例えば次が挙げられます。\n\n* `codeql database create --extractor-options-file options.yml ...`\n* `codeql database start-tracing --extractor-options-file options.json ...`\n\n各オプション ファイルには、入れ子になったマップのツリー構造が含まれています。 ルートにはエクストラクター マップ キーがあり、その下にはエクストラクター名に対応するマップ キーがあります。 3 番目のレベルから、エクストラクター オプションとオプション グループがあります。\n\nJSON:\n\n```json\n{\n     \"extractor\" : {\n        \"java\": {\n            \"option1\" : \"abc\",\n            \"group1\" : {\n                \"option2\" : [ 102 ]\n            }\n        }\n    }\n}\n```\n\nYAML:\n\n```yaml\nextractor:\n    java:\n        option1: \"abc\"\n        group1:\n            option2: [ 102 ]\n```\n\nエクストラクター オプションの `string` 値は、文字列または数値である必要があります (これは、さらに処理される前に文字列に変換されます)。\n\nエクストラクター オプションの `array` 値は、文字列または数値の配列である必要があります。\n\nオプション グループ (型 `object` の) の値は、入れ子になったエクストラクター オプションとオプション グループを含むマップである必要があります。\n\n各エクストラクター オプションの値は、エクストラクター オプションの正規表現パターンと一致する必要があり (存在する場合)、改行文字を含めることはできません。\n\n存在しないエクストラクター オプションを割り当てるとエラーになります。 特別な `__allow_unknown_properties` ブール型フィールドを使用して、CodeQL CLI が不明なエクストラクター オプションを無視するようにすることができます。 たとえば、次のオプション ファイルは、CodeQL CLI に対して、`group1` の下の不明なエクストラクター オプションとオプション グループをすべて無視するように求めています。\n\n```yaml\nextractor:\n    java:\n        option1: \"abc\"\n        group1:\n            __allow_unknown_properties: true\n            option2: [ 102 ]\n```\n\n              `--extractor-options-file` は複数回指定できます。 エクストラクター オプションの割り当ては、次の順序で処理されます。\n\n1. \n              `--extractor-options-file` によって指定されたすべてのエクストラクター オプション ファイルは、コマンド ラインに表示される順序で処理されます。次に、\n1. \n              `--extractor-option` によって指定されたすべてのエクストラクター オプションの割り当ては、コマンド ラインに表示される順序で処理されます\n\n割り当てが行われる際に使用されるのが `--extractor-option` か、`--extractor-options-file` か、2 つの組み合わせかに関わらず、同じエクストラクター オプションが複数回設定された場合の動作は、同じルールによって制御されます。 \n              `string` エクストラクター オプションを複数回設定すると、最後のオプション値により前のすべての値が上書きされます。 \n              `array` エクストラクター オプションを複数回設定すると、すべてのオプション値が順番に連結されます。"}