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::analyze、FuncSpace、各メトリクスモジュール)を指し示す箇所ではどこでも、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_batch、AnalysisFailure、ThreadPoolExecutorによる並列化。 - フラットレコード反復 —
flatten_spacesから sqlite / pandas への供給。 - メトリクス選択 —
metrics=キーワード引数、bca.METRIC_NAMES、依存メトリクスの自動取り込み(dependency-pull)の意味論。 - AST 走査 — 保持されたパース結果に対する
Ast、Node、walk()、find()。 - SARIF 出力 —
to_sarifと GitHub Code Scanning へのアップロード。 - 変更履歴(VCS)メトリクス — git 作業ツリーに対する
vcs.rank、vcs.trend、vcs.commit、vcs.score_diff。 - エラー処理 — 例外の全分類と、決して例外を送出しないバッチ契約。
- 非同期パターン —
asyncio.to_threadが正規のレシピです。
各ページの冒頭の例は、big-code-analysis-py/examples/ 配下のインポート可能なファイルからそのまま埋め込まれており、big-code-analysis-py/tests/test_book_examples.py によってエンドツーエンドで実行されます。そのため、主要経路上のキーワード引数のリネームや関数の削除は、ドキュメントを腐らせる前に CI で失敗します。埋め込まれた例の周囲にある短い説明用スニペット(ロギングのレシピ、errno サフィックスの正規表現パース、asyncio のアンチパターン、pandas のワンライナーなど)はインラインであり、意図的にテストで固定されていません — 両者が食い違う場合は、埋め込まれたブロックを正とみなしてください。