ヒント
Datadogはオープンソースプロジェクトをサポートしています。オープンソースプロジェクトについては、DataDogの詳細をご覧ください。
DataDog-Static-Analyzerは、DataDOG静的分析のための静的アナライザーエンジンです。
datadog-static-analyzer --directory /path/to/directory --output report.csv --format csvdocker run -it --rm -v /path/to/directory:/data ghcr.io/datadog/datadog-static-analyzer:latest --directory /data --output /data/report.csv --format csvDockerコンテナの詳細については、こちらのドキュメントを参照してください。
問題が発生した場合は、最初によくある質問を読んでください。問題の解決策が含まれている可能性があります。
static-analysis.datadog.ymlファイルを作成して、リポジトリをスキャンするために使用するルールを選択できます。
まず、ドキュメントに従って、使用するルールセットを使用して、プロジェクトのルートにstatic-analysis.datadog.ymlファイルを作成してください。
すべてのルールは、datadogドキュメントにあります。 static-analysis.datadog.ymlには、datadogドキュメントから利用可能なルールセットのみが含まれている場合があります
YAMLファイルの例
schema-version : v1
rulesets :
- python-code-style
- python-best-practices
- python-inclusive
ignore :
- tests統合を使用して、CI/CDパイプラインで使用できます。
独自のCI/CDパイプラインで使用する場合は、ツールを直接統合できます。詳細については、DataDogドキュメントを参照してください。
Datadog Intellij拡張機能を使用すると、すべてのJetBrains製品から静的アナライザーを直接使用できます。 static-analysis.datadog.ymlファイルを作成し、拡張機能をダウンロードすると、使用を開始できます。 Requestsモジュールを使用してPythonを使用してデータを取得するときにタイムアウトを追加するための提案の例を以下に示します。

DataDog vsコード拡張機能を使用すると、VSコードから静的アナライザーを直接使用できます。 static-analysis.datadog.ymlファイルを作成し、拡張機能をダウンロードすると、使用を開始できます。

DataDog製品に搭載されている場合、必要/必要なルールセットを選択できます。 DataDogを直接使用していない場合は、Languedog Static Analysis製品で利用可能な一般的な使用されているルールセットのリストがあります。
完全なリストは、ドキュメントで入手できます。
ルールセットのリストは、ruleset.mdで入手できます。
リリースページからシステムとアーキテクチャの最新リリースをダウンロードしてください。
シェル経由で静的アナライザーを取得するには:
curl -L -O https://www.github.com/DataDog/datadog-static-analyzer/releases/latest/download/datadog-static-analyzer- < target > .zipLinux用のx86_64バイナリを取得する例:
curl -L -O https://www.github.com/DataDog/datadog-static-analyzer/releases/latest/download/datadog-static-analyzer-x86_64-unknown-linux-gnu.zipdatadog-static-analyzer -i < directory > -o < output-file >ツールが機能するには、アナライザーの構成を定義する<directory>/static-analysis.datadog.ymlファイルが必要です。このファイルは、プロジェクトに使用するルールを示します。
DataDogドキュメントで構成に関する詳細情報を入手できます。
バイナリはそのまま実行できません。次のコマンドを使用して実行するために、バイナリに安全であるとしてフラグを立てる必要があります。
xattr -dr com.apple.quarantine datadog-static-analyzer-fまたは--format :出力ファイルの形式。 -f sarif 、SARIFに準拠したファイルを生成します-rまたは--rules :すべてのルールを含むファイルを提供します(ルールはdatadog-export-rulesetsを使用してファイルに配置できます)-cまたは--cpus :分析に使用されるコアの数(コアごとに1GBのRAM使用量を数えます)-oまたは--output :出力ファイル-pまたは--ignore-path :path(pattern/glob)無視する;複数を受け入れます-xまたは--performance-statistics :アナライザーのパフォーマンス統計を表示する-gまたは--add-git-info :-f sarifを使用すると、git関連情報(shaなど)をsarifレポートに追加します--fail-on-any-violation :特定の重大度に少なくとも1つの違反がある場合、プログラムをゼロ以外の出口コードにするようにします。-wまたは--diff-aware :diff-awareスキャンを有効にする(以下の専用のメモを参照) 次の変数を設定して、分析を構成します。
DD_SITE :ルールの取得に使用されるdatadogサイトパラメーター(ビューリスト)(デフォルト: datadoghq.com ) 静的アナライザーは、リポジトリのルートディレクトリにあるstatic-analysis.datadog.ymlファイルを使用して構成できます。これは、次のエントリを備えたYAMLファイルです。
rulesets :(必須)このリポジトリに使用するすべてのルールセットを備えたリスト(完全なリストについては、datadogドキュメントを参照)。このリストの要素は、ルールセットの構成を含む文字列またはマップでなければなりません(以下で説明します。)ignore :(オプション)無視するパスプレフィックスとグローブパターンのリスト。エントリのいずれかに一致するファイルは分析されません。only :(オプション)分析するパスプレフィックスとグローブパターンのリスト。指定onlyが指定されている場合、そのエントリの1つに一致するファイルのみが分析されます。ignore-gitignore :(オプション)デフォルトでは、 .gitignoreファイルにあるエントリはすべてignoreリストに追加されます。 ignore-gitignoreオプションがtrueの場合、 .gitignoreファイルは読み取られません。max-file-size-kb :(オプション)キロバイトのこのサイズよりも大きいファイルは無視されます。デフォルト値は200 kbです。schema-version :(オプション)この構成ファイルが続くスキーマのバージョン。指定する場合は、 v1でなければなりません。 rulesetsリストのエントリは、有効にするルールセットの名前を含む文字列、またはルールセットの構成を含むマップでなければなりません。このマップには、次のフィールドが含まれています。
ignore :(オプション)このルールセットで無視するパスプレフィックスとグローブパターンのリスト。このルールセットのルールは、 ignoreのエントリのいずれかに一致するファイルについて評価されません。only :(オプション)このルールセットを分析するパスプレフィックスとグローブパターンのリスト。指定onlyがある場合、このルールセットのルールは、エントリの1つと一致するファイルについてのみ評価されます。rules :(オプション)ルール構成のマップ。このマップで指定されていないルールは引き続き評価されますが、デフォルトの構成を使用します。 rulesフィールドのマップは、ルールの名前をキーとして使用し、値は次のフィールドのマップです。
ignore 。このルールは、 ignoreのエントリのいずれかに一致するファイルについては評価されません。only :(オプション)このルールを分析するパスプレフィックスとグローブパターンのリスト。指定onlyが指定されている場合、このルールは、エントリの1つと一致するファイルについてのみ評価されます。severity :(オプション)提供されている場合、この規則によって生成された違反の重大度をオーバーライドします。有効な重大度は、 ERROR 、 WARNING 、 NOTICE NONEです。category :(オプション)提供されている場合は、このルールのカテゴリをオーバーライドします。有効なカテゴリは、 BEST_PRACTICES 、 CODE_STYLE 、 ERROR_PRONE 、 PERFORMANCE 、 SECURITYです。arguments :(オプション)ルールの引数の値のマップ。 argumentsフィールドのマップは、引数の名前を鍵として使用し、値は文字列またはマップのいずれかです。
構成ファイルの注釈付き例:
# This is a "v1" configuration file.
schema-version : v1
# The list of rulesets to enable for this repository.
rulesets :
# Enable the `python-inclusive` ruleset with the default configuration.
- python-inclusive
# Enable the `python-best-practices` ruleset with a custom configuration.
- python-best-practices :
# Do not apply any of the rules in this ruleset to files that match `src/**/*.generated.py`.
ignore :
- src/**/*.generated.py
rules :
# Special configuration for the `python-best-practices/no-generic-exception` rule.
no-generic-exception :
# Treat violations of this rule as errors (normally "notice").
severity : ERROR
# Classify violations of this rule under the "code style" category.
category : CODE_STYLE
# Only apply this rule to files under the `src/new-code` subtree.
only :
- src/new-code
# Enable the `python-code-style ruleset` with a custom configuration.
- python-code-style :
rules :
max-function-lines :
# Set arguments for the `python-code-style/max-function-lines` rule.
arguments :
# Set the `max-lines` argument to 150 in the whole repository.
max-lines : 150
max-class-lines :
# Set arguments for the `python-code-style/max-class-lines` rule.
arguments :
# Set different values for the `max-lines` argument in different subtrees.
max-lines :
# Set the `max-lines` argument to 100 by default
/ : 100
# Set the `max-lines` argument to 75 under the `src/new-code` subtree.
src/new-code : 75
# Analyze only files in the `src` and `imported` subtrees.
only :
- src
- imported
# Do not analyze any files in the `src/tests` subtree.
ignore :
- src/tests
# Do not add the content of the `.gitignore` file to the `ignore` list.
ignore-gitignore : true
# Do not analyze files larger than 100 kB.
max-file-size-kb : 100使用されているすべてのオプションを示す別の例:
schema-version : v1
rulesets :
- python-best-practices
- python-code-style :
ignore :
- src/generated
- src/**/*_test.py
only :
- src
- imported/**/new/**
rules :
max-function-lines :
severity : WARNING
category : PERFORMANCE
ignore :
- src/new-code
- src/new/*.gen.py
only :
- src/new
- src/**/new-code/**
arguments :
max-lines : 150
min-lines :
/ : 10
src/new-code : 0
ignore :
- dist
- lib/**/*.py
only :
- src
- imported/**/*.py
ignore-gitignore : true
max-file-size-kb : 256 schemaサブディレクトリには、 static-analysis.datadog.ymlのJSONスキーマ定義があります。
これを使用して、構成ファイルの構文を確認できます。
npm install -g pajv )をインストールするpajv validate -s schema/schema.json -d path/to/your/static-analysis.datadog.ymlを実行しますそれぞれschema/examples/validおよびschema/examples/invalidサブディレクトリに有効および無効な構成ファイルの例がいくつかあります。 JSONスキーマに変更を加えた場合は、例に対してテストできます。
npm install -g pajv )をインストールするmake -C schemaを実行しますDiff-Awareスキャンは、最近変更されたファイルのみをスキャンするStatic-Analyzerの機能です。 DIF-AWAREスキャンは、以前の結果を使用し、変更されたファイルから違反のみを追加します。
Diff-Awareスキャンを使用するには、DataDogの顧客である必要があります。
Dif-Awareスキャンを使用するには:
DD_SITE環境変数をセットアップDD_APP_KEYおよびDD_API_KEY環境変数を設定します--diff-awareで実行しますdiff-awareを使用する場合、静的アナライザーはdatadogに接続し、以前の分析を使用しようとします。問題が発生し、Diff-Awareを使用できない場合、アナライザーは以下のようなエラーを出力し、完全なスキャンを続行します。
オプションを使用して、必要に応じて--debug trueシューティングにトラブルシューティングを行うことができます。
$ datadog-static-analyzer --directory /path/to/code --output output.sarif --format sarif --diff-aware
...
diff aware not enabled (error when receiving diff-aware data from Datadog with config hash 16163d87d4a1922ab89ec891159446d1ce0fb47f9c1469448bb331b72d19f55c, sha 5509900dc490cedbe2bb64afaf43478e24ad144b), proceeding with full scan.
...APIからファイルにルールセットをエクスポートします
cargo run --bin datadog-export-rulesets -- -r < ruleset > -o < file-to-export > テストとコーディングのガイドラインに関するすべての詳細については、詳細とDevelopment.mdについては、ファイルConvributing.mdを参照してください。