Python開発を“全部入り”で高速化するPyBun紹介
TL;DR
-
単一バイナリで
install/run/test/buildなどをまとめて扱うPythonツールチェーン - 全コマンドが
--format=jsonに対応し、CIやエージェントに組み込みやすい - PEP 723(スクリプト埋め込み依存)対応、MCP対応、サンドボックス実行など “開発運用” を強く意識
PyBunとは?
Pythonプロジェクトの インストール・実行・テスト・ビルド・診断・MCP連携 を単一バイナリでこなすCLIです。
「pip/venv/pytest/buildの分散運用をまとめたい」「機械可読出力でツール連携したい」「エージェント/CIから安全に扱いたい」という課題にフォーカスしています。
こんな人に向いている
- Python開発の“いつもの作業”を 1つのCLIに寄せたい(install/run/test/build/doctor)
- CIや社内ツールで JSON出力を前提にログ/結果を収集したい
- 未信頼のコードを サンドボックス寄りで実行したい(少なくともsubprocess・ネットワークの制御が欲しい)
- エージェント統合(MCP/JSON-RPC)を想定した実行基盤が欲しい
目的(PyBunが解く問題)
- ゼロ準備で動く: venv作成や依存インストールを極力自動化し、PEP 723スクリプトも即実行。
-
安全性と再現性: 署名検証、SBOM、サンドボックス実行、ロックファイル(
pybun.lockb)。 -
機械可読な運用:
--format=jsonとイベント/診断を標準で出す(CLIを“API”として扱える)。 - 高速化: 依存解決/キャッシュ/uv連携など、開発時の体感を改善する。
現状の注意(重要)
PyBunはまだ開発中で、特に pybun install は現状 デモ用途として --index <json> を要求します(PyPI連携の完成形はこれから)。
一方で run/test/build/mcp/sandbox などの“統合UX”はすでに手触りを確認できます。
インストール方法(現状)
前提
- Rust(
cargo) - Python(
pybun run/test/buildの実行に使用) - 任意:
uv(あるとPEP 723の依存インストールが速い)
ソースからビルド
git clone https://github.com/VOID-TECHNOLOGY-INC/PyBun.git
cd PyBun
cargo install --path .
すぐ試すだけなら、インストールせずに直接実行もできます。
cargo run -- --help
基本的な使い方
1) 依存解決してロック生成(※現状はデモ用の --index が必要)
pybun install --index tests/fixtures/index.json --format=json
2) スクリプト実行
pybun run examples/hello.py
pybun run -c -- "print('hello')" --format=json
3) PEP 723(スクリプトに依存を書ける)
# /// script
# requires-python = ">=3.9"
# dependencies = ["requests>=2.28.0"]
# ///
import requests
print(requests.__version__)
pybun run pep723_sample.py --format=json
4) テスト(pytest/unittestラッパー + JSON)
pybun test --format=json --fail-fast
5) ビルド(SBOM出力対応)
pybun build --sbom --format=json
“機械可読”がデフォルト(JSON出力)
PyBunは全コマンドで --format=json が使え、共通エンベロープ(version/command/status/duration_ms/events/diagnostics)で返します。
CIのログ収集やエージェント実行の「結果判定」を安定させやすいのが大きな利点です。
サンドボックス実行(未信頼コード向けの逃げ道)
pybun run --sandbox script.py # subprocess/socket を遮断(デフォルト)
pybun run --sandbox --allow-network app.py # ネットワークをオプトイン
現状の実装は Python の sitecustomize を注入する軽量方式(強制力はOSネイティブほどではない)ですが、
少なくとも subprocess生成とソケットAPIを遮断でき、JSONには sandbox 設定が出ます。
MCP(エージェント連携)
pybun mcp serve --stdio で MCP サーバーとして起動し、ツール呼び出し(install/run/doctor/gc等)をRPCで扱えます。
pybun mcp serve --stdio
ワークスペース/モノレポ(PR6.2)
ルートの pyproject.toml にワークスペースを定義すると、pybun install が ルート+メンバーの依存をまとめて解決します。
[tool.pybun.workspace]
members = ["packages/app1", "packages/app2"]
ベンチマーク(抜粋 + 再現手順)
このリポジトリにはベンチマークハーネスが同梱されています。
記録例(抜粋)
- PEP 723 Cold: ~125ms
- PEP 723 Warm: ~101ms
- Simple Startup: ~25ms
(例: scripts/benchmark/results/benchmark_20251219_230255.md 参照)
実行方法
cargo build --release
PATH=$(pwd)/target/release:$PATH python3 scripts/benchmark/bench.py -s run --format markdown
※Cold Startを測る場合はキャッシュ(~/.cache/pybun/pep723-envs)をクリアしてから実行すると比較しやすいです。
まとめ
PyBunは「高速・安全・構造化」を軸に、Pythonツールチェーンを1つにまとめるプロジェクトです。 現状は開発中で install にはデモ的制約がある一方、--format=json、PEP 723、MCP、サンドボックスなど 運用に効く機能が揃ってきています。
気になったらまずは pybun --help と pybun run --format=json から触ってみてください。