概要

Static Analysis は非公開ベータ版です。サポート言語は Python のみです。アクセスをリクエストするには、サポートにご連絡ください

Static Analysis は、 サイトでは使用できません。

Datadog Static Analysis は、すぐに使えるルールを提供し、コードレビューにおける CI/CD パイプラインの違反を検出し、バグ、セキュリティ、保守性の問題を特定するのに役立ちます。詳細については、Static Analysis ドキュメントを参照してください。

ルール

Python コードを書くためのベストプラクティスに従う

ルールセット ID: python-best-practices

効率的でバグのないコードを書くための Python のベストプラクティス。

クラス名が読めるようにするAMBIGUOUS-CLASS-NAME more more 関数名が読めるようにするAMBIGUOUS-FUNCTION-NAME more more 変数名が読めるようにするAMBIGUOUS-VARIABLE-NAME more more any タイプを使用しないANY-TYPE-DISALLOW more more 同じ名前の引数を持たないARGUMENT-SAME-NAME more more assertraises は特定の例外をチェックしなければならないASSERTRAISES-SPECIFIC-EXCEPTION more more 辞書の重複キーを避けるAVOID-DUPLICATE-KEYS more more 文字列の連結を避けるAVOID-STRING-CONCAT more more クラスメソッドは self を使うべきではないCLASS-METHODS-USE-SELF more more 反復処理中に辞書を変更しないCOLLECTION-WHILE-ITERATING more more todo と fixme コメントは所有権を持たなければならないCOMMENT-FIXME-TODO-OWNERSHIP more more 比較では、変数はそのままにしておかなければならないCOMPARISON-CONSTANT-LEFT more more if 条件が異なるコードブロックでなければならないCONDITION-SIMILAR-BLOCK more more __exit__ と __enter__ の両方が定義されていることを確認するCTX-MANAGER-ENTER-EXIT-DEFINED more more データクラスで特別なメソッドを使用しないDATACLASS-SPECIAL-METHODS more more チェックイコールは一貫した基本型に使用されるEQUAL-BASIC-TYPES more more 例外がベース例外を継承するようにするEXCEPTION-INHERIT more more finally ブロック内で break や continue を使用しないFINALLY-NO-BREAK-CONTINUE-RETURN more more 関数は一度だけ定義しなければならないFUNCTION-ALREADY-EXISTS more more 関数の引数に代入しないFUNCTION-VARIABLE-ARGUMENT-NAME more more ジェネリック例外を使用する場合は、最後にするGENERIC-EXCEPTION-LAST more more getter/setter must have 1 or 2 arguments respectivelyGET-SET-ARGUMENTS more more if 条件が値を返す場合、else は不要であるIF-RETURN-NO-ELSE more more モジュールが 2 度インポートされたIMPORT-MODULES-TWICE more more インポートするモジュールは、1 つのインポートステートメントにつき 1 つだけIMPORT-SINGLE-MODULE more more super() を使って親コンストラクタを呼び出すINIT-CALL-PARENT more more クラスに __init__ メソッドがあることを確認するINIT-METHOD-REQUIRED more more __init__ 関数でリターンしないINIT-NO-RETURN-VALUE more more strip() 引数に重複文字を指定してはならないINVALID-STRIP-CALL more more ロギング関数でフォーマット文字列を使用しないLOGGING-NO-FORMAT more more メソッドが属性と同じ名前を持つMETHOD-HIDDEN more more ネストされたブロックを増やしすぎないNESTED-BLOCKS more more 本番コードで assert を使用しないNO-ASSERT more more タプルにアサートしないNO-ASSERT-ON-TUPLES more more むき出しの except を使用しないNO-BARE-EXCEPT more more 特定の例外がない限り、raise ステートメントを使用しないNO-BARE-RAISE more more ベース例外を発生させないNO-BASE-EXCEPTION more more datetime.today() を使用しないNO-DATETIME-TODAY more more 二重否定を使用しないNO-DOUBLE-NOT more more 演算子 -- と ++ を使用しないNO-DOUBLE-UNARY-OPERATOR more more ベースクラスを一度だけ使用するNO-DUPLICATE-BASE-CLASS more more 演算子 =+ と =- を使用しないNO-EQUAL-UNARY more more exit() を使用しないNO-EXIT more more ジェネリック例外を使用しないNO-GENERIC-EXCEPTION more more 条件において true と比較しないNO-IF-TRUE more more range(len(<array>)) で for i を使用しないNO-RANGE-LOOP-WITH-LEN more more パスステートメントを持つ例外を無視しないNO-SILENT-EXCEPTION more more 読み取り用のオープンフラグを定義しないOPEN-ADD-FLAG more more os.environ に代入しても環境はクリアされないOS-ENVIRON-NO-ASSIGN more more notimplemented を発生させない - 存在しないRAISING-NOT-IMPLEMENTED more more __bytes__ メソッドは文字列ではなくバイトを返すべきであるRETURN-BYTES-NOT-STRING more more 関数の外にリターンしないRETURN-OUTSIDE-FUNCTION more more 自分自身に割り当てないSELF-ASSIGNMENT more more __slots__ は単一の文字列であってはならないSLOTS-NO-SINGLE-STRING more more 特別なメソッドが正しい引数を持つようにするSPECIAL-METHODS-ARGUMENTS more more 静的メソッドのパラメーターとして self を使用しないSTATIC-METHOD-NO-SELF more more ネストされた if 条件を使いすぎないTOO-MANY-NESTED-IF more more ネストされたループや条件を使いすぎないTOO-MANY-WHILE more more type の代わりに isinstance を使うTYPE-CHECK-ISINSTANCE more more 到達不可能なコードを避けるUNREACHABLE-CODE more more 値が呼び出し可能かどうかをチェックするために hasattr を使わないUSE-CALLABLE-NOT-HASATTR more more

Python コードスタイルの強制

ルールセット ID: python-code-style

Python コードスタイルを強制するルール。


Python プログラムの構造チェック

ルールセット ID: python-design

ネストされたループのようなものを含む、Python プログラムの構造をチェックするためのルール。


Django のベストプラクティスとセキュリティのチェック

ルールセット ID: python-django

Django のベストプラクティスとセキュリティに特化したルール。


Flask のベストプラクティスとセキュリティのチェック

ルールセット ID: python-flask

Flask のベストプラクティスとセキュリティに特化したルール。


表現に問題がないか Python コードをチェックする

ルールセット ID: python-inclusive

Python のコードとコメントで不適切な表現を避けるためのルール。


pandas を使ったデータサイエンスのグッドプラクティス

ルールセット ID: python-pandas

pandas コードが適切に使用されていることを確認するための一連のルール。

  • import 宣言がコーディングガイドライン違反に従っていることを確認する。
  • 非推奨のコードやメソッドを避ける。
  • 可能な限り非効率なコードを避ける。

Python コードが安全でセキュアなことを確認する

ルールセット ID: python-security

OWASP10 および SANS25 に記載されているものを含め、Python コード内のセキュリティや脆弱性の問題を発見することに焦点を当てたルール。

  • 粗悪な暗号化およびハッシュ化プロトコルの使用
  • アクセス制御の欠如
  • セキュリティの誤構成
  • SQL インジェクション
  • 資格情報のハードコーディング
  • シェルインジェクション
  • 安全でない逆シリアル化
シェルコマンドの安全でない実行ASYNCIO-SUBPROCESS-CREATE-SHELL more more シェルコマンドの安全でない実行ASYNCIO-SUBPROCESS-EXEC more more secrets パッケージを random パッケージよりも優先的に使用するAVOID-RANDOM more more 値をハードコーディングせずに環境変数を使用するAWS-BOTO-CREDENTIALS more more データのシリアル化または逆シリアル化で安全でない関数を避けるDESERIALIZE-UNTRUSTED-DATA more more すべてのユーザーに書き込み権限を与えないFILE-WRITE-OTHERS more more 一時ファイルやディレクトリをハードコーディングしないHARDCODED-TMP-FILE more more html が組み込まれた文字列を避けるHTML-STRING-FROM-PARAMETERS more more 安全でない関数を使用しないINSECURE-HASH-FUNCTIONS more more jwt の署名が検証済みであることを確認するINSECURE-JWT more more 安全でない暗号化プロトコルを使用しないINSECURE-SSL-PROTOCOLS more more 自動エスケープを true に設定するJINJA-AUTOESCAPE more more 一時ファイルが安全であることを確認するMKTEMP more more デフォルトのパラメーターとして空の配列を使用しないNO-EMPTY-ARRAY-AS-PARAMETER more more eval の使用は安全でない可能性があるNO-EVAL more more サニタイジングなしでの spawn プロセスの呼び出しOS-SPAWN more more サニタイジングなしでのコマンドの実行OS-SYSTEM more more verify を true にするREQUEST-VERIFY more more 暗号化なしで http 呼び出しを行わないREQUESTS-HTTP more more 外部リソースの呼び出しでタイムアウトが設定されていないREQUESTS-TIMEOUT more more 安全でない yaml の逆シリアル化を使用しないRUAMEL-UNSAFE-YAML more more ハードコーディングされた資格情報を渡さないSQL-SERVER-SECURITY-CREDENTIALS more more 証明書の検証をバイパスしないSSL-UNVERIFIED-CONTEXT more more シェルの引数により不必要な権限が与えられるSUBPROCESS-SHELL-TRUE more more sql インジェクションを避けるVARIABLE-SQL-STATEMENT-INJECTION more more 信頼できない yaml の逆シリアル化を避けるYAML-LOAD more more

その他の参考資料

お役に立つドキュメント、リンクや記事: