Bunでコードを書いていて、保存するたびに走る型チェックの数秒を待つのが気になってきた。そんな人に向けて、Bunの開発元は2026年10月10日、ランタイム本体に型チェッカーを組み込んだ。コマンドはbun check。公式ブログによると、TypeScript公式の最新版より最大6.4倍速く動く。
TypeScript公式の最新版は、すでに2026年7月にコンパイラの中身をGo言語で書き直し、旧版より8〜12倍速くなったばかりだった。その「もう十分速いはず」の版に対して、Bunはどうやってさらに速くしたのか。そこまで速くして、判定の正確さは犠牲になっていないのかも気になるところだ。
何が変わったのか
bun checkは、Bunのランタイムに直接組み込まれた型チェッカーだ。公式ブログは「TypeScript 7.0.2の適合性テストを100%通過する、非常に高速なTypeScriptの型チェッカー」と紹介している。
それまでBunでTypeScriptの型チェックをするには、typescriptパッケージを別途インストールし、tscコマンドを呼び出す必要があった。bun checkはBun自身に組み込まれているため、この追加インストールが要らない。tsconfig.jsonをそのまま読み込み、tscと同じエラーを報告する仕組みだ。
Bun v1.4.3(2026-10-10リリース)から、次の3つの形で使える。
bun run --check: 型チェックをしてから実行する。エラーがあればコードは動かないbun test --check: テストファイルとそのimport先を型チェックし、エラーがあればテストを実行しないbun build --check: 型チェックをしてからバンドルする。エラー時は何も書き出さない
保存のたびに待っていたのは、まさにこの型チェックの時間だ。それが具体的にどれだけ縮むのかが気になる。
なぜここまで速くなるのか
「TypeScript公式はもう十分速くしたはず」という予想と、ここからのBunの数字は噛み合わない。まずは1つのプロジェクトで、どれだけ差が出ているかを見てほしい。
VS Codeのソースコード(src、9,795ファイル)を対象にした計測では、TypeScript公式のtsc 7.0.2が5.98秒かかる。bun checkは1.24秒で終わる。約4.8倍の差だ。メモリ使用量もtscの7.97GBに対しbun checkは2.14GBと、約3.7倍少ない。この計測は16コアのApple silicon Macで行われた。公式ブログによると、計測した8つのプロジェクト全体では速度が3.0倍から6.4倍、メモリが2.2倍から4.9倍の範囲でこの傾向になる。
ここで引っかかるのが、この5.98秒という数字自体が、すでに相当速い版だという点だ。Microsoft公式の発表によれば、TypeScript 7.0は2026年7月8日に一般提供が始まったコンパイラのGo移植版だ。従来のJavaScript実装(TypeScript 6)に対して、全体ビルドで通常8〜12倍速いとされる。移植計画が発表された時点のベンチマークでは、VS Codeリポジトリ全体(約150万行)の型チェックが77.8秒から7.5秒に縮む例も示されていた。この計測は対象範囲がBunの計測とは異なるため、倍率をそのまま合算はしない。
つまり、旧JavaScript実装からGo移植版への切り替えで一度速くなり、そのGo移植版に対してBunがさらに3〜6倍速くしたことになる。Bunが速くしたのは、TypeScript公式がまだ高速化しきれていなかった部分ではない。すでに高速化された公式の実装(typescript-go)そのものを土台に、Bunの実行環境に合わせてさらに移植し直した結果だ。別実装による高速化である以上、本家と判定がずれていないかが次に気になる。
本当に同じ結果になるのか
速さだけなら、エラーの見落としと引き換えでも達成できてしまう。bun checkはTypeScript公式の実装を一から移植し直した、いわば独立した再実装だ。本家のtscと判定がずれていないかは、確かめる以外に知りようがない。
公式ブログは、次の6種類の検証を行ったと報告している。
| 検証の種類 | 規模 | 結果 |
|---|---|---|
| TypeScript 7.0.2の適合性テスト | 51,210件 | 100%通過 |
| 実在する公開OSSプロジェクトとの比較 | 72プロジェクト・1,103設定、エラー286,267件 | 1,102設定が完全一致。不一致はエラー1件のみ |
| 11種のコンパイラオプションの比較 | 752設定 | 751設定が一致。不一致12件はすべてstrictオフの設定 |
| ファザーによる関数の比較 | 136,235関数 | 不一致0件 |
| 大規模オフライン実行 | 3,032,182プログラム | 不一致191件(うち162件は宣言が自分自身を参照するコード) |
| 変異テスト(Effectのソースを改変) | 913回の改変 | tscの検出2,925件に対し、見落とし・誤検出とも0件 |
28万6,267件のエラーを比較して、本家と判定がずれたのはたった1件だった。その1件も、vuejs/coreというプロジェクトで起きた特殊なケースだと特定されている。ファイルの読み込み順序(global.tsがmodel.tsより前にあるかどうか)に依存する場合だけ発生する。見つかった差異はBun自身のバグとして扱われ、報告を受け付けている段階にある。
この精度の高さが、今回のbun checkが単なる「速いだけの別物」ではなく、既存のTypeScript開発をそのまま引き継げる理由になっている。
置き換わるのは型チェックの部分だけ
bun checkが行うのは型チェックだけだ。JavaScriptや.d.tsファイルは出力しない。言語サーバーも持たないため、エディタ上の補完やジャンプには引き続き本家TypeScriptの拡張機能が要る。置き換わるのは、保存のたびに走る型チェックの部分に限られる。
まとめ
Bun v1.4.3(2026-10-10)に追加されたbun checkは、typescriptパッケージなしで型チェックができる機能だ。bun run --check・bun test --check・bun build --checkの形で使える。比較対象のTypeScript公式自身も、2026年7月にGo移植で旧版より8〜12倍速くなったばかりだった。それでもbun checkはそのさらに先を行き、最大6.4倍速くメモリも最大4.9分の1で動く。
それでいて、72の実プロジェクト・28万件超のエラーを本家tscと突き合わせた検証では、不一致はわずか1件だった。独立した再実装が、速さと精度を両方とも手放していないことになる。エディタの型補完までは代わらないという限界はあるが、保存のたびに待つ時間を縮めたい人には、アップグレードするだけで届く変更だ。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…