
2024.10
Node.jsからBunに移行してみた
つい先日、ポートフォリオとブログをNode.jsからBunに移行しました。
今回は、その移行作業についてまとめます。
Bunとは
JavaScriptのランタイムとしてNode.jsが主流ですが、Bunはその代わりとして登場しました。
BunはZig言語で書かれており、Node.jsよりも高速でメモリ効率が良いとされています。
2023年の9月に安定版がリリースされました。
移行した理由
1. マスコットキャラクターが可愛い
これが一番の理由です。
2. パフォーマンスは高いほうがいい
BunはZigという低レベルのプログラミング言語で実装されているため、Node.jsと比較して起動時間や実行速度が向上しているとされています。
3. オールインワン
バンドラ、トランスパイラ、タスクランナー、npmクライアントなどが組み込まれています。
4. Node.jsとの互換性
BunはNode.jsのAPIをサポートしているため、Node.jsのコードをそのままBunで実行できます。
5. 依存関係の削減
もともと入っている機能が多いため、外部の依存関係を減らせる可能性があります。
Node.jsの後発で上位互換という印象です。
ですが、登場して間もないため、安定性やサポートの面で不安が残りますね。
大きなプロジェクトではまだ慎重に扱いたいですが、今回はあくまでも個人プロジェクトです。
停止しても影響が小さいため、移行してみることにしました。
今回は、私が個人で運用していて、なおかつ停止しても影響が小さい以下のプロジェクトを移行しました。
- このブログサイト
- ポートフォリオサイト
どちらのサイトも既に移行済みです。
移行作業
1. Bunのインストール
curl -fsSL https://bun.sh/install | bash
2. Node.jsの依存関係を削除
rm -rf node_modules
3. 依存関係のインストール
bun install
or
bun i
4. プロジェクトのビルド
bun run build
詳細は公式ドキュメントをご確認ください。
これだけでも動きはしましたが、使っているフレームワークに応じて適宜対応が必要です。
今回移行したプロジェクトはどちらもAstroを使っています。
Bunをランタイムとして開発サーバーを起動するには、以下のコマンドを実行します。
bunx --bun astro dev
ビルドやプレビューも同様です。
bunx --bun astro build
bunx --bun astro preview
一度ビルドしてみて、問題がないか確認しましょう。
ここまで問題なさそうであれば、もうpackage-lock.jsonは不要です。
Bunの場合はbun.lockが生成されるため、package-lock.jsonは削除しても問題ありません。
私の場合はVercelにデプロイしているので、Vercel側のデプロイ時のコマンドも変更しました。
移行後初のnpm run devでは、ホットリロードが効かなくなる症状がありましたが、node_modulesを削除して再インストールすることで解決しました。
変更後の変化
これで移行作業は完了です。
早速ビルド時間を比較してみました。
Node.js
20:38:25 [build] 23 page(s) built in 2.60s 20:38:25 [build] Complete!Bun
20:37:57 [build] 23 page(s) built in 2.20s 20:37:57 [build] Complete!
とはいえ、体感できるほどの差はないですね。
何度か試しましたがBunのほうが0.4秒程度早い程度でした。
開発サーバーの起動速度やホットリロードの速度についても、特に差は感じられませんでした。
今後記事が増えていくと、その差が顕著になるかもしれません。
不具合が出ない限り、今後もBunを使っていこうと思います。
まとめ
今回はNode.jsからBunに移行する作業について書いてみました。
作業自体は簡単で、時間もそこまでかかりませんでした。
まだ恩恵を受けるほどの差は感じられませんが、新しい技術のキャッチアップとしては良い機会だったと思います。
新たな発見があれば、また記事にしていきたいと思います。
おすすめ記事
2025.04
日常生活で便利なアプリを作る【サーバ編】
N100で自宅サーバを構築し、Ubuntu Serverを導入。WireGuardでVPN環境も整えました。
プログラミング2024.05
MVC + Service + Repositoryを復習
LaravelでtoB向けの商品卸システムを構築する前に、MVC + Service + Repository構成の役割を復習しました。
プログラミング2024.09
実務経験3年で人生初の転職
実務経験3年で人生初の転職を経験した記録です。転職理由、企業選定基準、スカウト中心の活動結果、意思決定の学びをまとめました。
キャリア2024.06
SOLID原則を振り返る
SOLID原則の5つの考え方をTypeScriptのコード例とあわせて振り返り、設計で意識したいポイントを整理しました。
プログラミング2024.05
パキポディウムを育てる①
パキポディウムの種子を購入し、殺菌・加温・LED管理で発芽させるまでの手順と20日後の成長を記録しました。
園芸2024.10
石巻ハッカソン 2024に参加してきた
第11回 石巻ハッカソン 2024に参加し、チーム開発したブラウザゲームや3日間の様子をまとめました。
イベントプログラミング





