Open1
Bun+Hono+Prisma+Supabaseでバックエンドを構成する

動機
BunおよびHonoが軽量で超高速という情報を得たため、試しに使ってみようと思った
結論
超早い+開発が快適
実際に速度を測定したわけではないが、コンテナの立ち上げスピードが早かったり、修正後の反映が早かったりとだいぶ快適に開発を行えている。
ちなみに開発に使っているMac Book airのスペックが終わっており、これまでの開発では、コンテナを立ち上げるだけで動きが超絶重くなっていたが、そういったストレスも今のところ感じられない。
🔥 Bunのメリット
- 圧倒的に高速
- Node.jsやDenoよりも圧倒的に高速な実行速度。
- JavaScript/TypeScriptの実行、npmパッケージのインストール、ビルド、テストなどがすべて高速。
- オールインワン設計
- パッケージマネージャ(npm互換)、ビルドツール、タスクリンナー、テストランナー、JSランタイムが1つに統合。
- 他のツールチェーン(Webpack, Vite, Jest, etc.)を組み合わせずにシンプルに構築可能。
- TypeScriptがデフォルト対応
- tsconfigの設定なしでもTypeScriptがそのまま動く。
🔥 Honoのメリット
- 超軽量 & 高速
- 世界最速クラスのWebフレームワーク。
- Rustベースの「itty-router」にインスパイアされている。
- ランタイムに依存しない(Node.js, Bun, Cloudflare Workers, Deno, Vercel Functionsなどに対応)。
- ミニマルで分かりやすいAPI
- ExpressやKoaのような書き心地。
- 学習コストが非常に低く、コードが読みやすい。
- エッジ対応が簡単
- Cloudflare WorkersやVercel Edge Functionsでの使用が容易。
- 低レイテンシなAPI開発に向いている。
Bun+Honoのメリット
特徴 | 内容 |
---|---|
🚀 超高速な開発 & 実行環境 | 開発・ビルド・実行すべてが速く、ストレスフリー。 |
🧼 シンプルな構成 | 複雑な設定不要。小規模から中規模のプロジェクトならこれだけでOK。 |
🔧 モダンなツールチェーン | TypeScriptが自然に使え、不要な設定も減らせる。 |
🌐 マルチランタイム対応 | 将来的にCloudflare WorkersやVercel Functionsへの移行もスムーズ。 |
📦 依存ライブラリが少ない | 脆弱性管理や保守コストも削減できる。 |
実装
まずローカルの開発環境にBunをインストールする
// macOS、Linux
curl -fsSL https://bun.sh/install | bash
// WindowsOS
powershell -c "irm bun.sh/install.ps1 | iex"
Honoのインストール
mkdir honoApp && cd honoApp
bun create hono myapp
Dockerfile、docker-compose.ymlをそれぞれ作成
また、Prismaを自動でインストールしたいので、shファイルに記載しコンテナ立ち上げ時実行する。
Dockerfile
# Bun公式イメージを使用
FROM oven/bun:latest
# 作業ディレクトリ作成
WORKDIR /app
# プロジェクトファイルをコピー
COPY . .
# 依存関係のインストール
RUN cd /app/myApp&& bun install
# ワークディレクトリを切り替え
WORKDIR /app/myApp
ENTRYPOINT ["./install-lib.sh"]
# アプリ起動
CMD ["bun", "run", "dev"]
docker-compose.yml
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- .:/app
environment:
- NODE_ENV=development
install-lib.sh
#!/bin/bash
# Prismaのインストール
bun add -d prisma
# PrismaClientのインストール
bun add @prisma/client
# そのスクリプトに渡された引数を "置き換えて" 実行する
#ここでは、bun run devが実行される
exec "$@"
コンテナが立ち上がったら、http://localhost:3000にアクセスする。
「Hello Hono!」が出ていれば成功
Supabaseに接続
- Supabaseで新しいプロジェクトを作成し、パスワードを控えておく
- プロジェクトの画面で Connect > ORMs を選択し、DATABASE_URLをコピー
- Honoのプロジェクトルートに.envを作成し、DATABASE_URLをペースト、[Password]部分を控えておいたパスワードに変更
- bunx prisma initでPrismaが初期化されschema.prismaが作成される。datasource dbの中身を下記のようにしておく。(Supbaseはpostgresqlを使っているため、Providerに注意)また、接続テストのため、Userモデルも作成しておく(後でかえてもよい)
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(autoincrement())
email String @unique
name String
}
- bunx prisma migrate devを実行しmigrateする
- bunx prisma generateを実行する
参考:
BunとPrisma
BunとHono
Honoのベストプラクティス (エンドポイントの分け方など)