12月3日、TypeScriptチームが「Progress on TypeScript 7」と題した記事を公開した。この記事では、TypeScript コンパイラと言語サービスのネイティブ移植(Project Corsa / TypeScript 7.0)の進捗と、6.0 を含む今後のロードマップについて詳しく紹介されている。以下に、その内容を紹介する。
1. ネイティブ版言語サービスが「ほぼ実用レベル」
まず押さえておきたいのは、「ネイティブ版のエディタ体験が、すでに日常利用できるレベルまで来ている」という点である。
VS Code では、TypeScript チーム公式のネイティブプレビュー拡張を入れるだけで、新しい言語サービスを試すことができる。
TypeScript Native Preview拡張(毎日更新される)
このネイティブ版言語サービスには、普段 TypeScript 開発で依存している機能の多くがすでに載っている。内部アーキテクチャも作り直されており、クラッシュしやすかった頃と比べて安定性が上がりつつ、並列処理により応答性も改善しているという。
2. tsgo コンパイラと 7〜10 倍クラスのビルド高速化
次に気になるのはビルド性能である。TypeScript 7 では、ネイティブ版コンパイラが @typescript/native-preview として npm に公開されている。
# ローカル開発用
npm install -D @typescript/native-preview
# グローバルインストール
npm install -g @typescript/native-preview
このパッケージには tsgo コマンドが含まれており、従来の tsc と同じように扱える。両者は同じプロジェクト内で並行利用が可能だ。
# 従来のコンパイラ
tsc -b some.tsconfig.json --extendedDiagnostics
# ネイティブコンパイラ(TypeScript 7)
tsgo -b some.tsconfig.json --extendedDiagnostics
型チェックの互換性はかなり高い水準にあり、2 万件程度のテストケースのうち、5.9/6.0 でコンパイルエラーとなる 6,000 件のほぼすべてで 7.0 も同様にエラーを検出している。残りは未実装部分か意図的な仕様変更によるものとされており、ビルド検証に 7.0 を使っても実務的には問題ないレベルとみなせる。
一方で性能は大きく変わる。記事では、代表的な OSS プロジェクトに対してフルビルド時間を比較した表が掲載されている。
| Project | tsc (6.0) | tsgo (7.0) | Speedup Factor |
|---|---|---|---|
| sentry | 133.08s | 16.25s | 8.19x |
| vscode | 89.11s | 8.74s | 10.2x |
| typeorm | 15.80s | 1.06s | 9.88x |
| playwright | 9.30s | 1.24s | 7.51x |
フルビルドで7〜10倍、--incremental と組み合わせた差分ビルドでは、「一瞬」のレベルまで近づくことが期待できる。大規模なモノレポやプロジェクトリファレンスを多用するチームほど、恩恵は大きいと考えられる。
3. TypeScript 6.0 は「JavaScript 実装最後の橋渡し版」
もうひとつ重要なポイントは、JavaScriptによる実装は 6.0 で打ち止めになるという方針がはっきり示されたことだ。
- TypeScript 6.0 が最後の JavaScript ベースのリリース
- 6.1 を出す予定はなく、6.0.x のパッチのみが例外的に出る想定
6.0 は 5.9 と 7.0 の「橋渡し」として設計されており、7.0 で削除される機能をあらかじめ非推奨化しつつ、型チェックの挙動も 7.0 と高い互換性を持たせる方針である。
特に影響が大きそうな設定変更として、次のようなものが挙げられている。
--strictをデフォルトオンにする予定--targetのデフォルトを最新の安定 ECMAScript(例:es2025)に変更--target es5のサポート終了(最小はes2015)--baseUrlの削除予定--moduleResolution node10(node)の削除とbundler/nodenextへの移行
こういった変更への移行支援として、tsconfig.json を半自動で書き換える ts5to6 という CLI も公開されている。
npx @andrewbranch/ts5to6 --fixBaseUrl your-tsconfig-file-here.json
npx @andrewbranch/ts5to6 --fixRootDir your-tsconfig-file-here.json
実務上はしばらくの間、
- エディタやツール類(API 依存)は 6.0 を使い続けつつ、
- ビルドや型チェックにだけ 7.0 の
tsgoを導入する
といった「二刀流」構成が現実的な落としどころになりそうだ。
4. JavaScript + JSDoc チェックの引き締め
最後に、JavaScript ファイルと JSDoc の扱いも変わる。TypeScript 7 では JSDoc ベースの型解析が一から書き直されており、「ゆるい解釈」がいくつか廃止されている。
@enumや@constructorなど一部タグの非対応Objectをany扱いする挙動などの削除any/unknown/undefinedな引数を自動でオプション扱いしない など
その結果、今まで通っていた JavaScript コードがエラーになるケースも出てくる。一方で、TypeScript の型構文との整合性が高まり、実装もシンプルでメンテナンスしやすくなると説明されている。JSDoc ベースで型チェックしている JS プロジェクトでは、7.0 を試す際にこの挙動差を意識しておく必要がある。
エディタ体験とビルド性能が大きく向上し、TypeScript 7は相当に完成度を高めつつある。まずは VS Code のネイティブ拡張と tsgo を部分導入し、自分たちのコードベースでどれくらい効くのか試してみるタイミングに来ていると言えるだろう。
詳細はProgress on TypeScript 7を参照していただきたい。