Litmus — 話題のニュースを、深く読み解く。 RSS
ソフトウェア

Bun、型チェッカーをTypeScript公式より最大6.4倍速く搭載

Bun v1.4.3が型チェッカー「bun check」を追加。TypeScript公式の最新版より最大6.4倍速く、72プロジェクト・28万件超のエラー比較でも不一致はわずか1件という精度を確認した。

ノートパソコンの画面に表示されたプログラムのコード

イメージ写真 記事の内容を撮影したものではありません。Photo by Daniil Komov on Pexels

この記事には Amazon アソシエイトのリンクを含みます。

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つのプロジェクトで、どれだけ差が出ているかを見てほしい。

0123456秒tsc 7.0.2(TypeScript公式): 5.98bun check: 1.245.981.24tsc 7.0.2(TypeScript公式)bun check

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件だった。独立した再実装が、速さと精度を両方とも手放していないことになる。エディタの型補完までは代わらないという限界はあるが、保存のたびに待つ時間を縮めたい人には、アップグレードするだけで届く変更だ。

この記事の先を読む本を探す

特定の本を勧めるものではありません。検索結果から、いまの版と目次を確かめて選んでください。

コメント

気づきや感想をどうぞ

記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。

コメントを読み込んでいます…

    ほかの記事

    最新の記事 →