5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python開発を“全部入り”で高速化する「PyBun」を開発してみた

5
Posted at

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 --helppybun run --format=json から触ってみてください。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?