プログラミング
TypeScript 7.0の発表
TypeScript 7 (devblogs.microsoft.com)
要約
Microsoftは、TypeScriptのネイティブポートであるTypeScript 7.0のリリースを発表しました。これは、Go言語で書き直され、ネイティブコード速度、共有メモリマルチスレッド、および最適化により、以前のバージョンと比較してビルド速度が8倍から12倍向上しています。この高速化は、エディタでの操作、コンパイル時間、および全体的な開発ワークフローに大きな影響を与え、開発者の生産性を向上させます。
全文翻訳
本日、TypeScript 7.0の提供開始を発表できることを誇りに思います。これはTypeScriptの10倍高速なネイティブポートです。
その初期から、TypeScriptはスケーラブルなJavaScriptを提供することを約束してきました。強力な型チェックとリッチなツールをJavaScriptの世界にもたらすことで、TypeScriptはプラットフォーム全体で非自明な高品質アプリケーションの構築を可能にしました。
昨年、私たちのチームはTypeScriptのスケーリングにおける次のステップを発表しました。それは、ツールセットのすべての部分を桁違いに速くすることでした。その使命は、Goで構築されたTypeScriptのネイティブポートであり、最新のハードウェアを最大限に活用できるものでした。このポートは、可能な限り忠実に実行され、新しいコードを書きながら、元のコードベースの構造とロジックを維持することで、2つのコンパイラ間の結果の一貫性と互換性を保ちました。
主な違いは、この新しいコードベースにより、TypeScript 7はネイティブコード速度、共有メモリマルチスレッド、およびフルビルドで通常8倍から12倍の速度向上をもたらす多数の新しい最適化をもたらすことです。
他のすべてのリリースと同様に、TypeScript 7はnpm経由で利用可能です。
npm install -D typescript
これにより、ワークスペースに新しいtsc実行可能ファイルが取得されます(npx tscを介して実行できます)。もちろん、TypeScriptエクスペリエンスの大きな部分はそのエディタサポートにも関わっています。お気に入りのコードエディタは、言語サーバープロトコル(LSP)の新しいサポートと、その新しい速度およびマルチスレッドの改善により、TypeScript 7を簡単にサポートするはずです。VS Code、Visual Studio、WebStorm、またはその他のモダンなエディタを使用しているかどうかにかかわらず、TypeScript 7はうまく機能するはずです。エディタのドキュメントを確認してください。例えば、VS Codeには今日から使用できるTypeScript 7専用の拡張機能があり、Visual Studioはワークスペースに基づいてTypeScript 7を自動的に有効にします。
高速なTypeScriptとは何を意味するのか?
高速なTypeScriptは、紙の上では素晴らしいように聞こえますが、実際には何を意味するのでしょうか?おそらく、開発のあらゆる段階でTypeScriptが登場する場所を考えるのに役立つでしょう。典型的な開発日には、エディタを開き、TypeScriptファイルを開き、プロジェクト全体でfind-all-referencesのような操作を実行することが含まれるかもしれません。その後、編集を開始すると、オートコンプリートが表示され、編集中にリアルタイムで赤い波線が表示されることを期待するかもしれません。プロジェクトをビルドする準備ができたとき(そして最近では、おそらくAIエージェントが)、tscを実行し、エラー出力を確認し、生成されたコードを実行する方法を見つけるでしょう。
高速なTypeScriptは、上記のすべての部分が合理化されることを意味します。エディタがプロジェクトを完全にロードするのを待つ時間は、瞬時に感じられるでしょう。find-all-references、オートコンプリート、および診断の遅延は、以前よりも大幅に短縮されるはずです。そして、tscを実行するとき、おそらく--watchモードで、フィードバックループを締め、これまで以上に速くイテレーションできるようになります。
実際のプロジェクトでこれを見ることができます。実際、いくつかのオープンソースプロジェクトで自分で比較してみてください。以下は、いくつかのかなり大きなオープンソースコードベースでTypeScript 6と7を実行したビルド時間です。
コードベース | TypeScript 6 | TypeScript 7 | スピードアップ
vscode | 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倍
TypeScript 7は、ビルド全体でより少ない集約メモリを要求しながら、通常はより良いパフォーマンスを発揮します。
コードベース | TypeScript 6 | TypeScript 7 | メモリ差
vscode | 5.2GB | 4.2GB | -18%
sentry | 4.9GB | 4.6GB | -6%
bluesky | 1.8GB | 1.3GB | -26%
playwright | 1.0GB | 0.9GB | -11%
tldraw | 0.6GB | 0.5GB | -15%
もちろん、フルビルド以上の経験があります。同じコンピューターで、VS Codeコードベースのエラーがあるファイルを開くのに、エディタを開いてから最初のエラーが表示されるまで、以前は約17.5秒かかっていました。TypeScript 7では、1.3秒未満で、13倍以上高速です。
テスト済みで本番稼働準備完了
TypeScriptプロジェクトには、10年以上にわたって構築され、メインブランチのすべてのコミットで実行される数万のテストが含まれています。これらは、すべてのリリースが安定していて信頼できることを保証してきました。しかし、TypeScript 7は普通のリリースではありません。テストスイートを超えて、本番環境での使用にTypeScript 7が堅牢であることを確認するために、さまざまなリソースを活用してきました。
過去1年間、多くの大規模チームと社内外で協力し、実際のコードベースでTypeScript 7をテストしてきました。結果は圧倒的に肯定的であり、企業全体がTypeScript 7が安定していて、高速で、採用しやすいと報告しています。例えば、VS Codeチームは最近、開発サイクルをより速く進めるためにTypeScript 7のプレビューリリースでの経験を強調しました。また、Loop、Office、PowerBI、Teams、XboxなどのMicrosoftチームとも協力し、TypeScriptが最大のコードベースに対応できることを確認しました。同様に、Bloomberg、Canva、Figma、Google、Lattice、Linear、Miro、Notion、Sentry、Slack、Vanta、Vercel、VoidZeroなどの企業も、コードベースでTypeScript 7をテストし、改善のためのフィードバックを提供するために協力してくれました。
さらに、より広範なテストインフラストラクチャの多くをTypeScript 7で実行できるように再構築しました。TypeScript 6以前は、GitHub上のTypeScriptおよびJavaScriptプロジェクトの自動およびオンデマンドテストがあり、コンパイラと言語サービスの回帰を検出していました。同じテストが戻ってきて、TypeScript 7に対して実行されており、実際のコードベースで問題を検出しているため、コアテストスイートのギャップを見つけて、より良いエクスペリエンスを提供できます。
明示的なフィードバック、自動クラッシュレポート、および積極的なテストの組み合わせは、品質に測定可能な違いをもたらしました。実際、私たちのデータインサイトは、TypeScript 7.0の新しい言語サーバーが、TypeScript 6.0と比較して、失敗した言語サーバーコマンドを80%以上削減し、サーバークラッシュを60%以上削減したことを示しています。
また、大規模なチームからの素晴らしいフィードバックも聞いています。Slackのエンジニアは、TypeScript 7がマージキュー時間を40%削減し、CIでの型チェック時間を約7.5分から1.25分に短縮したと述べています。以前は言語サーバーのロード時間のせいでエディタでのローカル開発がほぼ「使用不可能」であり、エンジニアは通常CIに完全な型チェックを実行させていました。TypeScript 7は、数秒で同じコードベースをロードできるようになり、ローカル型チェックを再び可能にしました。
Vantaでのビルドは劇的に改善され、最大のプロジェクトの1つで最大9倍高速なスピードアップを示しました。同様に、MicrosoftのNews Servicesチームは、TypeScript 7を採用したことでCIビルドを待つ時間を月に400時間節約できたと述べています。
昨年、PowerBIに取り組んでいるエンジニアは、エディタでのTypeScript 7をコードベースでの作業において「命を救う」と表現しました。彼らは、TypeScript 7がVS Codeでリネーム機能をサポートする前でさえ、そのエクスペリエンスをデフォルトとして採用しました。
Loopのモノレポで作業している開発者も同様に熱狂しました。以前のエディタエクスペリエンスは、彼らの規模では使用不可能だと説明されていましたが、TypeScript 7のエクスペリエンスは「驚くほど」使いやすいものでした。
Canvaの開発者は、TypeScript 7の言語サービスが劇的なスピードアップを示しており、エディタで最初のエラーが表示されるまでの時間が約58秒から約4.8秒になったと述べています。
TypeScript 6.0とのサイドバイサイド実行
TypeScript 7.0はリリースされましたが、APIは含まれていません。TypeScript 7.1は新しい(そして異なる)APIを搭載してリリースされると予想されますが、それまでは、(typescript-eslintのような)コンパイラへのプログラムアクセスをまだ必要とするユーティリティのために、TypeScript 6.0とサイドバイサイドで実行できるようにすることを優先してきました。
6.0/7.0移行プロセスの一部として、新しい互換性パッケージ@typescript/typescript6を公開しました。このパッケージはtsc6という実行可能ファイルを提供するため、必要に応じて、TypeScript 7.0(独自のtscバイナリを搭載)を名前の競合なしにサイドバイサイドでインストールできます。新しいパッケージはTypeScript 6.0 APIも再エクスポートするため、TypeScript 7にはtscを使用できますが、他のツールは6.0に依存し続けることができます。typescript-eslintのような一部のツールは期待しています。