Skip to content

TypeScript は Go で生まれ変わる

TypeScriptのコンパイラはGoで完全に書き直され、驚異的な10倍のパフォーマンス向上を実現しました。このアーキテクチャの変更は、型チェックの速度と開発者体験全体を一新します。

Theo Brandt
Hero image for: TypeScript は Go で生まれ変わる

要約 / ポイント

TypeScriptのコンパイラはGoで完全に書き直され、驚異的な10倍のパフォーマンス向上を実現しました。このアーキテクチャの変更は、型チェックの速度と開発者体験全体を一新します。

なぜ TypeScript は自身を捨てたのか

TypeScript は、厳しいビジネスの現実のためにその JavaScript のルーツを捨てました。JavaScript は、現代の型チェックを特徴づける重い、CPUバウンドな処理のために設計されたものではありませんでした。この根本的な不一致は、破ることのできないパフォーマンスの天井を課し、大規模プロジェクトにおける開発者の生産性とビルド時間に直接影響を与えていました。この固有の限界を認識し、チームはより高性能な基盤を求めました。

開発者たちは、ゼロからの書き直しに着手したわけではありません。その代わりに、彼らは綿密な「書き直しではなく移植」戦略を実行し、既存の TypeScript ロジックを Go へと一行ずつ移行しました。この外科的なアプローチは絶対的な忠実性を保証し、前身である TypeScript 6.0 と同じ型チェックのセマンティクスと動作を保証し、予期せぬ退行を防ぎました。その結果は明白です。1400ファイルと50万行のコードに及ぶ大規模な Playwright リポジトリでの型チェックが、TypeScript 7.0 RC では6秒から驚異的な0.87秒へと急落しました。

Go は、この特定のコンパイラアーキテクチャと既存の TypeScript コードベースへの優れた適合性のため、Rust のような代替案に対して明確な勝者として浮上しました。その堅牢な並行処理モデルと効率的なメモリレイアウトは、確立されたロジックの著しく高速な移植を可能にしました。この重要な機能により、共有メモリ並列処理が可能になり、以前はシングルスレッドだった JavaScript コンパイラを、複数の CPU コアに型チェックを分散できるマルチコアの強力なエンジンへと変貌させました。

分からミリ秒へ:新しい速度

TypeScript 7 は生の速度を提供し、以前のベンチマークを打ち破ります。堅牢な1400ファイルからなるコードベースである Playwright リポジトリは、今や驚異的な0.87秒で型チェックを完了します。これは古いコンパイラの約6秒から驚くべき低下であり、開発者の期待を根本的に再定義する約7倍の改善です。

これは単に高速な JavaScript ではありません。根本的なアーキテクチャの変更です。Go のネイティブコードと共有メモリ並列処理により、TypeScript はついにシングルスレッドの束縛から解放され、複数の CPU コアを同時に活用できるようになりました。この機能は、CPUバウンドなタスクがパフォーマンスのボトルネックとなっていた JavaScript の固有の制限内では、単に不可能でした。強制的なシングルスレッドモードでも、Go による書き直しは Playwright のベンチマークを約2秒で完了し、それでも以前より3倍高速です。

開発者はこの新たな力をきめ細かく制御できるようになりました。新しい `--checkers` フラグは、並列型チェッカーワーカーの数を指定します。デフォルトは4ですが、高コアマシン向けに設定可能です。この値を増やすと、十分な CPU リソースを持つシステムでのビルドを劇的に加速できますが、メモリ使用量が増加するという代償を伴います。

複雑なビルドをさらに最適化するために、`--builders` フラグは並列プロジェクト参照ビルドを管理します。これは効率的なモノレポコンパイルに不可欠です。`--checkers` と `--builders` を組み合わせることで、前例のない並行処理が可能になり、エンジニアはパフォーマンスを調整し、ビルドパイプラインからすべてのミリ秒を引き出すことができます。

アップグレード:順風満帆か、荒波か?

シームレスなアップグレードは稀ですが、TypeScript 7 はそれを実現します。Go による書き直しは、同一の型チェックロジックを細心の注意を払って保持し、バージョン6からの摩擦のない移行を保証します。TypeScript 5 以前のバージョンを使用している開発者は、破壊的変更に遭遇するでしょう。推奨されるパスは、まず TypeScript 6 にアップグレードし、問題を解決してから7に進むことを義務付けています。

この前提条件は、TypeScript 6の最新のデフォルトの採用を保証するものであり、バージョン7では推奨事項から厳格な要件へと移行します。以下の準備をしてください。 - `strict: true` が不変のデフォルトになります。 - `module: esnext` が新しい標準となります。 - `es5` ターゲットが完全に削除されます。 - レガシーモジュールシステム(AMD、UMD、SystemJS)が非推奨になります。これはTypeScriptが過去を捨て去るということです。

ツール開発者の皆様、カレンダーに印を付けてください。コアコンパイラは現在Goで動作していますが、その安定したprogrammatic APIはTypeScript 7.1で予定されています。それまでは、専用の互換性パッケージにより、TypeScript 6と7を並行して実行でき、コンパイラの内部に深く関わるツールでの競合を防ぎます。技術的な詳細については、Announcing TypeScript 7.0 RC - TypeScriptをご覧ください。

あなたの開発ワークフローがレベルアップしました

Goによる書き換えは、単にCLIコマンドが高速化するだけではありません。それはあなたの日常のコーディング体験を根本的に変革します。開発者は、特にVS CodeのようなIDEでその違いをすぐに感じるでしょう。エディタのプロジェクト読み込み時間は約8倍に激減し、大規模なコードベースも瞬時に管理しやすくなります。

Enjoying this? Get one like it in your inbox each morning.

one email a day · unsubscribe in two clicks · no third-party tracking

IntelliSenseは、かつてフローを中断させていたイライラする微小な遅延を排除し、これまでにない速度で補完と型フィードバックを提供します。これにより、待機時間が減り、コーディング時間が増え、開発者の生産性に直接影響を与える、はるかにスムーズなワークフローが実現します。

次に、`--watch`モードは完全に根本から見直されました。以前のバージョンは、Goにネイティブのファイル監視APIがなかったため、安定性とクロスプラットフォームの一貫性に課題がありました。チームは、C++から堅牢で高性能なファイルウォッチャーを移植することで解決策を考案しました。これはParcel bundlerを支えるのと同じ技術です。

この洗練された新しいウォッチャーは、オペレーティングシステム全体で非常に高い信頼性を保証します。開発者はファイル変更に対するほぼ瞬時のフィードバックから恩恵を受け、反復的な開発サイクルを真に流動的で応答性の高いものにします。これは、あらゆる最新の開発セットアップにとって不可欠な要素です。

Goへの書き換えは、単なるパフォーマンス向上以上のものです。それは戦略的な投資であり、新しい高性能な基盤を築きます。コンパイラの新たな速度と効率性により、TypeScriptは新世代のツールを可能にする態勢が整いました。瞬時の型フィードバックや、劇的に高速化されたAI搭載のコードアシスタンスのような進歩が期待されます。

TypeScript開発の未来はレベルアップし、JavaScriptに縛られていた前身では不可能だった、リアクティブでインテリジェントなコーディング環境を約束します。その重要性は明らかです。より高速なコンパイラは、より野心的な機能と、より説得力のある開発者体験を意味します。

よくある質問

TypeScriptコンパイラはなぜGoで書き直されたのですか?

TypeScriptチームは、型チェックのようなCPU負荷の高いタスクにおけるJavaScriptのパフォーマンス制限を克服するために、コンパイラをGoで書き直しました。Goのネイティブパフォーマンスと並行処理モデルにより、大幅な速度向上と共有メモリ並列処理が可能になりました。

TypeScript 7はどのくらい高速ですか?

TypeScript 7は以前のバージョンと比較して約10倍高速です。Playwrightのような大規模なコードベースでのベンチマークでは、型チェックの時間が約6秒から0.9秒未満に短縮されました。

TypeScript 7には主要な破壊的変更がありますか?

TypeScript 6からアップグレードする場合、書き換えはロジックの直接的な移植であったため、実質的に破壊的変更はありません。ただし、v6で導入されたデフォルト(`strict: true`など)は現在厳格な要件となっており、v5からアップグレードする場合は、まずこれらの変更に対処する必要があります。

TypeScript 7はどのようにパフォーマンスを向上させますか?

主要なパフォーマンス向上は、コンパイル言語(Go)への切り替えによるものです。さらに、新しいコンパイラは共有メモリ並列処理を活用し、複数のCPUコアを使用して型チェックを同時に行うことを可能にします。これは、シングルスレッドのJavaScriptバージョンにはなかった機能です。

Found this useful? Share it.

One short daily email of tools worth shipping. No drip funnel.

one email a day · unsubscribe in two clicks · no third-party tracking

🚀もっと見る

AI最前線をキャッチアップ

Stork.AIが厳選したAIツール、エージェント、MCPサーバーをご覧ください。

P.S. 使えるものを作りましたか? Storkに掲載