Bun vs Deno
Bun(Zigランタイム、約3倍高速)とDeno(Rustランタイム、TypeScriptファースト) — モダンなNode.js代替ランタイムの比較。パフォーマンス、互換性、エコシステム。
コンテンツアドレス指定ストア、厳格な分離、成熟したサプライチェーン監査
Rustコア、高速、Bunランタイムのオールインワン型インストールコンポーネント
明確な勝者はいない。2つのツールは異なる優先事項に最適化されている。ランタイムに依存せず、ロックファイルを変更するすべてのコマンドでポリシーを監査したいならpnpmを選ぶべきだ。すでにBunをランタイムとして使っていて、グローバル仮想ストアによるディスク/速度の向上が重要ならbun installが魅力的だ。どちらもpostinstallをデフォルトでブロックする——違いは監査ポイントの置き場所にある。同じリポジトリで両者を混在させてはいけない。ロックファイルは1つ、信頼できる情報源も1つに保つべきだ。
| カテゴリー | pnpm | bun install |
|---|---|---|
| パフォーマンス | 8/10 | 9/10 |
| 学習のしやすさ | 7/10 | 8/10 |
| エコシステム | 9/10 | 6/10 |
| コミュニティ | 8/10 | 7/10 |
| 求人市場 | 7/10 | 6/10 |
| 将来性 | 8/10 | 8/10 |
// pnpm 12.3 — allowBuildsによる監査可能なインストールとワークスペースフィルタリング
// package.json (ルート)
{
"name": "monorepo-root",
"private": true,
"packageManager": "[email protected]"
}
// pnpm-workspace.yaml — allowBuilds は v10.26.0 で導入、v11 で旧名称(onlyBuiltDependencies など)が削除された
packages:
- "apps/*"
- "packages/*"
allowBuilds:
esbuild: true
sharp: true
core-js: false
catalog:
react: ^19.2.3
typescript: ^5.7.0
// CIインストールステップ (GitHub Actions)
- name: Install dependencies
run: pnpm install --frozen-lockfile --trust-policy=no-downgrade
// パッケージを削除する際、ロックファイル全体がアクティブなポリシーに対して再検証される
pnpm remove left-pad --filter ./apps/web --trust-lockfile
// 変更されたワークスペースパッケージのみにインストール
pnpm install --filter "...[origin/main]"
// ストアの場所をCIキャッシュキーに追加する
pnpm store path// Bun 1.4 — isolated installs + グローバル仮想ストア + オフラインインストール
// bunfig.toml (ルート)
[install]
linker = "isolated"
globalStore = true
exact = false
// package.json
{
"name": "monorepo-root",
"private": true,
"workspaces": ["apps/*", "packages/*"],
"trustedDependencies": [
"esbuild",
"sharp",
"@prisma/client"
]
}
// CIインストールステップ (GitHub Actions) — ロック済みかつオフライン対応
- name: Install dependencies
run: bun install --frozen-lockfile --prefer-offline
// ブロックされたpostinstallスクリプトを確認する
bun pm untrusted
// パッケージを信頼済みとしてマークする
bun pm trust sharp
// 特定のワークスペースパッケージにインストール
bun install --filter "./apps/web"
// 完全オフラインインストール(ネットワークに一切出ない)
bun install --offline明確な勝者はいない。2つのツールは異なる優先事項に最適化されている。ランタイムに依存せず、ロックファイルを変更するすべてのコマンドでポリシーを監査したいならpnpmを選ぶべきだ。すでにBunをランタイムとして使っていて、グローバル仮想ストアによるディスク/速度の向上が重要ならbun installが魅力的だ。どちらもpostinstallをデフォルトでブロックする——違いは監査ポイントの置き場所にある。同じリポジトリで両者を混在させてはいけない。ロックファイルは1つ、信頼できる情報源も1つに保つべきだ。
無料相談を受けるシナリオによって異なる。Bunが公開しているベンチマークは自社のリンカー同士の比較で、1,400パッケージのReact/webpack/Babel/jestフィクスチャでは、ホットインストールがhoistedリンカーで823.9ms、isolatedリンカー+グローバルストアで124.8ms(Apple Silicon macOS、hyperfine)。pnpmのコンテンツアドレス指定ストアもホットインストール時にディスク読み取りに依存するため、どちらも適切な条件下では高速だ。2つのツール間の差は自分のリポジトリサイズとCIキャッシュ戦略で測定すべきであり、単一のフィクスチャ結果を自分のモノレポにそのまま当てはめてはいけない。