Back

BunでTypeScriptアプリをセットアップする

BunでTypeScriptアプリをセットアップする

Node.jsでTypeScriptプロジェクトを管理してきた方なら、その煩雑さをご存知でしょう。ts-nodetsxをインストールし、ビルドステップを設定し、スクリプトを配線して、ようやくコードを書き始められます。Bunは、このオーバーヘッドの大部分を取り除きます。BunはTypeScriptファイルを直接実行できる最新のJavaScriptランタイムで、組み込みのパッケージマネージャーを搭載し、タスクランナーとしても機能します—すべてが1つのツールに統合されています。このガイドでは、Bun TypeScriptプロジェクトの完全なセットアップ手順を説明し、ゼロからTypeScriptの実行まで数分で到達できるようにします。

重要なポイント

  • Bunは実行時にTypeScriptをネイティブにトランスパイルするため、ts-nodetsx、または個別のビルドステップが不要です。
  • 単一のbun initコマンドで、tsconfig.jsonとBunロックファイル(bun.lock)を含む、すぐに使えるTypeScriptプロジェクトが生成されます。
  • Bunのトランスパイラは速度のために型アノテーションを削除しますが、型チェックは実行しません—型エラーを検出するにはtsc --noEmitを別途実行してください。
  • tsconfig.json"moduleResolution": "bundler"を設定すると、TypeScriptのモジュール解決がBunの内部動作と一致します。

Bunとは何か、なぜTypeScriptに使用するのか?

BunはJavaScriptCore上に構築され、Zigで記述された高速なJavaScriptランタイムです。TypeScript開発において際立っているのは、.tsおよび.tsxファイルを実行時にネイティブにトランスパイルすることです—個別のビルドステップは不要です。Node.js + ts-nodeの組み合わせとは異なり、Bunはトランスパイルを内部で処理するため、起動時間が顕著に速く、開発ワークフローがよりシンプルになります。

ランタイム以外にも、Bunは複数のツールを一度に置き換えます:

  • ランタイム – TypeScriptとJavaScriptを直接実行
  • パッケージマネージャー – npm、yarn、pnpmの高速な代替
  • タスクランナーpackage.jsonで定義されたスクリプトを実行

新しいBun TypeScriptプロジェクトの作成

まずBunをインストールし、次に新しいプロジェクトを生成します:

bun init

Bunはエントリーポイントを尋ねてきます。整理された状態を保つためにsrc/index.tsを使用してください:

entry point (index.ts): src/index.ts

これにより、最小限のプロジェクト構造が生成されます:

my-app/
├── src/
│   └── index.ts
├── package.json
├── tsconfig.json
└── bun.lock

bun.lockファイルは、Bunのパッケージマネージャーが一貫したインストールを保証するために使用する依存関係ロックファイルです。

Bun型定義のインストール

プロジェクトに@types/bunがまだ存在しない場合は、Bun固有のAPIに対する適切なIntelliSenseと型チェックを取得するために、開発依存関係としてインストールしてください:

bun add -d @types/bun

これにより、Bun.serve()Bun.file()bun:sqliteなどのBunの組み込みAPIに型付きでアクセスできるようになります。詳細については、公式のBun TypeScriptドキュメントを参照してください。

Bunプロジェクト向けの推奨tsconfig.json

Bunはtsconfig.jsonなしでも動作しますが、IDEサポートと型チェックのために設定ファイルが必要です。Bun TypeScript設定の重要な設定は"moduleResolution": "bundler"で、これはBunが内部的にモジュールを解決する方法と一致します。

含めるべきその他の重要なオプション:

  • "target": "ESNext""lib": ["ESNext"] — 最新のJavaScript機能を使用
  • "strict": true — エラーを早期に検出
  • "noEmit": true — Bunが実行を処理するため、コンパイル済み出力は不要
  • "verbatimModuleSyntax": true — クリーンな型専用インポートを保証
  • "allowImportingTsExtensions": true — 拡張子付きで.tsファイルをインポート可能に

完全な例を以下に示します:

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "lib": ["ESNext"],
    "strict": true,
    "noEmit": true,
    "verbatimModuleSyntax": true,
    "allowImportingTsExtensions": true,
    "skipLibCheck": true
  },
  "include": ["src"]
}

⚠️ 重要: Bunのトランスパイラは速度のために型アノテーションを削除します—実行時に完全な型チェックは実行しません。開発中またはCIで型エラーを検出するには、bunx tsc --noEmitを別途実行してください。

TypeScriptファイルの実行とスクリプト管理

BunでTypeScriptファイルを実行するのは簡単です:

bun run src/index.ts

ファイル変更時の自動再起動を伴う開発には、ウォッチモードを使用します:

bun --watch src/index.ts

一般的なワークフローをpackage.jsonのスクリプトに追加します:

{
  "scripts": {
    "dev": "bun --watch src/index.ts",
    "start": "bun run src/index.ts",
    "typecheck": "bunx tsc --noEmit"
  }
}

Bunはこれらのスクリプトを直接実行します—追加のタスクランナーは不要です。

Bunがカバーするその他の機能

Bun TypeScriptプロジェクトのセットアップが完了すると、依存関係を追加することなく、いくつかの組み込み機能にアクセスできます:

  • テストランナーbun testは標準でJest互換のAPIをサポート
  • バンドラーbun buildはフロントエンドアセットのバンドリングを処理
  • SQLitebun:sqliteはネイティブで型付きのデータベースインターフェースを提供

これらは基本的なセットアップには必須ではありませんが、必要になった瞬間に利用可能です。全機能セットは公式のBunドキュメントで確認できます。

まとめ

BunでTypeScriptを使用する際の主な変化は、ランタイムがトランスパイルを処理し、tscが型安全性を処理するという、それらが別々の関心事であることを受け入れることです。これが理解できれば、ワークフローはクリーンです:プロジェクトを初期化し、必要に応じて@types/bunをインストールし、バンドラースタイルのモジュール解決でtsconfig.jsonを設定し、TypeScriptファイルを直接実行します。維持すべきビルドパイプラインも、インストールすべき追加ツールもありません。

よくある質問

いいえ。Bunは速度のためにトランスパイル中に型アノテーションを削除しますが、TypeScriptの型チェッカーは実行しません。型エラーが本番環境に到達する前に検出するには、開発中またはCIパイプラインの一部として、noEmitフラグを付けてtscを別途実行する必要があります。

はい。Bunのパッケージマネージャーはnpmレジストリと完全に互換性があります。npm installと同じように、bun addでパッケージをインストールします。Node.jsで動作するほとんどのパッケージはBunでも動作しますが、Node固有のネイティブアドオンに依存するパッケージには互換性の制限がある場合があります。

Bunは2023年9月にバージョン1.0に到達し、それ以降定期的に安定版リリースを続けています。多くのチームが本番環境で使用していますが、特定の依存関係とワークロードをテストする必要があります。Node.js APIの互換性は広範ですが、まだ完全ではないため、プロジェクトが依存するNode固有のAPIを検証してください。

Bunは一般的に、ts-nodeやtsxを使用したNode.jsよりも高速に起動します。これは、個別のコンパイルステップなしでTypeScriptをネイティブにトランスパイルするためです。パッケージのインストールも、最適化されたリゾルバーとインストールシステムにより大幅に高速です。実際の実行時パフォーマンスはワークロードによって異なりますが、起動時間の改善は一貫して顕著です。

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay