アルアカ - Arcadia Academia

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

Bun環境をDockerで構築する方法|高速JSランタイムをコンテナ化

Featured image of the post

Bunは、高速なJavaScript/TypeScriptランタイムとして注目を集めていますが、Dockerコンテナを利用することで、開発環境の再現性を向上させ、本番環境でも安定した動作を実現できます。

本記事では、Bun環境をDockerで構築する方法について、基本的な手順から実践的な活用方法まで詳しく解説します。


[目次を開く]

なぜBunをDockerで動かすのか?

BunをDocker環境で動かすことで、以下のメリットを得ることができます。

  1. 環境の一貫性 – 開発者間で同じ環境を再現可能
  2. 簡単なデプロイ – クラウド環境に簡単に展開できる
  3. 依存関係の管理 – 環境設定やライブラリのバージョンを固定
  4. 軽量で高速な開発サイクル – コンテナ起動が速く、TypeScriptのビルドも不要

Bun環境のDockerコンテナ化手順

以下の手順で、BunをDockerコンテナ内にセットアップし、実際に動作確認を行います。

1. 必要なもの
  • Dockerのインストール(公式サイトからダウンロード)
  • 任意のコードエディタ(VSCodeなど)
  • 基本的なBunの知識

2. Dockerfileの作成

まず、プロジェクトディレクトリを作成し、Dockerfile を準備します。


mkdir bun-docker-app && cd bun-docker-app
touch Dockerfile

Dockerfile に以下の内容を記述します。

# Bun公式イメージを使用(軽量で最適化された環境)
FROM oven/bun:latest

# アプリケーションのワーキングディレクトリを設定
WORKDIR /app

# package.jsonと依存関係をコピー
COPY package.json ./

# 依存関係をインストール
RUN bun install

# アプリケーションのソースコードをコピー
COPY . .

# アプリを実行するコマンド
CMD ["bun", "run", "index.ts"]


3. 必要なファイルの準備

{
  "name": "bun-docker-app",
  "version": "1.0.0",
  "main": "index.ts",
  "scripts": {
    "start": "bun run index.ts"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}

アプリケーションのソースコードや設定ファイルを準備します。

package.json の作成
index.ts の作成(Expressサーバーの例)
import express from "express";

const app = express();
const port = 3000;

app.get("/", (req, res) => {
  res.send("Hello from Bun running in Docker!");
});

app.listen(port, () => {
  console.log(`Server is running at http://localhost:${port}`);
});

4. Dockerコンテナのビルドと実行

以下のコマンドでコンテナイメージをビルドします。


docker build -t bun-docker-app .

イメージのビルドが完了したら、コンテナを起動します。


docker run -p 3000:3000 bun-docker-app

成功すると、http://localhost:3000 にアクセスすると、"Hello from Bun running in Docker!" と以下の画像のように表示されると成功です。

Image in a image block

Docker Composeを使ったBun環境の管理

プロジェクトが大規模になると、Docker Composeを使用して環境をより簡単に管理できます。

1. docker-compose.ymlの作成
version: '3'
services:
  app:
    image: oven/bun:latest
    working_dir: /app
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    command: bun run index.ts

2. コンテナの起動

以下のコマンドでアプリケーションを起動します。


docker-compose up -d

ブラウザで http://localhost:3000 にアクセスし、動作確認を行います。


Bun環境のDocker運用のポイント

1. ホットリロードの設定

開発時には、ファイル変更時に自動で再起動できるようにするために、bun --watch を利用します。

DockerfileのCMD部分を以下のように変更します。

CMD ["bun", "run", "--watch", "index.ts"]

また、Docker Composeでは次のように変更します。

command: ["bun", "run", "--watch", "index.ts"]

2. マルチステージビルドの活用

本番環境向けに、マルチステージビルドを活用し、不要なファイルを削除して軽量化を行います。

# 開発環境
FROM oven/bun:latest AS builder
WORKDIR /app
COPY . .
RUN bun install

# 本番環境用の軽量コンテナ
FROM oven/bun:latest
WORKDIR /app
COPY --from=builder /app .
CMD ["bun", "run", "index.ts"]

参考記事

📄Arrow icon of a page linkマルチステージビルドとは?メリットや実践方法を徹底解説!


3. 環境変数の管理

環境変数を .env ファイルで管理し、セキュアな環境を実現します。

.env の例:

PORT=3000
NODE_ENV=production

docker-compose.yml の設定:

env_file:
  - .env

まとめ

BunをDockerでコンテナ化することで、開発環境の統一、デプロイの簡素化、スケーラビリティの向上が可能になります。特に、軽量なBunとDockerの組み合わせは、スタートアップやスピード重視のプロジェクトに最適です。

ぜひ、この記事を参考にBun環境をDockerで試してみてください!


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

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