30 ポイント 投稿者 GN⁺ 2025-03-12 | 24件のコメント | WhatsAppで共有
  • Microsoftが、コンパイラとツールのネイティブ移植によりTypeScriptの性能を10倍向上させると発表
  • エディタの起動時間を大幅に改善し、ビルド時間を10分の1に短縮、メモリ使用量も大幅に削減
  • 2025年半ばまでにtscのプレビュー版を公開し、2025年末までに完全なプロジェクトビルドと言語サービスを提供する予定

TypeScript性能改善の背景

  • TypeScriptの中核的な価値は優れた開発者体験にある
  • コードベースが大きくなるほどTypeScriptの価値は高まるが、大規模プロジェクトでは性能上の問題が発生
    • 読み込み時間やチェック時間が長くなる問題がある
    • エディタの高速起動時間とコードベース全体の解析のバランスが必要
  • AIベースの機能には、高速かつ正確な意味情報の提供が必要
  • コマンドラインビルドによるコードベースの状態検証への要求が高まっている

ネイティブ移植の進行計画

  • TypeScriptコンパイラとツールのネイティブ移植作業を開始
  • 性能改善の目標:
    • エディタ起動時間の大幅短縮
    • ビルド時間を最大10倍短縮
    • メモリ使用量の削減
  • 2025年半ば: コマンドラインで型チェック可能なtscプレビュー版を公開予定
  • 2025年末: 完全なプロジェクトビルドと言語サービスを提供予定

コード実行とテスト

  • TypeScript Goコードリポジトリでコードのビルドと実行が可能
  • リポジトリでtscおよび言語サーバーのビルド・実行手順を提供
  • 新機能に関する定期的な更新を予定

どれだけ速くなったのか?

  • 現在のTypeScriptプロジェクトのビルド時間を複数の人気コードベースでテストした結果、次のような性能向上が確認された:
    • VS Codeプロジェクトは約150万行のコードで、従来の77.8秒から7.5秒へ、約10.4倍高速化
    • Playwrightプロジェクトは約35万行のコードで、従来の11.1秒から1.1秒へ、約10.1倍改善
    • TypeORMプロジェクトは約27万行のコードで、従来の17.5秒から1.3秒へ、約13.5倍改善
    • date-fnsプロジェクトは約10万行のコードで、従来の6.5秒から0.7秒へ、約9.5倍改善
    • tRPCプロジェクトは約1万8千行のコードで、従来の5.5秒から0.6秒へ、約9.1倍改善
    • rxjsプロジェクトは約2千行のコードで、従来の1.1秒から0.1秒へ、約11倍改善
  • まだ機能は完全ではないものの、ほとんどのコードベースで10倍以上の性能改善が見込まれる
  • 高速な型チェックとコード探索が可能になる
  • AIツール統合や高度なリファクタリング支援も可能になる

エディタ性能の改善

  • エディタの読み込み速度と応答速度を改善
  • Visual Studio Codeコードベース基準の読み込み時間:
    • 現在: 9.6秒 → ネイティブ版: 1.2秒(約8倍改善)
  • メモリ使用量も約50%削減
  • 言語サービス機能(自動補完、クイックインフォ、定義へ移動など)の性能向上が見込まれる
  • 言語サーバープロトコル(LSP)ベースで移行作業を進めている

バージョンロードマップ

  • TypeScript 5.8はすでにリリース済みで、TypeScript 5.9もまもなくリリース予定
  • JSベースのTypeScriptコードベースは6.x系として引き続き開発を継続
  • ネイティブコードベースが安定すれば、TypeScript 7.0としてリリース予定
    • TypeScript 6 → JSベース版
    • TypeScript 7 → ネイティブベース版
  • TypeScript 7のリリース後も、6.x系は一定期間維持される予定

次のステップ

  • 性能、コンパイラAPI、LSPなどに関する追加情報を今後公開予定
  • GitHub FAQでよくある質問を確認可能
  • 2025年3月13日にTypeScriptコミュニティDiscordでAMAを実施予定(PDT午前10時 | UTC午後5時)

24件のコメント

 
click 2025-05-25

みんな structural typing を深く考えずに話しているのではないかと思いました。
C# や Rust のような nominal typing の言語に書き直そうとすると、プロジェクトの根本的な構成をあまりにも大きく変えなければならないので、簡単ではなかったでしょう。
structural typing を採用した言語の中で、既存の JS ベースより性能を高められるのは C++ か Go のどちらかでしょうが、生産性まで考えると代案はありません

 
kuthia 2025-03-13

いつ頃からかTSに触ることが少なくなっていたけど、こういうニュースを見るとまた気になってきますね?

 
[このコメントは非表示になっています。]
 
pitou106 2025-03-14

ts で本当に避けられない場合を除いて any を乱用してしまうと、vanilla を使うのと大差ないですよね..(笑)

 
yshrust 2025-03-13

かなり議論が白熱しているようで、Anders Hejlsberg本人が直接コメントを残していますね

https://github.com/microsoft/typescript-go/…

 
jjpark78 2025-03-13

TypeScriptにコンパイルして、成果物がそのままバイナリとして出てきてほしい派

 
passerby 2025-03-13

フロントエンドは門外漢なので……swc とは違うのでしょうか?

 
caniel 2025-03-13

SWCはBabelのように互換性のあるJavaScriptコードを生成し、バンドルするところまでに焦点がありますが、こちらはTypeScriptコードをJavaScriptに変換したり、エラーをチェックしたりすることに焦点があります。

 
halfenif 2025-03-12

TypeScriptコードがもはやTypeScriptで書かれなくなると、チームがTypeScriptを直接使わなくなり、長期的には開発体験に影響する可能性がある。

いわゆる「ドッグフーディング」ですね。自分たちが作ったものを自分たちで使うことです。でも、言語の場合は少し悩ましいですね。

 
dongjinahn 2025-03-14

個人的な考えですが、ts の土台である js のランタイム(e.g. spidermonkey, v8)のほとんどは c++ で書かれていて、js で実装されたランタイムは存在せず、
js -> js コンパイルも pure js を使うとあまりに遅いので esbuild だの何だのにみんな移っていくのを見ると、
ts でもあえてドッグフーディングにこだわる必要があるのか、とは思います

 
wogns3623 2025-03-12

後になると、既存のTypeScriptコードベースの管理がおろそかになってしまわないか心配ですね。

 
tsboard 2025-03-12

うれしいニュースです! 不思議なことに、MSのTypeScript言語は予想に反して本当に意外な(?)選択をたくさんしているようです。MSにとってはほぼ最初のオープンソースプロジェクトでもあり、JSを置き換えようとしていたGoogleのDartと違ってJSを補完しようとした選択もとても賢明に感じられましたし、今回のネイティブ移植言語についても自社言語がいくつもあるはずなのにGoogleのGoを選んだ点も驚きです。

 
galadbran 2025-03-12

あれ、Deno 側ですでに Rust ベースのツールチェーンを作ったものがあったはずですが……いきなり Go なんですか?

 
asheswook 2025-03-12

それはNodeのようなランタイムのことを指しているようですが、ここで言っているのはTS言語自体のコンパイラです。

 
galadbran 2025-03-13

ああ、もう少し記事を読んでみると、エディタが速くなるといった話もあって混乱していたようですね。

  • tsc が10倍速くなる。つまり、ts -> js のトランスパイル時間が大幅に短縮される。
  • VSCode のような ts で開発された大規模プロジェクトをロードするときの速度が非常に速くなる。つまり、ts の構文チェックなど、tsc の機能を共有するロジックが高速化されたという意味。
  • VSCode 自体の動作速度が速くなったわけではない。
    そういう内容だったんですね。
 
illiil1lii 2025-03-12

再帰で構成されたジェネリック型を使うとき、遅くなってしまって次善策を使った経験があります。10倍なら、こういう部分も改善できるのではと期待しています。

 
tujuc 2025-03-12

「なぜGoなのか」という議論スレッド、面白いですね。

https://github.com/microsoft/typescript-go/discussions/411

考えるべきことも多いですね…

 
tsboard 2025-03-12

そうですね、でも .NET 開発者の方々の気持ちも理解できます……

 
riki3 2025-03-12

.NETとRustの開発者たちがかなり怒っていますね

 
bungker 2025-03-12

.NETは理解できますが、RustはGoと同じ位置づけだと思います。やはり、既存のJS関連のGoプロジェクトやライブラリも判断に影響したように思います。

 
aa1567 2025-03-12

C# 言語の開発が止まったわけではありませんが、C# を使ったフレームワークが放置されているように感じることがあまりにも多いです

 
clastneo 2025-03-12

Goで書こう〜

 
caniel 2025-03-12

とても期待しています。

 
GN⁺ 2025-03-12
Hacker Newsの意見
  • TypeScriptチームのDaniel Rosenwasserが発表の知らせを伝え、チームリーダーのRyan Cavanaughとともに質問に答える準備ができている
    • Discord AMAでさらに多くの情報を得られる
  • 高速な開発ツールは素晴らしく、TypeScriptチームが常に開発体験を深く考えている点がうれしい
    • TypeScriptコードがもはやTypeScriptで書かれなくなると、チームがTypeScriptを直接使わなくなり、長期的には開発体験に影響する可能性がある
    • FlowがOCamlで書かれて失敗した事例に触れつつ、チームの考えが気になる
  • 以前にRustで高速なtscを試みた事例として、2つのプロジェクトに言及している
    • stc: 中断済み
    • ezno: 活発に開発中であり、tscとの1:1対応を目標にはしていない
  • プロジェクトは柔軟なスクリプト言語で始まるが、結局はよりネイティブな表現が勝つことが多い
    • 低水準の表現から始めるほうがよいかもしれないと考えている
    • JSランタイムをサーバーで使うという基本前提を見直すことになる
    • スクリプト言語の利点は次第に小さくなっている
  • 一瞬、エイプリルフールかと思った
  • Goを選んだのは良い判断
    • RustではなくGoを選んだのが印象的
    • AOTコンパイルされた.NETを選ばなかったのは惜しい
  • 新しいコードベースを既存のものと可能な限り互換に保つことが重要
    • Goの文法がTypeScriptのコードベースと似ており、移植しやすい
  • GolangとTypeScriptの文法的な類似に驚く
    • Golangでsum typesを使いにくかった経験を共有している
  • DanielとAndersがネイティブ移植について掘り下げて議論したポッドキャストを紹介している
  • 大規模なTypeScriptファイルをリファクタリングする過程で性能問題が発生した
    • TypeScriptへのコードベース移行はチームに大きく役立ったが、性能問題は依然として存在する
  • PHPを使っていたが、4年前からTypeScriptを使い始めた
    • TypeScriptの型システムは有用で、コンパイル速度も速い
    • Microsoftのファンではないが、TypeScriptはよくできた言語だと思う