アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

Bun×ElysiaJS:高速JavaScriptランタイムでAPI開発しよう

Featured image of the post

近年、Node.jsの代替として登場したBunが注目を集めています。Bunは、高速な実行速度と豊富な機能を兼ね備えたJavaScriptランタイムであり、API開発においても大きな可能性を秘めています。また、ElysiaJSもBunと親和性が高いということで同じく注目を集めています。本記事では、Bun×ElysiaJSを活用したAPI開発について、概要やメリット、実践方法を詳しく解説します。


[目次を開く]

Bunについての解説は以下の記事を参照ください。

📄Arrow icon of a page linkBunランタイムとは?高速なJavaScript/TypeScript実行環境の魅力

ElysiaJSとは?

ElysiaJSは、Bun向けに設計された超軽量なWebフレームワークで、APIやWebアプリケーションの開発をシンプルかつ高速に実現できます。

主な特徴:

  • Bunに最適化:Bunの高速な実行性能を最大限に活かせる
  • 軽量な設計:最小限のリソースで動作し、サイズも非常に小さい
  • TypeScriptフレンドリー:ネイティブに型安全な開発が可能
  • 宣言的なAPI設計:シンプルでわかりやすいルーティング構文
  • エコシステムの拡張:プラグインシステムにより機能拡張が容易
ElysiaJSのメリット
  1. 高速なパフォーマンス
    ElysiaJSは、Bunの高パフォーマンスなランタイムを活かし、Node.jsよりも数倍速いAPIレスポンスを実現します。
  2. シンプルな記述と設計
    軽量な構造と宣言的なルーティングにより、学習コストが低く、短時間でAPIを構築できます。
  3. TypeScriptの強力なサポート
    型安全な開発が可能で、ランタイムエラーを減らし、開発の生産性を向上させます。
  4. 組み込み機能の充実
    デフォルトでCORS、エラーハンドリング、バリデーションなどの機能が用意されており、追加設定なしで使えます。

Bunを使用したAPI開発のメリット

BunをAPI開発に採用することで、以下のメリットが得られます:

1. パフォーマンスの向上

Bunは、Node.jsと比較して約3倍の高速化を実現しており、APIのレスポンス速度を向上させることができます。高負荷なシステムやリアルタイムアプリケーションに最適です。

2. 簡潔なコード記述

Bunには、標準でWeb API(fetchWebSocketsなど)が組み込まれているため、追加のライブラリなしで効率的にAPIを開発できます。

3. ビルトインのパッケージマネージャー

bun installを使用すると、Node.jsのnpmよりも圧倒的に高速に依存関係をインストールできます。

4. TypeScriptのネイティブ対応

Bunは、TypeScriptをそのまま実行可能であり、開発時にコンパイルの手間を省くことができます。


Bunを使ったAPI開発のセットアップ

ここでは、Bunを使用してシンプルなREST APIを構築する手順を解説します。

Dockerでの環境構築を推奨しています。以下の記事を参考にBun環境を構築してみてください。

📄Arrow icon of a page linkBun環境をDockerで構築する方法|高速JSランタイムをコンテナ化

※上記の記事ではExpress をインストールしていますが、本記事の内容では不要です。

1. Bunのインストール

まず、Bunをインストールします。macOSやLinuxの場合、以下のコマンドを実行します:

curl -fsSL https://bun.sh/install | bash

Windowsでは、Bunの公式サイトから適切なインストール方法を確認してください。

インストール後、動作確認を行います:

bun --version

2. プロジェクトの作成

新しいAPIプロジェクトを作成します。

mkdir bun-api && cd bun-api
bun init

次に、ElysiaJSをインストールします。

bun add elysia
bun add -d @types/bun

3. APIサーバーの作成

index.tsを作成し、以下のコードを記述します:

import { Elysia, t } from 'elysia';

const app = new Elysia()
  .get('/users', () => [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' }
  ])
  .post('/users', ({ body }) => ({
    message: `User ${body.username} created!`
  }), {
    body: t.Object({
      username: t.String()
    })
  });

app.listen(3000);

console.log('Bun API is running on http://localhost:3000');
  • app.get()でGETエンドポイントを定義
  • app.post()でPOSTエンドポイントを定義
  • app.listen(3000)でサーバーを起動

4. APIの起動と動作確認

以下のコマンドでサーバーを起動します:

bun run index.ts

ブラウザまたはcurlで確認:

curl http://localhost:3000

以下のようなレスポンスが返されれば成功です:

"Hello, Bun!"

curl での動作確認

# GETリクエスト
curl http://localhost:3000/users

# 期待されるレスポンス
[
  { "id": 1, "name": "Alice" },
  { "id": 2, "name": "Bob" }
]

# POSTリクエスト
curl -X POST http://localhost:3000/users -H "Content-Type: application/json" -d '{"username":"Charlie"}'

# CMDの場合は以下のコマンド
curl -X POST http://localhost:3000/users -H "Content-Type: application/json" -d "{\"username\":\"Charlie\"}"

# 期待されるレスポンス
{"message":"User Charlie created!"}    
5. TypeScriptの活用

BunはTypeScriptをネイティブにサポートしているため、型安全なAPIを簡単に構築できます。

例えば、ユーザーデータの型を定義し、APIのレスポンスに適用します:

type User = {
  id: number;
  name: string;
};

const users: User[] = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' }
];

app.get('/users', () => users);

TypeScriptの型チェックを活用することで、より安全なコードを書くことができます。


BunとNode.jsの比較

特徴 Bun Node.js
言語サポート JS, TS(ネイティブ対応) JS, TS(トランスパイル必要)
実行速度 高速(Zigベース) 遅め(V8エンジン)
パッケージ管理 bun install(超高速) npm install(遅い)
ビルド時間 短縮(即時実行) コンパイルが必要
標準ライブラリの充実 高(Web API内蔵) 標準ライブラリあり

API開発におけるBunのベストプラクティス

  1. 軽量フレームワークの活用
    • ElysiaHonoなどBunに最適化されたフレームワークを活用する
  2. 環境変数の管理
    • .envファイルを活用し、環境設定を適切に管理
  3. Docker化による運用
    • Bunの軽量性を活かして、コンテナ化しクラウド展開をスムーズに行う

まとめ

Bunは、API開発において非常に強力な選択肢です。特に、高速なレスポンス、TypeScriptのネイティブ対応、開発の簡易性といった利点を活かして、シンプルかつスケーラブルなAPIを構築することができます。今後、Node.jsの代替としてBunが広く採用される可能性も高いため、ぜひ試してみてください。

関連記事

📄Arrow icon of a page linkHono入門:超高速・軽量なWebフレームワーク

あなたを爆速で成長させるメンタリングプログラムはこちらから↓↓

RUNTEQ(ランテック) - 実践型Webエンジニア養成プログラミングスクールの入会