Python バインディング

big-code-analysis はファーストパーティの Python バインディング(PyO3 + maturin)を提供しており、Rust ライブラリや bca CLI と同じメトリクスパイプラインを公開します。JSON の形状も、数値のフォーマットも、対応言語も同じです。

import big_code_analysis as bca

result = bca.analyze("src/main.rs")
if result is not None:
    print(result["metrics"]["cyclomatic"]["sum"])

バインディングは Rust API と対等です。本書が Rust の関数(big_code_analysis::analyzeFuncSpace、各メトリクスモジュール)を指し示す箇所ではどこでも、Python に一対一の対応物があります。パイプラインに合う方の言語を選んでください — メトリクスは同一です。

Python を選ぶべき場面

  • すでにデータパイプラインのスタック(pandas、Jupyter、Airflow、dbt、Polars)の中にいて、CLI をシェル実行することなくメトリクスレコードを dict/DataFrame の行として取得したい場合。
  • SARIF を消費する Python ネイティブのセキュリティツールと統合する場合 — SARIF 出力を参照してください。
  • バックエンドが Python 製 Web フレームワーク(FastAPI、Django)であるコード品質ダッシュボードを構築する場合。

コマンドラインからの一回限りの品質レポートだけが必要なら、bca CLI の方がシンプルです — コマンド → メトリクスを参照してください。

長時間稼働する Rust プログラムに解析を組み込むのであれば、Rust ライブラリの方がオーバーヘッドの小さい選択肢です。

本章の内容

  • インストールpip install、ホイールのマトリクス、ソースからのビルド。
  • クイックスタート — 1 つのファイルを解析し、1 つのメトリクスを表示します。
  • バッチ処理analyze_batchAnalysisFailureThreadPoolExecutor による並列化。
  • フラットレコード反復flatten_spaces から sqlite / pandas への供給。
  • メトリクス選択metrics= キーワード引数、bca.METRIC_NAMES、依存メトリクスの自動取り込み(dependency-pull)の意味論。
  • AST 走査 — 保持されたパース結果に対する AstNodewalk()find()
  • SARIF 出力to_sarif と GitHub Code Scanning へのアップロード。
  • 変更履歴(VCS)メトリクス — git 作業ツリーに対する vcs.rankvcs.trendvcs.commitvcs.score_diff
  • エラー処理 — 例外の全分類と、決して例外を送出しないバッチ契約。
  • 非同期パターンasyncio.to_thread が正規のレシピです。

各ページの冒頭の例は、big-code-analysis-py/examples/ 配下のインポート可能なファイルからそのまま埋め込まれており、big-code-analysis-py/tests/test_book_examples.py によってエンドツーエンドで実行されます。そのため、主要経路上のキーワード引数のリネームや関数の削除は、ドキュメントを腐らせる前に CI で失敗します。埋め込まれた例の周囲にある短い説明用スニペット(ロギングのレシピ、errno サフィックスの正規表現パース、asyncio のアンチパターン、pandas のワンライナーなど)はインラインであり、意図的にテストで固定されていません — 両者が食い違う場合は、埋め込まれたブロックを正とみなしてください。