簡単な紹介
BunはJavaScriptのAll-in-Oneなツールキットです。
以下のような特徴があります。
- ランタイムが非常に高速
- TypeScriptをサポート
- 高速なパッケージマネージャが付属している
- テストランナーなど、ほかにも便利なものが付属している
- Node.js互換
公式サイトはこちらです。
インストール
Linux & MacOSでは、コマンド一つでインストールできます。
curl -fsSL https://bun.sh/install | bash
詳しくはこちら。
Homebrewを使う場合
BunはHomebrewでも公開されているので、Macユーザーならここからインストールできます。
brew install oven-sh/bun
Hello World!
まずはコードを用意します。
console.log("Hello World!");
これを実行するにはbun
コマンドを使います。
bun ファイルへのパス
で実行できます。
bun index.js
# Hello World!
基本的なコマンド
私的によく使うと思うコマンドをざっくり紹介します。
確認
バージョン
バージョンはbun -v
or bun --version
で見れます。
ヘルプ
--help
オプションをつけると、コマンドのヘルプを見ることができます。
bun --help
からコマンド一覧も見れます。
実行
JavaScriptのコードの実行は、bun
もしくはbun run
コマンドでできます。
ファイルパスを指定して実行
bun パス
# or
bun run パス
タスクを実行
タスク=package.json
のscript
に書かれているコマンドも、先ほどと同じ方法で実行できます。
例えばpackage.json
を以下のように定義します。
{
// ...
"scripts": {
"dev": "bun src/index.js"
}
}
このdev
は、ファイルパスを指定するときと同じコマンドで実行できます。
bun run dev
# or
bun dev
初期化
初期化
bun init
コマンドを使うと簡単にプロジェクトを初期化できます。
bun init
ちなみに、私はそんなに使ってません。
ただJavaScriptを実行するだけなら初期化する必要はなく、ファイルを作ってそのまま実行できます。
必要になるのは外部のライブラリを使う時でしょうか。
しかし、フレームワークなどに乗っかって開発する場合、すでにテンプレートが用意されていることが多いです。
そのため後述のbun create
のほうが使う場面は多そうです。
テンプレートから初期化
初期化の方法には、ほかにもcreate
コマンドがあります。
これはNPMやGitHub、ローカルにあるテンプレートからプロジェクトを作成するコマンドです。
bun create テンプレート
もしあなたがViteのプロジェクトを初期化するなら、bun create vite
コマンドが使えます。
パッケージ
Bunはパッケージマネージャを兼ね備えています。
これは非常に高速なので、1からプロジェクトを作るなら、速度目的でYarnなどを導入する必要はないかもしれません。
add
プロジェクトにパッケージ(NPMパッケージ or ローカル)を追加します。
例えばreact
パッケージを追加してみます。
bun add --dev react
このコマンドでは以下のことをやってくれます。
-
package.json
のdependencies
にパッケージを追加-
--dev
オプション: パッケージをdevDependencies
に追加
-
- 実際の
node_modules
にパッケージを追加 - ロックファイル(
bun.lockb
)にパッケージを追加
install
package.json
に書かれているパッケージをインストールします。
bun install
これは非常に高速です。
それを示すベンチマークはこちらで公開されています。
テスト
Bunにはテストランナーが付属しています。
テストコードはbun:test
パッケージの関数を使うことで書けます。
以下はドキュメントから引用したテストコードのサンプルです。
import { expect, test } from "bun:test";
test("2 + 2", () => {
expect(2 + 2).toBe(4);
});
テストをTypeScriptで書く場合、型定義(@types/bun
パッケージ)をインストールする必要があります。
追加は以下のコマンドでできます。
bun add --dev @types/bun
全てのテストはこちらのコマンドで実行できます。
bun test
なお、Bunにテストランナーが付属しているからといって、他のテストランナーが使えないというわけではありません。
BunにはNode.js互換があるので、JestやVitestなども動くと思います。たぶん。
(Bunはたまに未実装な機能がある)