Bun 1.3 - 組み込みSQL・Redisとフロントエンド開発機能

中級 | 7分 で読める | 2026.04.19

公式ドキュメント

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
  )
`;

既存のpgmysql2better-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は、ランタイム全体を一度に置き換えなくても試せます。安全に比較するなら、次の順番が分かりやすいです。

  1. 現在のNode.js環境でテスト結果と処理時間を記録する
  2. 別ブランチでbun installを試す
  3. bun testまたは既存テストスクリプトを実行する
  4. ネイティブアドオン、DB、ファイル操作を重点的に確認する
  5. CIで同じバージョンを固定する
  6. 小さな処理から段階的に利用する
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プロジェクトには段階的に導入できる
  • 互換性と性能は利用中のコードで検証する必要がある

参考リソース

← 一覧に戻る
PR
PR
PR
PR