TypeScript 7.0では、主にパフォーマンスの劇的な向上やアーキテクチャの刷新、および設定や仕様の厳格化など、多岐にわたる大きな変更が予定されています。主な変更点は以下の通りです。
1. コンパイラのGo言語への完全移植と約10倍の高速化 TypeScript 7.0の最大の変更点は、コンパイラとランゲージサービスのコードベースが従来のJavaScriptからGo言語へ完全に書き換えられたこと(コードネーム「Project Corsa」)です。これによりネイティブコードの実行速度と共有メモリによるマルチスレッド処理の恩恵を受け、大規模なコードベースにおいてTypeScript 6.0と比較して約10倍もの高速化が実現されています。
2. 並列処理の導入 パース、型チェック、およびコード生成(emit)といったステップの多くが並列で実行されるようになりました。
- チェッカーの並列化: デフォルトで4つの型チェック用ワーカーが起動し、処理を並列化します。このワーカー数は
--checkersフラグで調整可能です。 - ビルダーの並列化:
--buildersフラグを使用することで、モノレポなどの環境で複数のプロジェクト(Project Reference)を同時にビルドすることができます。 - (※デバッグなどのために単一スレッドで動作させる
--singleThreadedフラグも用意されています。)
3. 型順序の安定化(決定論的な出力) 並列処理化に伴い、異なるスレッドで型やシンボルが処理される順序が変わることで出力ファイルに非決定性(差異)が生じるという課題を解決するため、TypeScript 7.0ではオブジェクトの内容に基づいた決定論的なアルゴリズムを用いて内部的にソートを行うようになりました。これにより、同一のコードであれば常に同じ型定義ファイルが出力されることが保証されます。
4. デフォルト設定の変更とレガシー機能の完全削除 TypeScript 6.0で導入された新しいデフォルト値が引き続き採用され、6.0で非推奨となった古い設定や構文を使用するとハードエラーになるように変更されました。
- デフォルトの変更:
strictモードがデフォルトでtrueになり、moduleのデフォルトがesnextになりました。また、rootDirは./、typesは[](空配列)がデフォルトとなりました。 - 削除された設定・構文:
target: es5やdownlevelIteration、moduleResolution: node(node10)、module: amd/umd/systemjs、baseUrlといったオプションがサポートされなくなりました。さらに、名前空間(namespace)でのmoduleキーワードの使用や、import時のassertsキーワード(代わりにwithを使用)もエラーになります。
5. JavaScriptサポート(JSDoc等)の挙動変更 JavaScriptファイル(.js)に対する型解析(JSDocなど)が、TypeScriptファイル(.ts)の解析方法とより一貫性を持つように改修されました。 これにより、以下のような従来のJavaScript向けの一部の特殊なパターンがサポートされなくなります。
- 型が期待される場所での値の直接使用(代わりに
typeofを使用する)。 @enumタグの特別な認識の廃止。- 型としての単独の
?の使用不可(代わりにanyを使用する)。 - クロージャスタイルの関数構文(例:
function(string): void)の廃止。
これらの変更により、TypeScript 7.0は現代の開発環境に合わせた非常に高速かつ堅牢なツールへと進化しています。エコシステムや開発ツール(typescript-eslintなど)が安定して対応するには7.1以降のプログラムAPIを待つ必要がありますが、コマンドラインやエディタ上では飛躍的なパフォーマンス向上を体感できるとされています。
Project Corsa(Go版コンパイラ)の詳細は?
「Project Corsa(プロジェクト・コルサ)」Go言語へ完全に移植するマイクロソフトの複数年にわたる取り組みのコードネームです。このプロジェクトの成果が「TypeScript 7.0」の基盤となっています。(ちなみに、初期のTypeScriptのコードネームは「Strada」であり、どちらもイタリア語の自動車関連用語に由来しています)。
Project Corsaに関する主な技術的詳細と背景は以下の通りです。
1. 圧倒的なパフォーマンス向上(10倍の高速化) Project Corsaは、大規模なコードベースにおいて約10倍の高速化を達成しています。この劇的なパフォーマンス向上は、主に以下の2つの要因によるものです。
- ネイティブコードによる実行: 従来のV8エンジン上での実行時に発生していたJIT(Just-In-Time)コンパイルのウォームアップやNode.jsのオーバーヘッドが、Go言語によるネイティブな機械語へのコンパイルによって完全に排除されました。
- 共有メモリによるマルチスレッド化(並列処理): 従来のシングルスレッド処理から脱却し、デフォルトで4つの並列ワーカーを用いた型チェックなどを実現しています。 (※実例として、150万行のVS Codeのコードベースでは、ビルド時間が77.8秒から7.5秒に短縮されています)。
2. なぜRustやC++ではなく「Go」が選ばれたのか 近年のツールチェーン(Biome, Turbopack, Rolldownなど)の多くがRustを採用している中で、マイクロソフトがGoを選んだのには非常に現実的な理由があります。
- 「リライト(書き直し)」ではなく「ポート(移植)」の容易さ: 開発チームはアーキテクチャの根本的な再設計を避けることを重視しました。Goは構造的にTypeScriptと類似しており、Rustを採用するよりも直接的かつ体系的なロジックの移植が可能でした。
- メモリ管理と循環型のサポート: TypeScriptのコンパイラは内部で「循環型(Cyclic types)」を多用しています。これをRustのボローチェッカー(所有権システム)で実装するのは非常に困難ですが、Goにはガベージコレクタ(GC)が組み込まれているため、従来のメモリ管理手法と非常に相性が良く、開発期間を大幅に短縮できました。
3. TypeScript 6.0との完全な互換性維持 Project Corsaは動作速度を追求しつつも、従来のセマンティクスを完全に保持するように設計されています。型チェックのロジックは「構造的に同一」であり、TypeScript 6.0が排出するエラーと全く同じエラーを再現するよう作られています。過去10年間に蓄積された膨大なテストスイートを用いて検証が行われています。
4. 開発体験と次世代AIツールへの波及効果 このコンパイラの刷新により、CI/CDパイプラインにおけるビルド時間の大幅短縮に加え、エディタ上のIntelliSense(入力補完)の反応速度も劇的に向上します。 さらに、マイクロソフトはこの高速かつ低遅延なセマンティック解析能力が、AIコーディングアシスタント(Copilotなど)にコードベース全体の意味を即座に理解させるための次世代AIツールを強化する基盤になるとしています。