TypeScript 7.0正式リリース:Go移行でビルドが最大12倍高速化、ただしVueやSvelte対応は次期バージョン待ち

2026年7月13日 16:58

2026年7月8日(現地時間)、TypeScript 7.0の安定版がリリースされた。MicrosoftのTypeScriptチームによる「Project Corsa」の成果として、コンパイラ全体がJavaScript(Node.js)からGo言語へと移植され、ビルド時間が8〜12倍高速化している。ただし、一部のフレームワークを利用している開発者は、アップグレード前に注意が必要だ。

■Go言語への移行とマルチスレッド化によるボトルネックの解消

今回の劇的な高速化は、実行環境の刷新によるものだ。過去14年間、TypeScriptコンパイラはNode.jsプロセスとしてV8エンジン上で動作していた。しかし、V8のシングルスレッド制限、JITコンパイラのウォームアップ時間、そして抽象構文木(AST)が生成する循環的なデータ構造に対するガベージコレクション(GC)の負荷という3つの限界が存在していた。

Go言語への移行は、これらすべての限界を一度に解消する。ネイティブのマシンコードにコンパイルされるためJITのウォームアップは不要になり、Goの軽量スレッド「goroutine」によってCPUコア間での真の共有メモリ並行処理が可能となった。また、アプリケーションと並行して動作するGoのGCは、TypeScriptの深く再帰的で自己参照的なASTの処理に適している。

MicrosoftがRustではなくGoを選択した理由について、TypeScriptの開発リードであるライアン・カバナー(Ryan Cavanaugh)氏は、Rustの所有権モデルでは循環データ構造を扱うために多大な回避策が必要になるためだと説明している。既存のデータモデルを大幅に再設計することなく、約1年でセマンティクスを完全に維持したまま移植を行うには、Goが最適だったという。

TypeScript 7.0では、これまでシーケンシャルに実行されていた「パース」「型検査」「コード出力」の3ステップが並行処理される。パースと出力はファイル間でほぼ完全に並行化され、コア数に応じて線形にスケールする。型検査は依存関係の型情報を共有する必要があるため複雑だが、デフォルトで4つのワーカー(新設の --checkers フラグで調整可能)からなる固定プールを作成してファイルを分割処理する。また、モノレポ向けのプロジェクト参照ビルドを並行化する --builders フラグや、デバッグ用に並行処理を無効化する --singleThreaded フラグも追加された。

■ベンチマーク結果:ビルド時間とエディタの応答性が劇的に向上

Microsoftが大規模なオープンソースコードベースを用いて実施した、TypeScript 6.0と7.0のビルド時間比較ベンチマークの結果は以下の通りである。

・VS Code:125.7秒 → 10.6秒(11.9倍高速化)
・Sentry:139.8秒 → 15.7秒(8.9倍高速化)
・Bluesky:24.3秒 → 2.8秒(8.7倍高速化)
・Playwright:12.8秒 → 1.47秒(8.7倍高速化)
・tldraw:11.2秒 → 1.46秒(7.7倍高速化)

VS Codeのビルドにおいて、--checkers 8 を指定するとビルド時間は7.51秒まで短縮され、TypeScript 6.0と比較して16.7倍の高速化を記録した。メモリ使用量もコードベースの規模に応じて6%から26%削減されている。

さらに、エディタ上での体感速度はビルド時間以上に向上している。VS Codeで230万行のコードベースを開き、エラーのあるファイルを表示した際、最初の赤波線が表示されるまでの時間が約17.5秒から1.3秒未満へと短縮された(13倍以上の高速化)。言語サーバー自体の信頼性も向上し、コマンドの失敗は80%以上、サーバーのクラッシュは60%以上減少している。

実開発における導入効果も報告されている。Slackのエンジニアによると、TypeScript 7.0の導入によりマージキューの待ち時間が40%削減され、CIでの型検査時間は約7.5分から1.25分に短縮されたという。MicrosoftのNews ServicesチームはCIビルド時間を月間400時間削減し、Canvaの開発チームはエディタ起動から最初のエラー検出までの時間が約58秒から約4.8秒に短縮されたと報告している。

■フレームワーク別アップグレード判断ガイド

アップグレードの判断は、プロジェクトで使用しているフレームワークやツールチェーンに依存する。

【今すぐアップグレード可能】
TypeScriptを直接ビルドしており、フレームワーク固有のテンプレート型検査や、TypeScriptコンパイラのプログラム用API(Programmatic API)に深く依存していないプロジェクトは、今すぐ「npm install -D typescript」で移行可能だ。Angularを採用しているチームも、CLIでの型検査(tsc)には今すぐTypeScript 7.0を導入できるが、エディタサポートの切り替えはバージョン7.1まで待つことが推奨される。

【TypeScript 7.1まで待つべき】
Vue、Svelte、Astro、MDXを使用している開発チームは、当面はTypeScript 6.0にとどまるべきである。これらのフレームワークが使用するテンプレート型検査器(Volarなど)は、TypeScriptをライブラリとしてインポートし、プログラム用APIを呼び出すことで、.tsファイル以外のコンポーネントテンプレートなどの型検査を行っている。しかし、TypeScript 7.0ではGo実装のAPIインターフェースがまだ流動的であり、安定したプログラム用APIが提供されていない。3〜4ヶ月のリリースサイクルで登場予定のTypeScript 7.1でAPIが安定化するまでは、これらのフレームワークでネイティブコンパイラによるテンプレート型検査の恩恵(8〜12倍の高速化)を受けることはできない。

なお、移行期の互換性パッケージとして「@typescript/typescript6」が提供されている。これを利用することで、tscコマンドはTypeScript 7.0を指しつつ、ピア依存関係でtypescriptをインポートするツール類にはTypeScript 6.0のAPIを提供し、両バージョンを共存させることができる。

■TypeScript 5.xからの移行には追加の手順が必要

TypeScript 5.xから直接移行するチームは、事前にTypeScript 6.0へアップグレードし、すべての非推奨警告を解消しておく必要がある。TypeScript 7.0では、6.0でのデフォルト値変更が強制され、非推奨だったオプションが完全にエラーとなるためだ。主な変更点は以下の通り。

・strictモードがデフォルトでtrueに設定される。
・moduleのデフォルト値がesnextに変更される。
・rootDirのデフォルト値が./に変更される。tsconfig.jsonがソースディレクトリ(src/など)の上位にある場合は、明示的に rootDir: "./src" を指定する必要がある。
・typesのデフォルト値が[](空配列)になる。@typesパッケージからのグローバル型宣言に依存していた場合は、tsconfig.jsonに明示的にtypes配列を定義する必要がある。
・target: es5、moduleResolution: node/node10、module: amd/umd/systemjs/none、baseUrl、moduleResolution: classic などの古いオプションは警告ではなくビルドエラーとなる。これらを無視するための ignoreDeprecations フラグも使用できなくなる。

■「セルフホスト」の終了とその他の制約

TypeScript 7.0は、14年間続いた「セルフホストコンパイラ」(TypeScript自身で書かれ、自身のソースをコンパイルする仕組み)の歴史に終止符を打った。コンパイラがGo言語で記述されるようになったため、今後コンパイラ開発に貢献するにはGo言語の知識が必要となる。

また、ブラウザ上で動作するTypeScriptツール(オンラインエディタやPlaygroundなど)の開発者は注意が必要だ。GoはWebAssembly(WASM)にコンパイルできるものの、WASM環境におけるGoのランタイムは従来のJavaScript実装よりも重い。LogRocketが引用した独立テストによると、一部のシナリオではGo-WASMによる型検査が従来のJavaScript版よりも遅くなるケースが確認されている。ブラウザ環境で動作させる場合は、事前にパフォーマンス検証を行うことが推奨される。

■エディタサポート、ウォッチモード、新フラグの詳細

VS Codeでは、マーケットプレイスでTypeScript 7拡張機能が提供されており、コマンドパレットから有効化できる。数週間以内にはVS Code本体に標準搭載される予定だ。Visual Studioでは、最新バージョンでワークスペースが自動検出され、標準で有効化される。その他のLSP(Language Server Protocol)対応エディタでも、マルチスレッド化の恩恵を自動的に受けられる。

ウォッチモード(--watch)も完全に再構築された。従来のポーリング方式は大規模なnode_modulesツリーを持つプロジェクトで負荷が高かったが、TypeScript 7.0ではParcelのC++製ファイルウォッチャーをGo言語に移植して採用し、パフォーマンスを向上させている。

なお、TypeScript 7.0はパフォーマンス向上に特化したメジャーアップデートであり、新しい型システムや構文の追加、型チェッカーの推論挙動の変更はない。ただし、JavaScriptサポートにおいてJSDoc時代の古いパターン(@enum、単体の?型、関数への@classなど)が非認識となったほか、テンプレートリテラル型におけるUnicodeコードポイントの扱いが変更されている(絵文字がUTF-16の2ユニットではなく1文字として処理される)。

■今後のロードマップ:TypeScript 7.1に向けて

Microsoftは、2026年10月頃(3〜4ヶ月後)に予定されているTypeScript 7.1において、安定したプログラム用APIを実装し、Volarなどのエコシステムとの統合を完了させる計画だ。7.0のリリース完了に伴い、開発チームは新しい言語機能の開発や、ネイティブ実行環境を活かしたさらなる最適化に着手するとしている。

■注目ポイントQ&A

●今すぐTypeScript 7.0にアップグレードすべきですか?それとも待つべきですか?

多くのプロジェクトは今すぐアップグレード可能です。「npm install -D typescript」を実行して移行できます。ただし、Vue、Svelte、Astro、MDXを使用している場合は、テンプレートの型検査に必要なプログラム用APIがまだ安定していないため、TypeScript 6.0にとどまり、7.1のリリースを待つことを強く推奨します。

●なぜRustやC#ではなく、Go言語でコンパイラを再構築したのですか?

Rustは所有権モデルの制約上、TypeScriptの抽象構文木(AST)に多用されている循環データ構造を扱うのが難しく、データモデルの大幅な再設計が必要になるため見送られました。C#は言語の設計思想(クラス階層重視)が既存のTypeScriptコード(関数とフラットなデータ構造重視)と合致しませんでした。Go言語は既存の構造をそのまま機械的に移植しやすく、約1年という短期間で互換性を維持したまま移植を完了できるという現実的な理由から選択されました。

●コンパイラがGo言語で書かれるようになったことで、コントリビューションにどのような影響がありますか?

TypeScript 7.0以降、コンパイラの開発に参加するにはTypeScriptではなくGo言語の知識が必要になります。これにより貢献できる開発者のハードルは上がりますが、Microsoftは開発速度とパフォーマンス向上のための構造的なトレードオフとしてこれを受け入れています。

●TypeScript 5.xからアップグレードする際の注意点は何ですか?

5.xから7.0へ直接移行するのではなく、まず6.0へアップグレードしてすべての非推奨警告を解消してください。7.0では、strictモードのデフォルト有効化、moduleやrootDirのデフォルト値変更、古いオプション(target: es5やbaseUrlなど)の廃止がエラーとして強制されます。

元記事: TypeScript 7 Now Stable: 10× Faster Builds, But Not for Vue or Svelte Yet

関連記事

最新記事