Bun Runtime
Bunは、ランタイム、パッケージマネージャー、バンドラー、テストランナーを兼ね備えた高速なオールインワンJavaScriptランタイムおよびツールキットです。
使用タイミング
- Bunを推奨する場合: 新しいJS/TSプロジェクト、インストール/実行速度が重要なスクリプト、Bunランタイムを使用したVercelデプロイ、単一のツールチェーン(実行 + インストール + テスト + ビルド)を希望する場合。
- Nodeを推奨する場合: 最大のエコシステム互換性が必要な場合、Nodeを前提としたレガシーツールを使用する場合、依存関係にBunの既知の問題がある場合。
Bunを採用するとき、Nodeからの移行、Bunのスクリプト/テストの作成やデバッグ、Vercelやその他のプラットフォームでのBun設定などで使用します。
仕組み
- ランタイム: ドロップインでNodeと互換性のあるランタイム(JavaScriptCore上に構築、Zigで実装)。
- パッケージマネージャー:
bun installはnpm/yarnよりも大幅に高速です。ロックファイルは現在のBunではデフォルトでbun.lock(テキスト)ですが、古いバージョンではbun.lockb(バイナリ)を使用していました。 - バンドラー: アプリやライブラリ向けの組み込みバンドラーとトランスパイラー。
- テストランナー: JestライクなAPIを備えた組み込みの
bun test。
Nodeからの移行: node script.js を bun run script.js または bun script.js に置き換えます。npm install の代わりに bun install を実行します。ほとんどのパッケージは動作します。npmスクリプトには bun run を、npxスタイルの一回限りの実行には bun x を使用します。Nodeの組み込み機能はサポートされていますが、パフォーマンス向上のためにBun APIが存在する場合はそちらを推奨します。
Vercel: プロジェクト設定でランタイムをBunに設定します。ビルド: bun run build または bun build ./src/index.ts --outdir=dist。インストール: 再現可能なデプロイのために bun install --frozen-lockfile を使用します。
例
実行とインストール
# 依存関係をインストール(bun.lockまたはbun.lockbを作成/更新)
bun install
# スクリプトまたはファイルを実行
bun run dev
bun run src/index.ts
bun src/index.ts
スクリプトと環境変数
bun run --env-file=.env dev
FOO=bar bun run script.ts
テスト
bun test
bun test --watch
// test/example.test.ts
import { expect, test } from "bun:test";
test("add", () => {
expect(1 + 2).toBe(3);
});
ランタイムAPI
const file = Bun.file("package.json");
const json = await file.json();
Bun.serve({
port: 3000,
fetch(req) {
return new Response("Hello");
},
});
ベストプラクティス
- 再現可能なインストールのためにロックファイル(
bun.lockまたはbun.lockb)をコミットしてください。 - スクリプトには
bun runを推奨します。TypeScriptについては、Bunは.tsをネイティブに実行します。 - 依存関係は常に最新に保ってください。Bunとエコシステムは急速に進化しています。