私たちが無視してきたボトルネック
TypeScript 7は、新しいコンパイラがVS Code codebaseをビルドする能力によって実証されたように、大幅なパフォーマンス向上を達成しました。約8,000ファイルにわたる130万行のコードを含むこの巨大なプロジェクトは、わずか10秒でコンパイルできるようになりました。これは、以前のコンパイラで必要だった125秒から劇的に短縮されており、最も広く使用されている開発環境の1つで11.9倍の速度向上を記録しました。
MicrosoftのテクニカルフェローであるAnders Hejlsberg氏は、核心的な問題を正確に特定しました。JavaScriptの設計は、コンパイラに不可欠な計算集約型のワークフローではなく、ユーザーインターフェースやWebブラウザ向けに最適化されているという点です。その基本的なシングルスレッドアーキテクチャはスケーラビリティを著しく制限しており、abstract syntax treesの処理や包括的な型チェックのような重要な操作において、最新のマルチコアプロセッサを効率的に活用することを妨げています。
JavaScriptは並行処理メカニズムとしてWeb Workersを提供していますが、コンパイラの操作には適していません。解析された構文木のような複雑なデータ構造を個別のワーカー・スレッドに分散させるには、膨大なシリアライズおよびデシリアライズのオーバーヘッドが必要です。複雑なオブジェクトを生のバイト列に変換し、元に戻すというこのプロセスは、実際の作業よりも多くの計算リソースと時間を消費することが多く、コンパイラに求められる共有メモリと高スループットの要件に対して、Workersは非実用的なソリューションとなっています。
なぜGoが完璧な武器だったのか
TypeScriptコンパイラをGoで書き直したことで、大幅なパフォーマンス向上が実現しました。この戦略的な移植により、計算集約型のタスクに対するJavaScript固有の制限が解消されました。観察された速度向上の約半分はネイティブコンパイルされたコードの実行によるもので、残りの半分はGoの非常に効率的な共有メモリ並行処理モデルによるものです。
Goは、利用可能なすべてのCPUコアに計算作業を簡単に分散させます。これは、CPUバウンドな操作において依然として単一のコアに制限されることが多いJavaScriptとは対照的です。最新のプロセッサは、個々のコアの高速化よりもコア数の増加が進んでおり、並列処理のためにハードウェアリソースを最大限に活用するGoの能力をさらに高めています。
Goの並行処理モデルは、CPUバウンドなタスクの分散を簡素化します。これにより、Web Workersを使用しようとする際にJavaScriptで共通のボトルネックとなる、複雑なスレッド管理やプロセス間でのデータのシリアライズおよびコピーが不要になります。この設計により、Goはコンパイラの操作において本質的に優れており、オブジェクトの直接共有と効率的なparallel executionを可能にします。
ついに実現した即時フィードバック
パフォーマンスの向上はコンパイラの実行にとどまらず、TypeScript言語サーバーを通じて日々のdeveloper experienceに大きな影響を与えます。以前のバージョンでは、特に大規模なコードベースにおいて、IDEで重要な型チェックの結果やエラーのハイライトが表示されるのを待つ間、開発者は顕著な遅延に頻繁に悩まされていました。これがワークフローにおいてフラストレーションの溜まる中断を招いていました。
TypeScript 7はこの動態を根本から変え、ほぼ瞬時のフィードバックを提供します。開発者は、正確な型チェックの結果やエラーを示すおなじみの「波線」をわずか数ミリ秒で確認できるようになりました。この応答性は大規模なプロジェクトを修正する場合でも維持され、これまで継続的な開発と生産性を妨げていた苦痛な待ち時間を事実上排除しました。
重要な点として、新しい言語サーバーは安定性の向上も大きく誇っています。メトリクスによると、運用上の障害が劇的に減少しており、TypeScript 6と比較して言語サーバーコマンドの失敗が80%以上減少しました。さらに、中断の一般的な原因であるサーバークラッシュも60%以上大幅に減少しました。
これらの強化を組み合わせることで、手動での再起動や永続的なツール問題のトラブルシューティングの必要性が最小限に抑えられます。これらの改善やその他の新機能の包括的な概要については、公式のAnnouncing TypeScript 7.0 - Microsoft Developer Blogsを参照してください。Goへの移植は、TypeScript開発環境の応答性と信頼性を間違いなく変革しました。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
アップグレード方法(および注意点)
新しいコンパイラにアップグレードするユーザーは、npm install typescriptを実行してバージョン7を取得できます。VS Codeユーザーの場合、IDE内でのパフォーマンス向上を最大限に活用するために、特定の'TypeScript 7' extensionをインストールすることも必要です。このリリースは、既存のコンパイラをGoに直接移植したものであり、ゼロからの書き直しではありません。
このアプローチにより、既存のコードベースとの幅広い互換性が確保されます。開発者が感じる主な変化は、コンパイル速度の劇的な向上と、言語サーバーの応答性の強化です。機能的な動作は、以前のTypeScriptバージョンとほぼ一貫しています。
この初期リリースにおける重要な制限は、完全に互換性のあるprogrammatic APIが存在しないことです。この欠落は、TypeScriptエコシステム内のいくつかの主要なツールに直接影響を与えます。linting、テスト、ランタイム実行などのタスクでこれらのユーティリティに依存しているプロジェクトは、TypeScript 7.0では正しく機能しません。
具体的には、以下のような統合が影響を受けます:
typescript-eslintts-jestts-node
これらおよび同様のツールはアップデートを待っている状態です。開発者は、programmatic APIの完全な互換性は、これらのエコシステムの依存関係に対処する次回のTypeScript 7.1 releaseで予定されていることに注意してください。
よくある質問
なぜTypeScriptコンパイラはGoで書き直されたのですか?
元のJavaScriptベースのコンパイラは、JavaScriptのシングルスレッドという性質により制限されており、計算負荷の高いタスクには不向きでした。Goは、そのネイティブなパフォーマンスと優れた共有メモリ並行処理のために選択され、コンパイラが利用可能なすべてのCPUコアを使用できるようになりました。
TypeScript 7はどれくらい速いですか?
劇的に速くなっています。例えば、130万行のVS Codeコードベースをコンパイルするのに、以前のコンパイラでは125秒かかっていたところ、約10秒で完了します。これは約12倍の改善です。他の大規模プロジェクトでも同様の向上が見られます。
TypeScript 7は既存のツールを壊しますか?
可能性があります。コンパイラは互換性を持つように設計されていますが、programmatic APIはまだ利用できません。typescript-eslint、ts-jest、ts-nodeのようにこれに依存するツールは、7.1リリースまで動作しません。
TypeScript 7を使い始めるにはどうすればよいですか?
npm (npm install typescript) を通じてインストールできます。VS Codeで最高の体験を得るには、デフォルトがまだ更新されていないため、マーケットプレイスから特定の 'TypeScript 7' extension をインストールする必要があります。

