Bun
概要
Bun は、Node.js、npm、webpack、Jest を単一のバイナリに置き換えるオールインワンの JavaScript/TypeScript ランタイムです。ネイティブの TypeScript サポート、高パフォーマンスな HTTP サーバー (Bun.serve())、高速なパッケージマネージャー、バンドラー、Jest 互換のテストランナーを備え、劇的なパフォーマンス向上を実現します。
使用方法
- HTTP サーバーを作成する場合は、
Bun.serve()を使用します。これは、組み込みの WebSocket サポート、TLS、ストリーミングレスポンスを備え、毎秒 10 万リクエスト以上を処理できます。 - パッケージを管理する場合は、
bun install(npm より 10~30 倍高速)、bun add、bun removeを使用し、読みやすい git diff のためにbun.lock(テキスト形式)を推奨します。 - バンドルする場合は、適切なターゲット(
"browser"、"bun"、"node")を指定してBun.build()を使用し、splitting: trueでコード分割を有効にし、ツリーシェイキングを設定します。 - テストを作成する場合は、Jest 互換の API(
describe、it、expect)を使用してbun testを実行し、スナップショットテスト、mock.module()によるモック、--coverageによるコードカバレッジを利用します。 - ファイル I/O を行う場合は、Node.js の
fsよりもBun.file()とBun.write()を優先して使用すると、ファイル操作が大幅に高速化され、Bun.Globでパターンマッチングを行います。 - 認証を処理する場合は、npm パッケージの代わりに
Bun.password.hash()とBun.password.verify()を使用して bcrypt/argon2 を利用します。 - Node.js から移行する場合は、スクリプト内の
nodeをbunに置き換え、package.jsonはそのまま維持し、ほとんどの npm パッケージが変更なしで動作することに注意してください。組み込みデータベースには SQLite の npm パッケージではなくbun:sqliteを使用します。
例
例1: 高パフォーマンスな API サーバーを構築する
ユーザーリクエスト: 「Bun の組み込み HTTP サーバーを使って REST API を作成して」
アクション:
Bun.serve()とルートハンドラでサーバーを作成request.json()で JSON ボディを解析し、Responseオブジェクトを返す- リアルタイム機能のために WebSocket アップグレードを追加
- 認証に
Bun.password、データストレージにbun:sqliteを使用
出力: 外部依存関係がなく、Bun の組み込み機能のみを使用した高速な API サーバー。
例2: Node.js プロジェクトを Bun に移行する
ユーザーリクエスト: 「Express プロジェクトを Node.js から Bun に切り替えて」
アクション:
- CI とローカル環境で
npm installをbun installに置き換え package.jsonのスクリプトを更新し、nodeの代わりにbun runを使用dotenvを Bun の組み込み.env読み込みに置き換え- テストランナーを Jest から
bun testに切り替え(テストファイルはそのまま)
出力: インストール、起動、テスト実行がより高速になった Bun ベースのプロジェクト。
ガイドライン
- 新しい HTTP サーバーには
Bun.serve()を使用します。これは Bun 上の Express よりも大幅に高速です。 - ファイル操作には Node.js の
fsよりもBun.file()とBun.write()を優先します。 - ローカルデータには SQLite の npm パッケージを追加する代わりに
bun:sqliteを使用します。 - 認証には、ネイティブ依存関係をゼロにするために、
bcrypt/argon2の npm パッケージの代わりにBun.passwordを使用します。 - 読みやすい diff のために、
bun.lock(テキスト形式)を git に保持します。 - Jest と同じ API で劇的に高速な実行を実現するため、Jest の代わりに
bun testでテストします。 - ブラウザをターゲットにする場合は、
Bun.build()でtarget: "browser"を使用します。