🤫

[bun]PrismaをBunで使えない

2025/03/15に公開

発生した問題

ランタイム、パッケージマネージャにYarnの3系を使用していたのだが、動作が遅かったりすることがあり、高速化のためにBunに切り替えたものの、bun run prisma generateを実行するとエラーになった。

環境

  • Docker version 27.5.1, build 9f9e405
  • Mac OS 15.3.1(24D70) Intel

結論、Bun単体でPrisma は使えない

以下のイシューで議論されているが、以下の通り。

Adding COPY --from=node:20 /usr/local/bin/node /usr/local/bin/node to the docker file solved the issue for now.

https://github.com/oven-sh/bun/issues/5320#issuecomment-2185189902

英語読めないが、node.jsをbunの環境に入れれば解消するとのこと。

解消方法として、bunとnode.jsが両方インストールされているImageimbios/bun-nodeを使用してインストールすると解消した。

# Set Bun and Node version
ARG BUN_VERSION=1.1.13
ARG NODE_VERSION=20.12.2
FROM imbios/bun-node:${BUN_VERSION}-${NODE_VERSION}-slim

imbios/bun-node Dockerイメージの解説

以下Claudeによる解説です。

imbios/bun-nodeは、BunとNode.jsという2つのJavaScriptランタイムを1つのDockerコンテナ内に統合したイメージです。

https://hub.docker.com/r/imbios/bun-node/

基本概念

  • Bun: 比較的新しいJavaScriptランタイム、パッケージマネージャー、およびバンドラーです。Node.jsより高速な実行を目指して設計されており、多くのシナリオでNode.jsの代替として使用できます。
  • Node.js: サーバーサイドでJavaScriptを実行するための、広く採用されている確立されたランタイムです。
  • Docker: アプリケーションを開発、配布、実行するためのコンテナ化プラットフォームです。

imbios/bun-nodeの主な用途

このイメージを使用することで、開発者は以下のことが可能になります:

  1. デュアルランタイム環境: 同じコンテナ内でBunとNode.jsの両方のアプリケーションを実行できます。
  2. 互換性テスト: BunでのコードがNode.jsでも正しく動作するか(またはその逆)を簡単に検証できます。
  3. 移行の容易さ: Node.jsプロジェクトからBunへの段階的な移行を支援します。
  4. ツールの相互運用: それぞれのランタイムに特有のツールやライブラリを活用できます。

利点

  • 開発効率の向上: 複数の環境を別々に設定する必要がなくなります。
  • リソース効率: 1つのコンテナで両方のランタイムを管理できます。
  • CI/CD互換性: 継続的インテグレーション・デリバリーのパイプラインで両方の環境をテストできます。

このDockerイメージは、JavaScriptの新しいエコシステム(Bun)と確立されたエコシステム(Node.js)の橋渡しをしたい開発者にとって特に有用です。

Discussion