TypeScript 7が登場。Goベースのコンパイラにより、型チェックの時間は従来の10分の1に短縮され、メモリ使用量は最大4分の1まで削減された。この変化は、開発者がVS Codeで「保存」を押した瞬間に実感できるものだ。

言語サービスのコアをGoで書き換えるというMicrosoftの決定は、TypeScriptのインクリメンタルチェッカーが大規模なモノレポで停滞するという、長年の不満を受けたものである。パースと型チェックという重い処理を、長らく続いてきたJavaScript実装から切り離すことで、チームは言語レベルでの並列化を実現し、Node.jsランタイムのオーバーヘッドを削減した。

なぜ書き換えが重要なのか

Next.jsやNuxtなどのフレームワークで構築されたモダンなウェブアプリは、日常的に数千ものモジュールを取り込む。そのような環境では、最初の型エラーが表示されるまでの時間が、編集・コンパイル・デバッグのループを支配してしまうことがある。新しいコンパイラは、VS Codeで最初のエラーを見つけるまでの時間を17.5秒から1.3秒未満へと短縮し、そのエディタ単体で11.9倍の高速化を実現した。さまざまなプロジェクトによる独立したベンチマークでも、同様の成果が確認されている。

  • VS Code: 11.9倍高速
  • Sentry: 8.9倍高速
  • Bluesky: 8.7倍高速
  • Playwright: 8.7倍高速
  • Tldraw: 7.7倍高速

メモリ使用量も改善している。VS CodeのTypeScriptサーバーのRAM消費量は18%減少し、Blueskyでは26%減、Tldrawでは15%の削減が見られる。

これらの数値は、現実世界の生産性に直結する。数秒おきにファイルを保存する開発者は、これまでより10倍速くイテレーションを回せるようになり、大規模なコードベースにおける日々の摩擦を劇的に軽減できる。

きめ細かな制御のための新しい設定項目

Goコンパイラは、チームがハードウェアやワークフローに合わせてパフォーマンスを調整できる一連のコマンドラインフラグを導入している。

  • 並列処理 (--checkers および --builders) は、パースと型チェックを並行して実行し、速度とメモリ負荷のバランスをとることを可能にする。
  • シングルスレッドモード (--singleThreaded) は、デバッグを簡素化し、リソースの少ない環境に適している。
  • スケーラブルなワーカー により、型チェック用のワーカーをビルダー用のワーカーとは独立してスケールさせることができ、カスタムビルドパイプラインの構築が可能になる。
  • 改善されたウォッチモード は、従来のNodeベースのファイルスキャナーをGoのファイルウォッチャーに置き換え、巨大な node_modules ツリーに対するコストの高い再帰的なスキャンを排除する。

これらのオプションにより、大規模な組織は既存のコードを刷新することなく、CIパイプラインからさらなるパフォーマンスを引き出すことが可能になる。

リスクと反発

コアコンポーネントを異なる言語で書き換えることは、論争を伴わないわけではない。一部の開発者は、Goへの移行によって、成熟したJavaScript実装ですでに解消されている新しいバグや互換性の問題が発生することを懸念している。また、この変更によってTypeScriptツールチェーンにGoランタイムの依存関係が追加されるため、Node.jsに強く依存している環境では複雑化を招く可能性がある。早期採用者は、独自のプラグインや言語サーバー拡張機能が引き続き変更なしで動作することを確認する必要があるだろう。

今後の注目点

MicrosoftはパブリックリリースにおいてGoベースのコンパイラをデフォルトに設定したが、従来のJavaScriptエンジンもフォールバックとして引き続き利用可能である。主要なIDEやCIサービスにおける採用率を監視することで、パフォーマンスの向上が移行に伴う摩擦を上回るかどうかが明らかになるだろう。さらに、新しいフラグに対するコミュニティのフィードバックがコンパイラの進化の方向性を決めることになる。もし開発者が並列オプションの調整を難しいと感じるようであれば、Microsoftはより高レベルなプリセットを導入する可能性がある。

要点: TypeScript 7のGoによる書き換えは、最大10倍の高速な型チェックと顕著なメモリ節約を実現する。エコシステムが新しいランタイムにスムーズに適応できれば、大規模なJavaScript開発を瞬時にキビキビとしたものに変える転換点となるだろう。