今週、TypeScript 7がリリースされました。Go言語による全面的な書き換えが行われ、VS Codeのコンパイル時間は17.5秒から1.3秒未満へと大幅に短縮され、大規模プロジェクトにおけるメモリ使用量は最大26%削減されました。このスピードアップにより、日々のコーディングが瞬時に感じられるようになり、スタック全体で開発者の時間を数時間単位で節約できます。
Goによる書き換えが重要な理由
Microsoftは、長年続いてきたJavaScript/Nodeによる実装に代わり、コンパイラをGoで再構築しました。従来のコードベースはプロジェクトの規模拡大に伴い限界に達していました。パース(解析)と型チェックの処理が、CPUやRAMに制限のあるCIランナーの動作を遅延させていたためです。組み込みの並行処理機能を備えたコンパイル言語に切り替えたことで、新しいエンジンはパースと型チェックを並列で実行し、最初のエラーが表示されるまでの待ち時間を劇的に短縮します。
実環境におけるパフォーマンスの向上
いくつかの主要なコードベースによる初期ベンチマークが、その影響を物語っています。
- VS Code: コンパイル速度が11.9倍向上、メモリ使用量が18%削減。
- Sentry, Bluesky, Playwright, Tldraw: 7.7倍から8.9倍の高速化。
- Blueskyではメモリ使用量も26%減少。
1日に数十回も「run」や「watch」を実行する開発者は、エディタの動作がよりスムーズになり、CIの負荷も軽くなったことを実感できるでしょう。
新しいフラグによる制御
今回の書き換えにより、チームが速度とメモリのバランスを調整できるコマンドラインオプションが提供されます。
--checkersと--buildersは、パースと型チェックのワーカーを並行して起動し、マルチコアCPUを活用します。--singleThreadedは、すべての処理を単一のスレッドに強制します。これにより、レースコンディション(競合状態)が発生した際のデバッグの再現性が向上します。- 型チェックワーカーとビルダーワーカーを個別にスケーリングできるため、CIパイプラインにおいて各フェーズに必要な分だけのリソースを割り当てることが可能です。
- 刷新された
--watchモードは、GoベースのParcelポートを使用しています。これにより、膨大なnode_modulesツリーに対するコストの高いポーリングを廃止し、ファイル変更の検知を軽量に保ちます。
メリットを受ける層と、慎重になる層
Next.jsやNuxtのようにTypeScriptに大きく依存しているフロントエンドフレームワークは、リビルドの高速化とフィードバックループの短縮という恩恵を受けます。VS CodeやCursorなどのIDEはレスポンスが向上し、開発者がターミナルでのビルドに切り替えることなく、エディタ上で作業を継続しやすくなります。
今後の注目点
- 大規模なオープンソースプロジェクトやエンタープライズ向けのモノレポにおける採用率。
- 安定性や、潜在的なパフォーマンスの急激な低下(performance cliffs)に関するコミュニティのフィードバック。
- コンパイル時間のさらなる短縮やエラー診断の改善を目指す、Microsoftによるコンパイラ機能のアップデート。
