コンテンツにスキップ

Python 向けの構造的静的解析

pyscn

pyscn はコンパイラのように Python を読みます — 制御フローグラフ、構文木、インポートグラフ。行単位のリンターでは見つからないもの、return の後に取り残されたデッドコード、別名で複製されたロジック、静かに循環するモジュール依存を検出します。

uvx pyscn@latest analyze .

はじめる GitHub で見る

Go 製バイナリ · Python ランタイム依存なし · 100,000+ 行/秒 · 33 のルール

Control-flow graph for a function with unreachable code After the conditional, both branches return. A logging call written after the conditional is never reached, so pyscn flags it as unreachable-after-return. def process(x): if x is None: True return None False return compute(x) log("done") → flagged: unreachable-after-return

検出内容

  • 到達不能コード


    CFG ベースの到達可能性解析で、return / raise / break / continue の後や常に真になる分岐の先に残されたデッドコードを検出します。

  • 重複コード


    APTED の木編集距離と LSH の組み合わせで、完全一致・名前変更・構造変更・意味的類似の4種類のクローンを検出します。

  • 複雑度


    関数ごとのサイクロマティック複雑度を計測します。しきい値はプロジェクトごとに調整できます。

  • クラス設計


    CBO 結合度と LCOM4 凝集度のメトリクスで、責務を持ちすぎる、あるいは持たなすぎるクラスを可視化します。

  • 循環インポート


    Tarjan の SCC アルゴリズムで、実行時に ImportError になる前に循環依存を発見します。

  • モジュール構造


    インポートグラフに対する Leiden クラスタリングで、本来ひとまとまりであるべきモジュールとそうでないモジュールを明らかにします。

インストール

uvx pyscn@latest analyze .

インストールせずに最新版を実行します。

uv tool install pyscn
pipx install pyscn
pip install pyscn

詳しくは Installation をご覧ください。

クイックスタート

pyscn analyze .                                  # full analysis, HTML report
pyscn check --select complexity,deadcode src/    # CI gate
pyscn init                                       # generate .pyscn.toml

詳しくは Quick Startルールカタログ をご覧ください。

AI エージェント連携

uvx add-skills ludo-technologies/pyscn

Claude Code, Cursor, Codex, Gemini CLI、その他のコーディングエージェントに、各分析の使いどころを教える Agent Skills をインストールします。詳しくは Agent Skills をご覧ください。構造化されたツール呼び出しが必要な場合は MCP サーバー を使用してください。