10月20日、Cloudflareが「Introducing tsrs: a Port of TypeScript to Rust」と題した記事を公開した。TypeScriptコンパイラをRustで書き直すプロジェクト「tsrs」の概要と、その技術的な狙いを詳説する内容だ。
tsrsが面白いのは、単なる「速いコンパイラ」の話に留まらない点だ。MicrosoftがGo言語によるTypeScript移植(typescript-go)を2025年に発表し、大幅な高速化を実現してもなお、CloudflareがわざわざRustで別の移植を立ち上げた理由がある。それはWebAssembly(Wasm)対応だ。この背景を理解すると、tsrsがCloudflareの事業戦略と深く結びついていることが見えてくる。
TypeScriptのRust移植、本格始動
CloudflareはVoidZero(Viteの作者Evan Youが創業したツールチェーン企業)およびOwner.comのMax Schwenkとともに、tsrsの開発を開始した。tsrsはTypeScriptコンパイラをRustで書き直すプロジェクトであり、RustベースのJavaScriptツールチェーン群であるOxcプロジェクトの一部として育成される。開発はMicrosoftのTypeScriptチームとの協力のもとで進められる。
まず強調されているのは、フォークではないという点だ。TypeScript言語の設計・方向性に関する決定権はTypeScriptチームが引き続き持つ。tsrsはあくまで「忠実な移植(faithful port)」を目指すものであり、言語仕様自体を変えることは意図していない。
既存Go実装比で最大8倍高速、メモリ使用量70%削減
早期ベンチマークとして、同一ワーカー数での比較においてMicrosoftによるgo実装(typescript-go)比で最大8倍高速、メモリ使用量は約70%削減という数値が示されている。
さらに注目すべき点がある。typescript-goをベースにしたTypeScript 7.1 betaはすでにTypeScript 7.0比で最大2.5倍の高速化を達成しているが、その最適化の一部はtsrsの開発から発見されてGoコードベースに還元されたものだという。Rustポートの開発が、既存のTypeScriptの改善にも貢献しているという構図だ。
ベンチマークの公平性についても言及がある。「マシンスペックや設定を変えて有利な数値を出す」という他の移植プロジェクトで見られがちな問題を避けるため、TypeScriptチームと協力して同一設定での比較を実施したとしている。なおtsrsはデフォルトで、マシンタイプに応じてメモリをより多く使う代わりにさらに高速な「アダプティブ設定」で動作する。
なぜ今なのか? なぜRustなのか?
TypeScriptの他言語移植はこれまで何度も試みられてきたが、実用レベルで成功したのはTypeScriptチーム自身によるGo実装のみだった。元記事によれば、現在はフロンティアAIモデルが大規模な移植作業をほぼ独力で短期間に完遂できるようになったことで、RustやC++による実装が複数登場しているという。
しかし「GoのTypeScriptがすでに大幅な高速化を達成しているなら、なぜRustが必要なのか」という疑問は残る。答えはWebAssemblyにある。
GoをWasmにコンパイルするとガベージコレクタも一緒にバンドルされてしまう。一方Rustはメモリ管理モデルの特性上、Wasmホストとゲストのメモリをシンプルにやり取りできる。これにより、Cloudflare Workers上でのWasm実行や、ブラウザ上でのクライアントサイド実行が現実的になる。
Cloudflare WorkersはWasmを長期サポートしており、数週間前にはEmscriptenターゲットによるネイティブなRustサポートも発表している。完全にサンドボックス化された開発環境をブラウザやエッジ上で動かすという構想が、tsrsの技術的な背景にある。
まず試す方法
npmから実験的なリリースとしてインストールできる。
npm install tsrs
npx tsrs
npmパッケージページ(tsrs)およびWebAssembly版(@tsrs/wasm)も公開されている。
どう維持していくか
保守戦略として2点が挙げられている。
1つ目は、t3.ggのTheo Browne(著名なWeb開発者・YouTuber)が開発するtsc-rsとtsrsをマージし、LSP(Language Server Protocol)やソースマップを含むTypeScriptの全機能をサポートする単一パッケージにすることだ。
2つ目は、Vite+Next.js互換のCloudflare向けフレームワークVinextの運用で実績を積んだ手法の適用だ。毎朝エージェントがアップストリームの差分を確認してトラッキングイシューを作成し、毎夜互換性マトリクスを再生成する仕組みをTypeScriptにも当てはめる。アップストリームのTypeScriptとの動作の乖離を防ぐことを最優先とし、発見したパフォーマンス改善はGoコードベースにも還元するとしている。
今後の展望
CloudflareはVite、Rolldown、Oxlint、Oxfmtといった多くのRustベースのJavaScriptツールチェーンをすでに擁している。tsrsについては、OxlintにおけるType-awareなLintルールへの統合など、自社スタックへの深い組み込みを検討している。TypeScriptエコシステムのRust化が着実に進むなか、tsrsはその中核的な役割を担う可能性がある。
詳細はIntroducing tsrs: a Port of TypeScript to Rustを参照していただきたい。