10 ポイント 投稿者 GN⁺ 2025-05-25 | 3件のコメント | WhatsAppで共有
  • TypeScriptコンパイラをGoベースのネイティブ実装へ移植するプロジェクト Corsa の「tsgo」プレビューが npm で公開
  • 3月に話題となった 10倍高速な TypeScript に関する続報
  • 従来の tsc と比べて 10倍以上の高速化 を達成し、JSX と JSDoc ベースの JS ファイルもサポート
  • VS Code 向け Native Preview 拡張も公開されたが、自動補完、参照の検索などはまだ開発中
  • 新しいネイティブ API と LSP ベースの言語サーバーも準備中で、Rust ベースの Node モジュール libsyncrpc を導入
  • 一部機能はまだ未実装で、TypeScript 7(Corsa)と既存の 5.8(Strada)の間には明確な違いが存在

TypeScript Native Preview 概要

  • 2025年3月に発表された TypeScript ネイティブ移植プロジェクト(Corsa) のプレビューが公開
  • 従来の JS ベースのコードベース(Strada)と比べ、Go で書かれた tsgo並列性と共有メモリの活用 により大規模プロジェクトで10倍以上の性能向上を示す
  • tsgo は将来的に tsc を置き換える予定だが、現時点では別個の npm パッケージとして提供される
    npm install -D @typescript/native-preview  
    npx tsgo --project ./src/tsconfig.json  
    

VS Code 拡張機能

  • VS Code 向け「TypeScript (Native Preview)」拡張を公開

  • インストール後、コマンドパレットまたは設定 から有効化が必要

    "typescript.experimental.useTsgo": true  
    
  • 現在は既存の拡張に依存しており機能は限定的だが、継続的に改善予定

リリースサイクルと開発ロードマップ

  • このプレビューは今後 TypeScript 7 の正式版へ発展 する予定
  • ナイトリービルド(Nightly) として配布され、自動更新される
  • 一部機能は未対応:
    • --build, --declaration, 下位ターゲットへの emit
    • エディタ機能: 自動補完、参照の検索、リネーム など

主な更新内容

型チェックの完成度向上

  • ほとんどの型チェック機能の移植が完了
  • JSX と JavaScript + JSDoc の型チェック もサポート開始
  • 一部の意図的な変更や lib.d.ts の差異により、エラー内容が異なる場合がある

JSX 型チェック対応

  • JSX は当初パースのみ可能だったが、いまや完全な型チェックに対応
  • 例: Sentry プロジェクト基準で tsc は72秒、tsgo は6.7秒と 10倍以上の高速化
    tsgo -p . --noEmit --extendedDiagnostics  
    

JavaScript ファイルの型チェック

  • JSDoc ベースで JS ファイルを解析する機能もネイティブコード上で再実装
  • 従来方式より モダンで一貫性のある方法 にリファクタリングされた
  • 一部の古いパターンは認識されなくなる可能性がある

エディタ機能(LSP ベース)

  • 既存の TSServer の代わりに LSP ベースの言語サーバー へ再実装中
  • 初期バージョンでは エラー表示、定義へ移動、hover 機能を提供
  • 最近では 自動補完(completion) 機能も追加

API 開発状況

  • IPC ベースの API レイヤー を実装中
  • さまざまな言語から TypeScript プロセスと通信可能
  • Node.js で同期通信を行うため、Rust ベースのモジュール libsyncrpc を導入
  • API 設計はまだ初期段階で、フィードバックを受け付けている

従来の TypeScript との違い

  • 一部設定の違いにより、既存プロジェクトでエラーが発生する可能性:

    • 例: --moduleResolution: nodebundler または nodenext を推奨
      {  
        "compilerOptions": {  
          "module": "preserve",  
          "moduleResolution": "bundler"  
        }  
      }  
      
  • その他の違い:

    • JSX emit は保持のみ可能
    • declaration emit は未対応
    • --build は未対応
    • プロジェクト参照関連の言語サービスは未完成

今後の計画

  • 今年末までに --build とエディタの主要機能の大半を実装することを目標
  • 開発状況はブログおよび nightly リリースを通じて継続的に更新予定

3件のコメント

 
riki3 2025-05-25

lsp を直接ビルドして使っています。Go に変わって、リソース使用量が減ったのをかなり実感できますね。

 
cnaa97 2025-05-25

最近は、js を rust / go に移すだけで性能を向上させるのが流行している

 
click 2025-05-25

リファクタリングしていると、tsserver 側のコード解析が遅くなってエディタ全体が止まってしまうことがかなりあったので、早く出てこの苦痛から解放されるといいですね