TypeScript を毎日書いている私にとって、この1年でいちばん楽しみに待っていた発表がついに来ました。Microsoft が TypeScript 7.0 を正式に公開し、コンパイラ全体を Go でネイティブ実装し直した「10倍速い TypeScript」が手元で使えるようになったんですよね。単なるバージョンアップではなく、道具そのものが別物になるレベルの節目だと思っています。

なぜ Go でネイティブ移植したのか

これまでの TypeScript コンパイラは TypeScript 自身で書かれていて、コードベースが大きくなればなるほど tsc の起動や型チェックの待ち時間が開発体験の重石になってきました。VS Code のような数万ファイル規模のプロジェクトでは、初回ビルドに2分以上かかることもあり、CI では毎回同じ時間を待たされるのが当たり前だったんです。

Microsoft の TypeScript チームは去年、この重石を根本から外すために「JavaScript を捨てて Go でイチから書き直す」という決断をしました。ロジックは既存実装に忠実に写し取りつつ、共有メモリのマルチスレッドとネイティブコード実行を最大限に活かす、かなり大胆なアプローチです。

ビルドが本当に10倍速い

公表されたベンチマークは誇張ではないんですよね。vscode リポジトリのフルビルドが125.7秒から10.6秒(11.9倍)、sentry が139.8秒から15.7秒(8.9倍)、Playwright や tldraw のような中規模プロジェクトも8倍前後の高速化が確認されています。同時にメモリ使用量も1〜2割減っていて、単に速いだけでなく軽くもなっているのが印象的でした。

エディタとCI体験の激変

Slack のエンジニアが公表している数字が個人的にはいちばん響きました。CIの型チェック時間が7分30秒から1分15秒になり、マージキュー全体の待ち時間が40%短縮されたそうです。Language Server も刷新されていて、失敗したLSPコマンドが80%減、クラッシュが60%減と、体感の安定感も別物になっているようです。Canva では最初のエラー表示までが58秒から4.8秒になったと報告されています。

並列度を自分で調整できるようになった

新しい --checkers と --builders フラグで、型チェッカーとプロジェクト参照ビルダーの並列数を細かく制御できるようになりました。CPUコアが多いマシンなら --checkers 8 でさらに16倍近くまで伸びますし、逆にCIランナーのようにメモリの厳しい環境では --checkers 1 で単一スレッドに落として安定運用できます。機械に合わせて調整できる余地が残されている設計は、実務でありがたいなと思います。

移行時の注意点

7.0 は6.0の設定を厳格に引き継ぐバージョンなので、まだ6.0に上げていないプロジェクトはまずそちらを経由する必要があります。target: es5、moduleResolution: node、baseUrl などはハードエラー化していて、旧設定のままだとビルドが通りません。あと現時点で TypeScript 7.0 は API を公開しておらず、Vue、Astro、Svelte、Angular のテンプレート型チェックのようにプログラマティックAPIに依存しているツールは、当面6.0との併用が必要です。@typescript/typescript6 という互換パッケージで共存できる仕組みが用意されているのは救いですね。

まとめ

コンパイラを別言語で書き直すというのは、なかなか腹の据わった決断だと思うんですよね。しかもそれを「テストで数字を出しながら、大企業と1年かけて実運用検証したうえで出す」という進め方が Microsoft らしくて、安心して踏み込めます。TypeScriptを書いている人には、まず tsc の待ち時間を計測してから7.0を入れてもう一度計測してみてほしいです。数字を見た瞬間に、この移植の意味がすっきり腑に落ちるはずです。

← ブログ一覧に戻る