tsrs 0.20.1 を Windows の実機で:同じ checker 数で TypeScript 7.0.2 の 2.8〜6.0 倍。8倍を超えたのは --fast の VS Code(8.12倍)だけ。エラー出力は 7.1 beta と4プロジェクトでバイト単位で同じ
AI が Rust に移植した TypeScript コンパイラー tsrs 0.20.1 を、Windows の PC で TypeScript 7.0.2・7.1 beta と比べました。発表の「同じ checker 数で最大8倍速く、メモリ約70%減」が Windows で出るかと、公式の4プロジェクトで本家と同じ答えを出すか、Windows・日本語の20問でどこが違うかを見ています。
YouTube のタイトル:tsrsをWindowsで実測:AIが移植したTypeScript、本当に8倍速い?本物と同じ答え?|第13回
この回で試したこと
| PC | Intel Core Ultra 7 265K(20スレッド)、メモリ約31GB、Windows 11 26H2、Node 24.14.0 |
|---|---|
| 道具 | tsrs 0.20.1-ts7.1.0-beta、typescript 7.0.2・7.1.0-beta(いずれも Apache-2.0)。node のラッパーは通さず exe を直接呼んだ |
| 対象 | 公式の bench/projects.json のコミットの VS Code、webpack、t3code server、MUI docs |
| 速さの測り方 | 5回の中央値。-p <対象> --noEmit --incremental false --pretty false --checkers 4(--fast だけ --checkers なし)。交互に、1周のウォームアップのあと |
| 発表との違い | 発表の値は tsrs 0.18.0 のもの。今回は 0.20.1 を Windows で測った。発表の図の値は解説記事に写されたもので、図そのものの数字は確かめていない |
| 測ったときの PC の状態 | ほかのアプリが動いている状態(各回の前の PC 全体の CPU は多くが30%台、最大約60%)。Defender のリアルタイム保護は有効 |
| 公式の入れ方から変えた点 | MUI docs は pnpm が Node 24.15 以上を求めて止まったので、--config.engine-strict=false で入れ直した。入れるときは --ignore-scripts |
| 作業フォルダの外にできたもの | %LOCALAPPDATA%\Yarn\Cache(Yarn のキャッシュは全体で 866MB。今回の増分は分けて測っていない)、%LOCALAPPDATA%\npm-cache |
結果(実測)
| 型チェックの時間(7.0.2/7.1 beta/tsrs/tsrs --fast、秒) | VS Code 13.091/9.403/3.730/1.613、webpack 1.386/1.078/0.490/0.302、t3code server 15.887/11.044/3.149/2.236、MUI docs 16.687/6.685/2.763/2.236 |
|---|---|
| 同じ checker 数で 7.0.2 と比べた倍率 | VS Code 3.51、webpack 2.83、t3code server 5.05、MUI docs 6.04(発表の値は順に 3.83、3.96、8.12、8.09。tsrs 0.18.0) |
| 同じ checker 数で 7.1 beta と比べた倍率 | VS Code 2.52、webpack 2.20、t3code server 3.51、MUI docs 2.42 |
| --fast の倍率(7.0.2 比/7.1 beta 比) | VS Code 8.12/5.83、webpack 4.59/3.57、t3code server 7.10/4.94、MUI docs 7.46/2.99 |
| checker の数を変えた結果(VS Code、3回の中央値。結果を見てから足した測り方) | 7.1 beta と tsrs の倍率は checker 1 で 2.20、2 で 2.33、4 で 2.51、8 で 2.57、16 で 2.68。tsrs は checker 16 で 1.993秒、--fast は 1.613秒 |
| メモリ:ワーキングセットのピーク(7.0.2/7.1 beta/tsrs、MiB) | VS Code 7775/5464/2976、webpack 1198/873/502、t3code 6244/4486/2345、MUI docs 7908/3177/1571。tsrs は 7.0.2 より順に 62%・58%・62%・80% 減、7.1 beta より 46%・42%・48%・51% 減 |
| メモリ:コミットのピーク(7.0.2/7.1 beta/tsrs、MiB。結果を見てから取り上げた物差し) | VS Code 7832/5515/4697、webpack 1233/908/1029、t3code 6296/4532/3512、MUI docs 7959/3217/2393。tsrs は 7.0.2 より 17〜70% 減、7.1 beta より webpack で 13% 増、ほかは 15〜26% 減 |
| 同じ答えか(標準出力) | 7.1 beta と tsrs、7.1 beta と tsrs --fast は4つすべてバイト単位で同じ。VS Code エラー371個・69,503バイト、webpack 840個・155,752バイト、t3code 6個・2,307バイト、MUI docs 0個・0バイト(空どうしの一致)。終了コードも同じ |
| 7.0.2 の答え | VS Code 359個、webpack 848個、t3code 5個。エラーありの終了コードは 1 で、7.1 beta・tsrs の 2 と違った |
| 出力されるファイル(--checkers 4) | VS Code 9,400個・136,057,750バイト、webpack 954個・12,868,035バイトで、全ファイルのバイト列が同じ。--fast では比べていない |
| Windows・日本語の20問 | 一致15・違い5。違いは --locale ja(tsrs は英語のまま)、--watch・--init・--showConfig(tsrs は未対応、終了コード5)、tsconfig も引数もないとき(7.1 は全部のヘルプ、tsrs は使い方1行)。5つとも公式の DEFAULTS.md に書かれていた |
| 20問で一致した例 | 日本語のファイル名・変数名、絵文字・𠮷のあとの列番号、BOM と CRLF、ジャンクション経由、260文字を超えるパス、Shift_JIS のファイル |
| ウォームアップ | tsrs の最初の1回(VS Code)は 11.8秒。2回目からは 3.6秒台 |
わかったこと
- 発表の条件(同じ checker 数、7.0.2 と比べて)での最大は MUI docs の 6.04 倍で、8倍には届かなかった
- 8倍を超えたのは --fast の VS Code(8.12倍)だけ。--fast は checker の数を増やす別の設定なので、発表の条件ではない
- エラーの出力は、7.1 beta と tsrs で4プロジェクトともバイト単位で同じだった。エラーの数は公式の RESULTS.md の 371・840・6・0 と同じ
- 7.0.2 は 7.1 beta・tsrs と別の答えを出した(VS Code 359個、webpack 848個、t3code 5個)。「7.0 より8倍」は、版も答えも違うものとの比べになる
- メモリ70%減に届いたのは、7.0.2 比のワーキングセットで MUI docs の 80% だけ(ほかは 62%・58%・62%)。7.1 beta 比のコミットでは webpack が 13% 増えていた
- Windows・日本語の20問の違い5つは、すべて公式の文書に書かれていた(--locale ja、--watch、--init、--showConfig、引数なしのときの表示)
結果の範囲
- 1台の PC の結果です。ほかのアプリが動いている状態で測りました
- 発表の値(解説記事が写したブログの図の値)は tsrs 0.18.0 のもので、今回の 0.20.1 とは版が違います。図そのものの数字は確かめていません。公式の peak RSS は macOS/Linux の値で、Windows のワーキングセットと同じものではありません
- 結果を見てから足したもの:checker の数を変える測り方(test_plan_add1)、MUI docs・t3code server(test_plan_add2)、コミットを取り上げること、問04・13・17 の解き直し(test_plan_add3。レビュー1回目の指摘)、webpack の出力ファイルの比較(試し方に書いていたのは VS Code だけでした)
- 問04・13・17 は問題の tsconfig に rootDir を書かなかったので TS5011 のエラーが両方で出ました(こちらの書き方のせい)。最初の結果は残し、rootDir を足して解き直した3問も一致でした
- 20問は制作担当が選んだ1回ずつの試験です。これだけで「同じ」と一般化しません。適合テスト全部を手元で動かしてはいません
- --fast は、公式の USAGE.md に、既知のケースで診断の増減・位置や文言の変化・終了コードの変化があると書かれています。この4つでは同じでしたが、ほかでも同じとは言えません
- --fast の checker の数は文書の式で16ですが、実際に16になったかは確かめていません。--fast のどの設定が効いたかも分けて測っていません
- エラーは、公式の測り方(--ignore-scripts で入れる)で型の部品が足りないなどのために出るものです。プロジェクトの不具合という意味ではありません
- コミットが大きい理由は調べていません。Windows では --fast の省メモリの一部が働かない(USAGE.md)とありますが、これがこの差の原因かは確かめていません。ウォームアップの最初の1回が遅い理由も確かめていません
- AI が移植したという話は The New Stack・InfoQ の記事の要約で、作者本人の記事は読んでいません
- 動画の長さのため、checker の数を変えた結果は動画から外し、概要欄とこのページに残しました
よくある質問
tsrs は TypeScript の8倍速いですか?
この回の Windows の PC では、発表と同じ条件(同じ checker 数、7.0.2 と比べて)で 2.83〜6.04 倍でした。8倍を超えたのは VS Code を --fast で動かしたときの 8.12 倍だけで、--fast は checker の数を増やす別の設定です。7.1 beta と比べると、同じ checker 数で 2.20〜3.51 倍でした。
tsrs は本家の TypeScript と同じ答えを出しますか?
VS Code、webpack、t3code server、MUI docs の4つでは、7.1 beta と tsrs の標準出力はバイト単位で同じで、終了コードも同じでした。VS Code と webpack の出力ファイル(--checkers 4)も同じでした。4つと20問の範囲の結果で、適合テスト全部を手元で動かしてはいません。
tsrs --fast も同じ答えになりますか?
この4つの標準出力は同じでした。ただし公式の USAGE.md には、--fast は既知のケースで診断の増減や位置・文言の変化、終了コードの変化があると書かれていて、ほかのプロジェクトでも同じとは言えません。出力ファイルは --fast では比べていません。
メモリは70%減りますか?
7.0.2 と比べたワーキングセットのピークで、70%以上減ったのは MUI docs の 80% だけでした(VS Code 62%、webpack 58%、t3code 62%)。7.1 beta と比べると 42〜51% 減です。Windows に確保した量(コミット)で見ると、7.1 beta より webpack で 13% 増え、ほかは 15〜26% 減でした。
Windows や日本語の環境で違いはありますか?
20問のうち15問は一致し、5問が違いました。--locale ja でもメッセージは英語のまま、--watch・--init・--showConfig は未対応で終了コード5、tsconfig も引数もないときは使い方1行だけです。5つとも公式の DEFAULTS.md に書かれていました。日本語のファイル名や Shift_JIS のファイル、260文字を超えるパスなどは一致しました。
月・水・金の18:00に、話題の技術を手元のゲーミングPCで試した結果を出しています。
チャンネル登録するこのページと動画は、AI(Anthropic の Claude)が検証の記録をもとに作り、人間の運営が公開を承認しています。数値は記録(ログ)の値です。音声:VOICEVOX:春日部つむぎ / 映像の一部:Google Veo(AI生成)