Bun 1.3とは
Bun 1.3は、2025年10月に公開されたJavaScriptランタイムBunのメジャー更新です。
BunはJavaScript・TypeScriptの実行環境に加えて、パッケージマネージャー、テストランナー、バンドラーを1つの実行ファイルで提供します。1.3では、HTMLを起点にしたフロントエンド開発、組み込みのSQL・Redisクライアント、パッケージ管理の安全機能などが追加されました。
この記事では、Bun公式のリリース情報と現行ドキュメントで確認できる機能に絞ります。特定条件のベンチマークを、すべてのアプリに当てはまる性能差としては扱いません。
Bun 1.3の主な変更
| 分野 | 主な内容 |
|---|---|
| フロントエンド | HTMLファイルを直接実行する開発サーバー |
| データベース | PostgreSQL・MySQL・SQLiteを扱うBun.SQL |
| Redis | 組み込みRedisクライアント |
| パッケージ管理 | package catalogs、供給網対策の設定 |
| デバッグ | 非同期処理のスタックトレース改善 |
| Node.js互換 | Node.js API・パッケージ対応の継続的な改善 |
どの機能も、既存のNode.jsプロジェクトを自動的に完全互換にするものではありません。移行前には利用中のパッケージとテストを確認します。
HTMLから開発サーバーを起動する
Bun 1.3では、HTMLファイルをエントリーポイントとして実行できます。JavaScript、TypeScript、CSSなどの参照をBunが処理し、開発サーバーを起動します。
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>Bun frontend</title>
<script type="module" src="./src.ts"></script>
</head>
<body>
<main id="app"></main>
</body>
</html>
const app = document.querySelector<HTMLDivElement>("#app");
if (app) {
app.textContent = "Hello from Bun";
}
bun index.html
公式リリースでは、開発時のファイル監視、hot reload、React Fast Refreshなども案内されています。既存のVite設定をすぐ削除するのではなく、CSS処理、プラグイン、テスト、production buildの要件が満たせるか比較してください。
組み込みのBun.SQL
Bun.SQLは、Promiseベースの統一APIでSQLデータベースへ接続する機能です。現行ドキュメントではPostgreSQL、MySQL、SQLiteが案内されています。
PostgreSQLの接続例です。
import { sql } from "bun";
const users = await sql`
SELECT id, name
FROM users
WHERE active = ${true}
LIMIT ${10}
`;
console.log(users);
タグ付きテンプレートを使うことで、値をSQL文字列へ直接連結せずに渡せます。テーブル名や列名を動的に組み立てる場合は値のプレースホルダーとは扱いが異なるため、公式のSQL Fragmentsの説明を確認してください。
SQLiteは接続文字列や明示的なadapter設定で利用できます。
import { SQL } from "bun";
const db = new SQL({
adapter: "sqlite",
filename: "app.db",
});
await db`
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY,
body TEXT NOT NULL
)
`;
既存のpg、mysql2、better-sqlite3から移行する場合、接続プール、トランザクション、エラー型、型変換の差をテストします。
Redisクライアント
Bun 1.3ではRedisおよびValkeyへ接続する組み込みクライアントが追加されました。キャッシュ、セッション、キューなどで利用できます。
ただし、既存クライアントが提供するすべての補助機能やモジュール対応が同じとは限りません。利用するコマンド、TLS、認証、クラスタ構成、再接続時の挙動を確認してから置き換えます。
パッケージ管理の安全機能
新しく公開されたパッケージを、一定期間インストール対象から外すminimumReleaseAgeが追加されました。攻撃者が公開した直後の悪意あるバージョンを自動更新で取り込むリスクを下げるための設定です。
# bunfig.toml
[install]
minimumReleaseAge = 604800
604800秒は7日です。ただし、この設定だけで安全になるわけではありません。lockfileのレビュー、依存関係の更新範囲、脆弱性情報、インストールスクリプトも確認します。
Bun 1.3では、モノレポで依存バージョンをまとめて管理するpackage catalogsも案内されています。複数workspaceで同じライブラリのバージョンを揃えたい場合に役立ちます。
Node.jsプロジェクトへ段階導入する
Bunは、ランタイム全体を一度に置き換えなくても試せます。安全に比較するなら、次の順番が分かりやすいです。
- 現在のNode.js環境でテスト結果と処理時間を記録する
- 別ブランチで
bun installを試す bun testまたは既存テストスクリプトを実行する- ネイティブアドオン、DB、ファイル操作を重点的に確認する
- CIで同じバージョンを固定する
- 小さな処理から段階的に利用する
bun --version
bun install
bun run test
bun run build
エラーがないことだけでなく、生成物、lockfile、終了コード、メモリ使用量も確認してください。
採用判断
Bun 1.3が向いている可能性があるのは、Bunの統合ツールチェーンを活用したいプロジェクト、TypeScriptスクリプトを簡潔に実行したい用途、組み込みSQL・Redis APIを評価したいチームです。
Node.js固有のパッケージや運用資産が多いサービスでは、互換性検証と障害対応の準備が重要です。「Bunの方が常に速い」「Node.jsを完全に置き換えられる」とは判断せず、自分の処理で測定します。
よくある確認不足
TypeScriptの実行と型チェックを混同する
BunはTypeScriptファイルを直接実行できますが、実行前にプロジェクト全体の型エラーを検査することと同じではありません。CIでは必要に応じてTypeScriptの型チェックを別に実行します。
bunx tsc --noEmit
SQLクライアントを置き換えてテストを省く
同じSQL文でも、日時、BigInt、NULL、バイナリ値などのJavaScriptへの変換はクライアントによって差が出ることがあります。トランザクションの失敗、接続切断、timeoutも含めて確認します。
開発サーバーだけで採用を決める
hot reloadが動いても、production build、source map、CSS処理、ホスティング環境まで同じとは限りません。既存ツールと比較するときは、開発時と本番時を分けて評価してください。
まとめ
- Bun 1.3はHTML起点のフロントエンド開発機能を追加した
Bun.SQLでPostgreSQL・MySQL・SQLiteを扱える- Redisクライアントとパッケージ管理の安全機能が追加された
- 既存Node.jsプロジェクトには段階的に導入できる
- 互換性と性能は利用中のコードで検証する必要がある