1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node/Express → Bun/Elysia 変換ガイド

1
Last updated at Posted at 2026-02-18

Node/Express を使っている人で、Bun/Elysia に興味がある人向けの移行ガイドです。まぁマイグレーションというかポーティングというか。
各項目に「なぜそうなるのか」の簡単な解説を付けています。

🚀 Bun/Elysia を使うと何が良いのか(まず最初に)

Bun と Elysia を使う最大のメリットは、高速・シンプル・型安全の三拍子が揃っていることです。

例えば Express は成熟している一方で、Node.js の HTTP 実装やミドルウェアチェーンのオーバーヘッドが大きく、大量リクエスト時のスループットが伸びにくいという課題があります。JSON パースや CORS などの設定も都度追加が必要で、規模が大きくなるほど負担が増えがちですよね。

🌟 Bun のメリット(公式より)

  • Node.js より高速な JavaScript ランタイム
  • npm 互換のパッケージマネージャー
  • TypeScript をそのまま実行可能
  • Web API が標準で使える
  • テストランナーやバンドラーも内蔵(オールインワン)

公式:https://bun.sh/

🌟 Elysia のメリット(公式より)

  • Bun の性能を最大限に引き出す高速 Web フレームワーク
  • JSON パースや型安全が標準で組み込まれている
  • ルーティングやミドルウェアがシンプル
  • TypeScript 前提で設計されているため補完が強力
  • プラグインが軽量で扱いやすい

公式:https://elysiajs.com/


📊 公式ベンチマーク(引用)

Bun と Elysia の公式ページには、Node.js や他フレームワークとの比較チャートが掲載されています。

Bun 公式ベンチマーク

(引用元:https://bun.sh/)

例:

  • Bun は Node.js より高速な HTTP サーバー性能
  • JavaScript/TypeScript の実行速度が高速
  • パッケージインストールが高速

※チャート画像は公式ページを参照してください。

Elysia 公式ベンチマーク

(引用元:https://elysiajs.com/)

例:

  • Express より圧倒的に高速
  • Fastify や Hono と比較しても高いパフォーマンス
  • Bun 上で動作するためさらに高速化

※チャート画像は公式ページを参照してください。


📝 なぜ Express → Bun/Elysia なのか(簡単に)

  • Express は成熟しているが、Node.js の速度がボトルネックになる
  • Elysia は Bun の高速ランタイムを前提に設計されている
  • JSON パースや型安全など、Express で必要な設定が最初から揃っている
  • API が増えるほど、Elysia の “設定不要の強さ” が効いてくる

この記事では、Express のコードを Elysia に「移植(ポーティング)」する方法をまとめています。


🌀 1. Express の基本構造

Express は Node.js の代表的な Web フレームワークで、最小構成でもミドルウェア設定が必要です。

import express from 'express'
const app = express()

app.get('/hello', (req, res) => {
  res.json({ message: 'Hello World' })
})

app.listen(3000)

🌀 2. Bun + Elysia 版(最小構成)

Elysia は Bun 向けに最適化された高速フレームワークで、Express で必要な設定やミドルウェアが最初から組み込まれているため、余計な準備なしで API を書き始められます。
コード量そのものよりも、設定・依存関係・初期化の手間が大幅に減るのが大きなメリットです。

import { Elysia } from 'elysia'

const app = new Elysia()
  .get('/hello', () => ({ message: 'Hello World' }))
  .listen(3000)

console.log(`🟢 Elysia running at http://localhost:3000`)

🌀 3. JSON Body を受け取る(Express → Elysia)

Express は express.json() が必要ですが、Elysia は デフォルトで JSON をパースします。

Express

app.use(express.json())

app.post('/user', (req, res) => {
  res.json({ name: req.body.name })
})

Elysia

new Elysia()
  .post('/user', ({ body }) => ({
    name: body.name
  }))
  .listen(3000)

🌀 4. ルーティング(Router → Group)

Express の Router に相当するのが Elysia の group()
ネスト構造がわかりやすく、型も引き継がれるのが強みです。

Express

const router = express.Router()
router.get('/a', ...)
router.get('/b', ...)
app.use('/api', router)

Elysia

new Elysia()
  .group('/api', app =>
    app
      .get('/a', () => 'A')
      .get('/b', () => 'B')
  )
  .listen(3000)

🌀 5. Middleware(Express → Elysia)

Express の app.use() に相当するのが Elysia の onRequest()
リクエスト前後のフックが細かく用意されているのが特徴です。

Express

app.use((req, res, next) => {
  console.log(req.path)
  next()
})

Elysia

new Elysia()
  .onRequest(({ request }) => {
    console.log(request.url)
  })
  .get('/', () => 'OK')
  .listen(3000)

🌀 6. CORS(Express → Elysia)

Express と同じくプラグイン方式ですが、Elysia は 公式プラグインが軽量で高速です。

Express

import cors from 'cors'
app.use(cors())

Elysia

import { cors } from '@elysiajs/cors'

new Elysia()
  .use(cors())
  .listen(3000)

🌀 7. 静的ファイル(Express → Elysia)

Express の express.static() と同じ役割を、Elysia では staticPlugin() が担います。

Express

app.use(express.static('public'))

Elysia

import { staticPlugin } from '@elysiajs/static'

new Elysia()
  .use(staticPlugin())
  .listen(3000)

🌀 8. Bun の強みを活かすポイント

Bun + Elysia は 高速・型安全・設定不要 の三拍子が揃っています。

項目 Express Bun + Elysia
起動速度 遅い 爆速
TypeScript 手動設定 デフォルトで型安全
JSON パース express.json() 必要 標準搭載
ルーティング Router 必須 group() で簡潔
パフォーマンス 高速(Deno/Go 並)

🌀 9. 関連リンクまとめ

Bun や Elysia をさらに深掘りしたい人向けのリンク集です。

🔗 Bun 関連(Qiita)

🔗 公式ドキュメント


🌀 10. まとめ

Express のコードはそのままでも動きますが、まぁ一般的に
Bun + Elysia に移行するとコード量が減り、速度が上がり、型安全になりますね。 

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?