
2026/10/20 22:18
Tsrs:TypeScript を Rust に移植したプロジェクト
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Cloudflare、VoidZero、および Owner.com は、「tsrs」というプロジェクトに協力しており、これは TypeScript コンパイル言語の高性能な Rust 版で、Oxc ツールチェーン内で育種されました。単なるフォークではなく、このプロジェクトは個別の実装を維持し、公式 TypeScript チームとともに言語の方針については完全な制御を保ちつつ、Cloudflare および他者が特定の最適化を主導できるようにしています。最先端の AI を利用して移植プロセスを加速させ、Rust の優れた WebAssembly サポートを活用することで、Go など他の代替手段が使用する重いガベージコレクタのオーバーヘッドを避け、ブラウザや低電力 IoT デバイスといった環境をターゲットとしています。ベンチマークの結果、tsrs は TypeScript 7.0 より最高で 8 倍高速であり、メモリ使用量は約 70% 減少しています。これらの利点の一部はすでに公式 TypeScript 7.1 ベータ版にマージされており、さらに高速化されています。プロジェクトには、特定のハードウェアに対して速度を優先する適応型構成モードが含まれており、ブラウザ内で完全にエンカプスルされた開発環境を実現し、組み込みデバイス上で安全な実行を可能化することを目的としています。今後の取り組みとしては、言語サーバープロトコル機能を維持しつつアップストリームでの最適化を継続するため、コードベースの統合に重点を置きます。
本文
Cloudflare と VoidZero が TypeSript を Rust で再実装:「tsrs」プロジェクトの概要と展望
クラウドフラアール(Cloudflare)とボイドゼロ(VoidZero)は、Owner.com のマックス・シュウェンク氏と共に**「tsrs」**というプロジェクトに取り組んでいます。
プロジェクト概要
- tsrsとは、TypeScript コンパイラのスロットポートであり、Rustで実装されたものです。
- TypeScript チームとの緊密な連携のもと開発が進められ、Oxc JavaScript コンパイルツールチェーンの一環としても育成されています。
- 主要な目標:
- 開発者が型チェック待ち時間よりも実際の開発作業に時間を費やすよう支援すること。
- TypeScript をより高速かつメモリ効率よくすることで、ブラウザ内やあらゆる環境での完結した開発環境の実現を促すこと。
開発方針と互換性について
- TypeScript のフォークは行わない: 言語の設計や方向性のコントロールは完全にながれ TypeScript チームに委ねます。
- TypeScript チームによる長期的なビジョン維持を尊重し、コミュニティへの採用を導く姿勢に変化はありません。
- Rust 版は TypeScript チームの意思決定(機能選定など)を厳格に追従し、互換性の喪失を防ぎます。
- 言語仕様の解釈や実装の詳細については、TypeScript チームのみが決断します。
パフォーマンスとメモリ効率の向上
Rust による初期ベンチマーク結果は非常に有望です。
- tsrs の性能: 同等数の型チェックワーカーを使用した場合、TypeScript 7.0 より最大 8 倍高速化され、かつ約70%のメモリ使用量を削減。
- 上位統合の影響: TypeScript 7.1 ベータ版でも最大 2.5 倍の高速化が実現しており、tsrs の最適化が一部上位へ統合されています。
- ベンチマーク条件の統一: 以前は大型マシンや特殊オプションで性能主張が高まっていた事例がありましたが、TypeScript チームとの協議により、現在では同一の設定条件下での比較が保証されています。
- デフォルト設定の適応性: マシンの種類に応じて構成を適応的に変更し、より多くのメモリ消費换取にさらなる高速化を実現します。
実験版の入手方法
Rust による忠実なスロットポートを手に入れるには、npm から以下を実行してください。
npm install tsrs npx tsrs
なぜ今 Rust ポートなのか?
近年、AI モデルを活用した大規模コード変換が可能になり、Go や C++ による完全再設計版や「忠実なポート(faithful ports)」が登場しています。これにより、より高速な TypeScript への需要が高まっています。
なぜ Rust を選ぶのか?
TypeScript の Go ポート版ですでに 10 倍の高速化が達成されているにもかかわらず、Rust が必要とされる理由は単なる速度ではありません。
- WebAssembly(Wasm)環境での実行: Rust+Wasm の組み合わせは特に強力です。
- メモリ管理モデルの違い:
- Go を Wasm にコンパイルする場合、ガーベッジコレクション(GC)も一緒にコンパイルする必要があります。
- Rust はメモリ管理モデルにより、WebAssembly ゲストとホスト間の直接的かつ効率的なメモリ操作が可能です。
- Cloudflare Workers での活用:
- WebAssembly をサポートしており、wasm-bindgen の新機能により Workers でネイティブ Rust の実行も可能になりました。
- 小さなメモリフッターは実利となり、以前はできなかった環境でも完全に封閉された開発システムを実行できるようになります。
エージェントとの組み合わせによる可能性
- Cloudflare 上のサンドボックス化された環境内で開発ツールのエンドツーエンド実行が可能に。
- WebAssembly を利用することで、クライアントサイドのブラウザ、組み込みデバイス、IoT アプリケーションなどでも安全な実行環境を構築できます。
tsrs ポートのメンテナンス方針
Theo Browne 氏と共に、「tsc-rs」と「tsrs」を単一パッケージへ統合し、TypeScript の全機能(LSP やコンテンツマッパーなど)をサポートするよう進めています。
Vinext と Next.js の同期手法を参考に、以下のプロセスを採用しています:
- 朝のレビュー: エージェントが変更内容をレビューし、diff を取得。Vinext に影響がある項目についてトラッキングイシューを開く。
- 夜のテスト: Next.js のテストスイートを Vinext で実行しながら、互換性マトリクスを再生成。
- ギャップの解消: テストやイシューで問題が見つかった場合、エージェントが両方のコードベースの変化を特定し、再現例を作成・テストポート・修正提案を行う。
TypeScript への適用方針も同様です:
- アップストリームの TypeScript から逸脱した振る舞いを導入しないよう注意します。
- パフォーマンス向上を発見した際は、Go ベースのコードベースにも還元し、すべての関係者にメリットを提供。
- 現時点では診断情報の表示順序などに違いがありますが、安定版リリース時には差異を最小限に抑えます。
今後の展望
Cloudflare は既に Vite、Rolldown、Oxlint、Oxfmt など多くの Rust ツールをホストするエコシステムです。1,000 万人超の開発者が利用する中で、以下の取り組みを進めています:
- 開発ツールチェーンの改善: より高速で、移植性が高く、多くの環境で容易に実行できるツールチェーンの実現。
- スタックへの統合: tsrs を実験的にスタックに深く統合し、Oxlint 向けに型認識機能付きの lint ルールなどを展開予定。
- オープンソースとしての維持: Vinext と同様、健全なオープンソースプロジェクトとして運営し、TypeScript そのものを邪魔しない姿勢を堅持します。
Oxc チームがコードベースの再設計を開始し、より高速で保守性の高いシステムを実現していることも認識しています。TypeScript チームおよび JavaScript コミュニティと協力し、最高の品質かつ最も高速な TypeScript 実装の構築を共に進めていくことを目指します。