テクノロジー

TypeScript 7.0、コンパイル速度が10倍に——Vue、Svelte、Angularは7.1まで待機

Adrian Kessler

VS Code内のTypeScriptコンパイラは、エディタ自身のコードベースをチェックするのに125秒を要していた。TypeScript 7.0では、同じ処理を10.6秒で完了する。Microsoftは古いコードを最適化したわけではなく、コンパイラランタイム全体をJavaScriptからGoに移植し、JavaScriptエンジンでは不可能なマルチコア並列処理を実現した。

この移植はゼロからの書き換えではない。Microsoftのエンジニアによれば、型チェックロジックはTypeScript 6.0と構造的に同一であり、同じルール、同じ動作を、CPUコア間で処理を分散できる言語に変換したものだ。チームがGoを選んだ理由は、元の関数中心のJavaScriptコードベースがGoのイディオムとほぼ一対一で対応したためである。新しいランタイムは明示的な並列制御のためのフラグも導入しており、–checkers 8 を指定すると、モダンなワークステーションではVS CodeのビルドがTypeScript 6.0比で16.7倍の改善を示す。SlackのCI型チェックは7.5分から1.25分に短縮され、Blueskyのビルドは24.3秒から2.8秒になった。このパターンはあらゆるコードベースで成立する。プロジェクト規模が大きいほど恩恵が大きいのは、上限が現在ハードウェア側にあり、ランタイム側にはないからだ。

TypeScript 7.0には公開プログラムAPIが搭載されていない。これはビルドツールがコンパイラを内部から呼び出す際に使用するインターフェースであり、主要なWebフレームワークのテンプレート型チェッカーはすべてこれに依存している。VueのVolarツール、Svelteの言語サービス、MDX、AngularのテンプレートチェッカーはいずれもTypeScript 7.0では動作しない。リファクタリングやテストのためにTypeScriptコンパイラ内部を公開するts-morphやts-jestなどのツールも利用不可となる。Microsoftは代替APIをTypeScript 7.1で提供する予定であり、2026年10月を目指していると発表した。これらのフレームワークやツールを使用しているプロジェクトは、まだアップグレードすべきではない。

古いプロジェクト構成には別の厳しい制約が存在する。TypeScript 7.0は6.0で非推奨とされたオプションをハードエラーとして扱う。ES5コンパイルターゲット、AMDおよびSystemJSモジュール形式、classicモジュール解決、import文におけるassertキーワードはすべてビルドを即座に失敗させる。新しいデフォルトのtsconfig.jsonは@typesパッケージを自動ロードしなくなるため、型依存関係を明示的に宣言せずに環境型検出に依存していたプロジェクトは、インポート時に黙って失敗する。Microsoftは、TS6のツールを新しいコンパイラと共存させる必要があるプロジェクト向けに、typescript@npm:@typescript/typescript6という互換性シムを提供している。

これらの障壁をクリアできるプロジェクト——プレーンなNode.jsまたはDenoアプリケーション、フレームワークテンプレートシステムに依存しないブラウザアプリ、プログラムAPI依存関係のないライブラリ——は、package.jsonの変更1つでアップグレード可能だ。エディタサポートも同様の分割に対応している。VS Codeでは現在専用のTypeScript 7拡張機能が利用可能であり、組み込みサポートは古いTSServer設計に代わるLanguage Server Protocolへの移行を完了しつつある。WebStormなどTSServerに依存していた他のエディタも、この移行を進めている。

2026年10月を目標とするTypeScript 7.1では、Vue、Svelte、Angular、MDXツールが移行に必要とする新しいコンパイラAPIが搭載される予定だ。これがリリースされれば、15か月にわたるGo移植によるパフォーマンス向上がエコシステム全体に届くことになる。それまでは、Volar、SvelteKit、AngularのプロジェクトページはTypeScript 6.0.xに留まるよう推奨している。

タグ: , , ,

ディスカッション

0件のコメントがあります。