Skip to content

import Run from "/snippets/cli/run.mdx";

Bun ランタイムは、高速に起動し、高速に実行するように設計されています。

内部では、Bun は Apple が Safari 用に開発している JavaScriptCore エンジン を使用しています。ほとんどの場合、スタートアップと実行のパフォーマンスは、Node.js と Chromium ベースのブラウザで使用されている V8 よりも高速です。そのトランスパイラーとランタイムは、モダンで高性能な言語である Zig で書かれています。Linux では、これにより Node.js より 4 倍高速 なスタートアップ時間が実現されます。

コマンド時間
bun hello.js5.2ms
node hello.js25.1ms

このベンチマークは、Linux でシンプルな Hello World スクリプトを実行することに基づいています。

ファイルを実行する

ソースファイルを実行するには bun run を使用します。

bash
bun run index.js

Bun は TypeScript と JSX をすぐに使える状態でサポートしています。すべてのファイルは、実行前に Bun の高速ネイティブトランスパイラーによってオンザフライでトランスパイルされます。

bash
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsx

または、run キーワードを省略して「ネイキッド」コマンドを使用できます。これは同一に動作します。

bash
bun index.tsx
bun index.js

--watch

ウォッチモードでファイルを実行するには、--watch フラグを使用します。

bash
bun --watch run index.tsx

::: note bun run を使用する場合、--watch のような Bun フラグは bun の直後に配置してください。 :::

bash
bun --watch run dev # ✔️ こうする
bun run dev --watch # ❌ こうしない

コマンドの最後にあるフラグは無視され、"dev" スクリプト自体に渡されます。

package.json スクリプトを実行する

::: note npm run <script> または yarn <script> と比較 :::

sh
bun [bun フラグ] run <script> [スクリプトフラグ]

package.json には、シェルコマンドに対応する名前付き "scripts" を定義できます。

json
{
  // ... 他のフィールド
  "scripts": {
    "clean": "rm -rf dist && echo 'Done.'",
    "dev": "bun server.ts"
  }
}

これらのスクリプトを実行するには bun run <script> を使用します。

bash
bun run clean
rm -rf dist && echo 'Done.'
txt
Cleaning...
Done.

Bun はサブシェルでスクリプトコマンドを実行します。Linux と macOS では、次のシェルの順序でチェックし、最初に見つかったものを使用します:bashshzsh。Windows では、bash 風の構文と多くの一般的なコマンドをサポートするために bun shell を使用します。

NOTE

⚡️ Linux での `npm run` のスタートアップ時間は約 170ms です。Bun では `6ms` です。

スクリプトは、より短いコマンド bun <script> でも実行できますが、同じ名前の組み込み bun コマンドがある場合、組み込みコマンドが優先されます。この場合、パッケージスクリプトを実行するには、より明示的な bun run <script> コマンドを使用してください。

bash
bun run dev

利用可能なスクリプトのリストを表示するには、引数なしで bun run を実行します。

bash
bun run
txt
quickstart scripts:

 bun run clean
   rm -rf dist && echo 'Done.'

 bun run dev
   bun server.ts

2 scripts

Bun はライフサイクルフックを尊重します。例えば、bun run clean は定義されていれば precleanpostclean を実行します。pre<script> が失敗した場合、Bun はスクリプト自体を実行しません。

--bun

package.json スクリプトは、vitenext のようなローカルにインストールされた CLI を参照するのが一般的です。これらの CLI は、shebang でマークされた JavaScript ファイルであることが多く、node で実行することを示しています。

js
#!/usr/bin/env node

// do stuff

デフォルトでは、Bun はこの shebang を尊重し、スクリプトを node で実行します。ただし、--bun フラグを使用してこの動作を上書きできます。Node.js ベースの CLI の場合、これにより CLI が Node.js ではなく Bun で実行されます。

bash
bun run --bun vite

フィルタリング

複数のパッケージを含むモノレポでは、--filter 引数を使用して、複数のパッケージで一度にスクリプトを実行できます。

bun run --filter <name_pattern> <script> を使用して、<name_pattern> に一致する名前のすべてのパッケージで <script> を実行します。 例えば、foobarbaz という名前のパッケージを含むサブディレクトリがある場合、

bash
bun run --filter 'ba*' <script>

を実行すると、foo ではなく barbaz の両方で <script> が実行されます。

詳細については、filter のドキュメントページをご覧ください。

bun run - で stdin からコードをパイプする

bun run - を使用すると、JavaScript、TypeScript、TSX、または JSX を stdin から読み取り、一時ファイルに書き込まずに実行できます。

bash
echo "console.log('Hello')" | bun run -
txt
Hello

bun run - を使用してファイルを Bun にリダイレクトすることもできます。例えば、.js ファイルを .ts ファイルとして実行するには:

bash
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.js
txt
This is TypeScript!

便宜上、bun run - を使用する場合、すべてのコードは JSX サポート付きの TypeScript として扱われます。

bun run --console-depth

--console-depth フラグを使用して、コンソール出力のオブジェクト検査の深さを制御します。

bash
bun --console-depth 5 run index.tsx

これにより、console.log() 出力でネストされたオブジェクトがどの程度深く表示されるかが設定されます。デフォルトの深さは 2 です。高い値はより多くのネストされたプロパティを表示しますが、複雑なオブジェクトでは詳細な出力を生成する可能性があります。

ts
const nested = { a: { b: { c: { d: "deep" } } } };
console.log(nested);
// --console-depth 2(デフォルト)の場合:{ a: { b: [Object] } }
// --console-depth 4 の場合:{ a: { b: { c: { d: 'deep' } } } }

bun run --smol

メモリが制限された環境では、--smol フラグを使用して、パフォーマンスを犠牲にしてメモリ使用量を削減します。

bash
bun --smol run index.tsx

これにより、ガベージコレクターがより頻繁に実行されるようになり、実行が遅くなる可能性があります。ただし、メモリが制限された環境では役立ちます。Bun は、--smol フラグの有無にかかわらず、利用可能なメモリ(cgroups やその他のメモリ制限を考慮)に基づいてガベージコレクターのヒープサイズを自動的に調整するため、これは主にヒープサイズをよりゆっくりと成長させたい場合に役立ちます。

解決順序

絶対パスおよび ./ または .\\ で始まるパスは、常にソースファイルとして実行されます。bun run を使用しない限り、許可された拡張子を持つファイルを実行すると、package.json スクリプトよりもファイルが優先されます。

package.json スクリプトと同じ名前のファイルがある場合、bun run は package.json スクリプトを優先します。完全な解決順序は次のとおりです。

  1. package.json スクリプト、例:bun run build
  2. ソースファイル、例:bun run src/main.js
  3. プロジェクトパッケージからのバイナリ、例:bun add eslint && bun run eslint
  4. bun run のみ)システムコマンド、例:bun run ls

Bun by www.bunjs.com.cn 編集