Bun ランタイム は何をしますか?
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 とそのエコシステムは急速に進化しています。