Bun 1.0 とは?JavaScript開発に役立つ機能を解説
thumb_javascriptbuntoha_01
Bun 1.0 とは?JavaScript開発に役立つ機能を解説
アンドエンジニア編集部
2023.10.28
この記事でわかること
Bun 1.0が公開され、Windows版の実験的なネイティブビルドがリリースされた
BunはNode.jsとの互換性を目指して設計されている
BunはJavaScriptランタイム・パッケージマネージャー・テストランナー・バンドラーなどをオールインワンに提供している

Bun 1.0が公開

img_javascriptbuntoha_01

2023年9月9日(日本時間)、JavaScriptおよびTypeScriptランタイムである「Bun 1.0」が正式に公開されました。

BunはJavaScriptとTypeScriptを実行、構築、テスト、デバッグするための高速なオールインワンツールキットで、今回の安定版リリースにより、開発のさらなる効率化が期待できます。

BunはJavaScriptとTypeScriptの実行、ビルド、テスト、デバッグを容易にします。開発者たちはこれによって、ワークフローの効率化やリソース制約下でのスムーズな本番コードの実行を期待できます。

【参考】:Bun 1.0

TypeScriptはJavaScriptの上位互換?違いは開発規模や機能面にアリ

Windows用では実験的なネイティブビルドを提供

従来のBunではmacOSとLinux用のネイティブビルドが提供されており、Windowsの場合はWindows Subsystem for Linuxが必要でした。今回のBun 1.0ではWindows版の実験的なネイティブビルドがリリースされています。

ただし、Windows版はまだ実験的な段階で、JavaScriptランタイムのみがサポートされており、パッケージマネージャ・テストランナー・バンドラーは安定するまで無効化され、パフォーマンスもまだ最適化されていません。

開発チームは開発ブログで今後数週間でWindowsへのサポートを急いで改善する予定であると述べています。

Bunとは

img_javascriptbuntoha_02

ここでは、JavaScript開発環境においてBunが登場した背景や、その開発目標について説明します。

Bunが登場した背景とは

JavaScriptの開発環境には、Node.jsやDenoなどのランタイムなどを始めとして多くの優れたツールがあります。

しかし、Bunの開発者はその一方で、数多くのノードモジュールや複数の設定ファイル・バンドラーのプラグインなどの利用が、開発プロセスを複雑にしている面もあることを指摘しています。

Bunはこの状況を改善するため、JavaScriptのメリットを残しながら、複雑さを排除してより直感的にコードを実行できることを目的に開発されています。

【参考】:Youtube | Bun 1.0 is here

Node.jsとは?JavaScriptとの違いや使い所を解説

Bunの開発目標とは

Bunはその開発目標として、動作のスピード・簡潔なAPI・オールインワンのツールキットであることの3点を掲げています。

■スピード Bunがまず目指したのはスピードです。Bunはパフォーマンス重視のJavaScriptエンジンであるJavaScriptCoreを拡張することで、素早く起動し、高速な実行を可能にしています。

■簡潔なAPI BunはHTTPサーバーの起動やファイルの書き込みなど、一般的なタスクを実行するために最適化され、必要最低限の要素で構成されたAPIを用意しています。

■オールインワンのツールキット Bunは、パッケージマネージャー・テストランナー・バンドラーなど、JavaScriptアプリを構築するために十分なツールキットを提供します。開発者はこれらのツールを利用することで、効率的な開発が可能です。

【参考】:Bun — A fast all-in-one JavaScript runtime

Bunの特徴

img_javascriptbuntoha_03

プログラミング言語のZigで実装されているBunは、Node.jsやDenoなどと同様のJavaScriptランタイムの役割を持ちますが、他にもJavaScript/TypeScriptを使用してアプリを構築するための統合的なツールキットとしての数々の特徴を持っています。

Node.jsとの互換性を目指している

Bunは広く使用されているJavaScriptランタイムであるNode.jsとの完全な互換性を目指して設定されています。

既存のNode.jsアプリケーションとnpmパッケージは、Bunでそのまま動作が可能で、Node.jsのグローバル変数であるprocess・Bufferや、path・fs・httpなどのモジュール類もサポートしています。

【参考】:Github oven-sh/bun 【参考】:Node.jsの互換性

オールインワンツールである

Bunは、Node.jsにおけるパッケージ管理システムであるnpmやモジュールバンドラーなどの機能が初めから含まれています。

これらのツールは、ほとんど変更をすることなく既存のNode.jsプロジェクトで使用することができます。フロントエンドフレームワークのNext.jsを動作させることも可能です。

ESMとCommonJSをサポート

Node.jsでは従来からモジュールシステムとしてCommonJSを使うことで、別のファイルや外部ライブラリのコードを使うことができます。

近年はES Modules(ESM)の利用が増加していますが、npm上の多くのパッケージはいまだにCommonJSを必要としています。

BunはESMとCommonJSをどちらもサポートしており、ESMのようにimportやexoportが使用できる一方で、CommonJS同様requireやdirnameも使用することができます。

Web標準APIを実装

BunはfetchやWebsocket、ReadableStreamなどのWeb標準APIを実装しています。Safari用に開発されたJavaScriptCore engineを使用しており、HeadersやURLなど一部のAPIはSafariに実装されているものを直接使用します。

ホットリロードが可能

--hotオプションを使うと、ファイルが変更されたときにアプリケーションをリロードするホットリロードを有効にすることができます。Bunのホットリロードは古いプロセスを終了せずにコードを再読み込みするため、HTTPやWebSocket接続が切断されません。

【参考】:Bun公式ブログ 【参考】:What is Bun? | Bun Docs

オールインワンツールであるBunが持つ機能とは

img_javascriptbuntoha_04

Bunは、JavaScriptランタイムとしてだけでなく、多くの機能を備えたオールインワンツールです。従来の様々なツールの役割をBunが担うことでJavaScript開発環境がより簡潔になり、開発効率が向上することが期待できます。

ランタイム

Bunは、ほとんどのNode.jsアプリケーションを実行することができます。 Expressや、軽量フレームワークのKoa、Cloudflare Wokersで使えるフレームワークであるHonoなどのサーバーフレームワークは問題なく動作します。

開発に必要な様々な機能が1通り揃っているフルスタックフレームワークも、広く使われているものはその多くが動作します。

また、Bunの特徴はそのスピードです。公式サイトでは、Node.jsの最大4倍早く起動することが示されています。他のランタイムがGoogeのJavaScriptエンジンであるV8を利用しているのに対し、BunはAppleのWebKitを使っていることをその理由として挙げています。

【参考】:Bun is a JavaScript runtime

WebKitとは?HTMLレンダリングエンジンの役割や特徴を解説!

パッケージマネージャー

Bunはnpm互換のパッケージマネージャー機能も備えています。例えば「npm install」を「bun install」とするなど、npmを使うようにBunを使用することができます。

また、インストールのスピードの速さもnpm・yarn・pnpmなどのパッケージマネージャーと比較して圧倒的に速いことが示されています。

【参考】:Install speeds

テストランナー

JavaScript開発環境では、テスティングフレームワークとして、シンプルで軽快な動作が特徴のJestが広く使用されています。

Bunは、Jestと互換性のあるテストモジュールが組み込まれており、JestやVite環境で利用できるユニットテストフレームワークのViestからの移行も簡単です。

テストランナーとしての動作もやはり高速です。Bun のマッチャーは高速なネイティブ コードで実装されていて、「Expect().toEqual()」の実行速度がJestやVitestよりも速いことが示されています。

【参考】:Bun is a test runner

バンドラー

Bunは、複数のJavaScriptファイルなどを1つにまとめるバンドラーの機能を有しています。Webpackを始めとして多くのバンドラーが存在しますが、Bunは高速な動作を特徴とするバンドラーのesbuildと互換性のあるプラグインAPIを提供しています。

【参考】:Bun is a bundler

Bunを導入してJavaScript開発のスピードアップを目指そう

img_javascriptbuntoha_05

ここまでBunが登場した背景やその特徴、オールインワンツールとして持つ多様な機能について解説してきました。

JavaScript開発環境には多くの有用なツールがありますが、その結果として生じた複雑さや不透明さを取り除き、開発者に快適な開発環境を提供することを目的としていることが分かったと思います。

また、あらゆる面でスピードを重視した設計となっており、JavaScript開発者の開発速度をさらに向上させてくれることが期待できます。

macOSとLinuxを使っていて、JavaScriptの開発効率を改善したい方は、1度Bunを試してみることをおすすめします。

また、今回、Bun 1.0の登場で、まだJavaScriptランタイムのみではありますがWindows環境にも対応を開始しました。今後、Windowsユーザの方もBunの動向に注目しておくと良いでしょう。

気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT