bun について
bunは、JavaScriptとTypeScriptのランタイム、パッケージマネージャー、テストランナー、バンドラーをまとめた開発者向けツールキットです。HTTPサーバー、ストレージ、データベースなどのAPIも備えています。
主な機能
- 01JavaScriptとTypeScriptのランタイム
- 02パッケージのインストールと管理
- 03組み込みテストランナーとバンドラー
- 04HTTPとWebSocketのAPI
- 05SQLite、S3、Redisへのアクセス
活用シーン
- 01ビルド工程なしでTypeScriptを実行
- 02プロジェクトの依存関係を導入・管理
- 03JavaScriptプロジェクトのテストとバンドル
- 04HTTPやWebSocketを使うサービスの構築
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ itechmeat/ llm-code --skill bunインストール後、Claude Code で/bunを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/bunfig.mdcc.mddevelopment.mdenv.mdfetch.mdfile-io.mdfile-system-router.mdhttp-server.mdmodule-system.mdnative-interop.mdnetworking-low-level.mdnodejs-compat.mdpackage-manager.mdplugins.mdproject-scaffolding.mdredis.mds3.mdshell.mdspawn.mdsqlite.mdtranspiler.mdtypescript-jsx.mdutilities.mdwebsockets.mdwebview.mdworkers.md詳細
Bun
ランタイム、パッケージマネージャー、テストランナー、バンドラーを備えたオールインワンの JavaScript/TypeScript ツールキットです。
クイックナビゲーション
| トピック | リファレンス |
|---|---|
| パッケージマネージャー | references/package-manager.md |
| プロジェクトのセットアップ | references/project-scaffolding.md |
| 開発 | references/development.md |
| モジュールシステム | references/module-system.md |
| TypeScript と JSX | references/typescript-jsx.md |
| 設定 | references/bunfig.md |
| HTTP サーバー | references/http-server.md |
| ブラウザー自動化 | references/webview.md |
| WebSocket | references/websockets.md |
| ファイル入出力 | references/file-io.md |
| SQLite | references/sqlite.md |
| S3 ストレージ | references/s3.md |
| Redis | references/redis.md |
| 低レベルネットワーク | references/networking-low-level.md |
| Fetch API | references/fetch.md |
| シェルスクリプト | references/shell.md |
| プロセスの起動 | references/spawn.md |
| ワーカー | references/workers.md |
| ネイティブ FFI | references/native-interop.md |
| C/C++ のコンパイル | references/cc.md |
| トランスパイラー | references/transpiler.md |
| プラグイン | references/plugins.md |
| FS ルーター | references/file-system-router.md |
| 環境変数 | references/env.md |
| ユーティリティ | references/utilities.md |
| Node.js 互換性 | references/nodejs-compat.md |
Bun を使う場面
- ビルド手順なしで TypeScript/JSX を実行する
- ネイティブルーティングを備えた高速な HTTP サーバー
- ネイティブ入力イベントを使ったヘッドレスブラウザー自動化
- SQLite データベース(組み込み、依存関係なし)
- WebSocket サーバー/クライアント
- S3 互換ストレージ(AWS、R2、MinIO)
- Redis によるキャッシュ/パブサブ
- クロスプラットフォームのシェルスクリプト
- プロセス内での cron スケジューリング
- Markdown の解析(v1.3.8 以降)
- FFI を介したネイティブライブラリ呼び出し
主な利点
- Node.js より起動が 4 倍高速
- ネイティブ TypeScript/JSX — tsconfig は不要
- ESM と CommonJS — どちらもシームレスに動作
- Web API を標準搭載 — fetch、WebSocket など
- npm よりインストールが 30 倍高速
クイックスタート
# Run TypeScript directly
bun run index.ts
# Install packages
bun install
# Run package.json script
bun run dev
# Execute package binary
bunx cowsay "Hello"
# Run tests
bun test
# Build for production
bun build ./index.ts --outdir ./dist
# Bundle analysis for LLMs (v1.3.8+)
bun build ./index.ts --metafile-md --outdir ./dist
重要なルール
| 使わない | 使う |
|---|---|
http.createServer() | Bun.serve() |
fs.readFileSync() | Bun.file().text() |
better-sqlite3 | bun:sqlite |
child_process.exec() | Bun.$ or Bun.spawn() |
dotenv | 組み込みの .env サポート |
リリースの主な変更点(1.4.x)
- Rust による書き換え:Rust 移植版の初回リリースです。ピーク時のメモリ使用量を削減(負荷時に mimalloc アロケーターにより 13~48%削減)、起動を約 2 倍高速化、アイドル時の CPU 使用率を 5 分の 1 に削減し、Node.js テストスイートの合格テスト数が 1,500 件以上増えました。
- HTTP/2 と HTTP/3:
Bun.serve()は、TLS 上の ALPN によって同じポートで HTTP/1.1 と HTTP/2 を提供します(v1.4.1)。HTTP/3 はhttp3: trueで試験的に利用できます。fetch()では、機能フラグを有効にすると HTTP/2 および HTTP/3 クライアントを使用できます。 - 静的ディレクトリの提供:
routes: { "/static/*": { dir: "./public" } }により、sendfile、ETag、Range、条件付きリクエスト、index.html に対応します。 - CLI:並行スクリプト実行用の
bun run --parallel、パッケージのメンテナンス用のbun audit fix、bun dedupe、bun prune、bun pm diff、bun pm licenses。 bun test:--parallel、--isolate、--shard=M/N、--timings、--changed(差分ベース)、--retry、jest.useFakeTimers()に対応しました。bun build:組み込み React Compiler(--react-compiler)、バレルインポートの最適化、export * asと動的なimport()によるツリーシェイキング、--min-chunk-size、モジュールのプリロードに対応しました。bun install:--linker=isolatedによるグローバル仮想ストア、--offline/--prefer-offline、bun add --catalog、ネストされたオーバーライド、selfContainedワークスペースに対応しました。- 新しいランタイム API:
Bun.Terminal(PTY)、Bun.Archive(tar)、Bun.JSON5/JSONL/JSONC/XML/TOMLパーサー、ストリーミング対応のBun.write(path, response)、WebSocket.pause()/resume()、crypto.argon2、crypto.subtleの耐量子暗号 ML-DSA/ML-KEM。
リリースの主な変更点(1.3.14)
Bun.Image:一般的な形式の画像を組み込みでデコード、変換、エンコードできます。npm 依存関係やネイティブアドオンのビルド手順は不要です。- テストワークフロー:
1.3.13系列では、変更ファイルを対象としたテスト実行で、依存関係を考慮したフィルタリングが改善されました。部分的なローカル検証に依存する場合に役立ちます。 - パッチリリースでのランタイム改良:
1.3.13~1.3.14では、1.3.12の WebView/cron/Markdown リリース系列を基盤として、互換性とパフォーマンスの改良が続けられています。
リリースの主な変更点(1.3.12)
Bun.WebView:macOS では WebKit、すべてのプラットフォームでは CDP 経由の Chrome/Chromium を使用する、ネイティブのヘッドレスブラウザー自動化機能です。Bun.cron()のコールバックモード:重複しない実行、UTC セマンティクス、ホットリロード時のクリーンアップ、Disposableジョブハンドルに対応した、プロセス内スケジューラーです。- ターミナルでの Markdown:
bun ./file.mdとBun.markdown.ansi()により、ターミナルネイティブのレンダリングを第一級のワークフローとして利用できます。 - ネットワーク/ランタイム:UDP エラー/切り捨ての処理、Node 互換の Unix ソケットのライフサイクル、プロキシトンネルの再利用、
Bun.serve()の接続受付/パフォーマンスの改善。
基本的なレシピ
HTTP サーバー
Bun.serve({
port: 3000,
fetch(req) {
const url = new URL(req.url);
if (url.pathname === "/api/data") {
return Response.json({ ok: true });
}
return new Response("Not Found", { status: 404 });
},
});
ファイル操作
// Read
const content = await Bun.file("data.txt").text();
// Write
await Bun.write("output.txt", "Hello World");
// JSON
const config = await Bun.file("config.json").json();
SQLite
import { Database } from "bun:sqlite";
const db = new Database("app.db");
db.run("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
const insert = db.prepare("INSERT INTO users (name) VALUES (?)");
insert.run("Alice");
const users = db.query("SELECT * FROM users").all();
WebSocket サーバー
Bun.serve({
fetch(req, server) {
if (server.upgrade(req)) return;
return new Response("Upgrade failed", { status: 400 });
},
websocket: {
message(ws, message) {
ws.send(`Echo: ${message}`);
},
},
});
シェルコマンド
import { $ } from "bun";
// Simple command
const files = await $`ls -la`.text();
// With variables (auto-escaped)
const name = "my file.txt";
await $`cat ${name}`;
// Piping
await $`cat data.csv | grep "pattern" | wc -l`;
S3 ストレージ
import { s3 } from "bun";
// Upload
await s3.file("uploads/doc.pdf").write(data);
// Download
const content = await s3.file("uploads/doc.pdf").text();
// Presigned URL
const url = s3.presign("uploads/doc.pdf", { expiresIn: 3600 });
Redis
import { redis } from "bun";
await redis.set("key", "value");
const value = await redis.get("key");
await redis.expire("key", 3600);
テスト
import { expect, test, describe } from "bun:test";
describe("math", () => {
test("2 + 2 = 4", () => {
expect(2 + 2).toBe(4);
});
});
設定(bunfig.toml)
[run]
watch = true
[install]
registry = "https://registry.npmjs.org"
[test]
coverage = true
環境変数
# .env files loaded automatically
DATABASE_URL=postgres://localhost/mydb
// Access
Bun.env.DATABASE_URL;
process.env.DATABASE_URL;
import.meta.env.DATABASE_URL;
リンク
コメント
Markdown 対応