5月23日、Microsoft Developer Blogsで「TypeScript ネイティブプレビューの発表 (Announcing TypeScript Native Previews)」と題した記事が公開された。この記事では、TypeScript コンパイラと開発ツールを Go で再実装したネイティブ版 TypeScript(開発コード名 Corsa)の一般プレビュー公開について詳しく紹介されている。以下に、その内容を簡潔にまとめて紹介する。([Microsoft for Developers][1])
ネイティブ TypeScript プレビューの概要
今年3月に発表された移植計画では、既存の JavaScript 版コンパイラ(Strada)を Go へ書き換え、共有メモリ並列処理を活用することで、多くのプロジェクトでビルド時間を 10 倍以上短縮できると説明された。今回のプレビュー公開により、開発者は npm 経由でネイティブ版コンパイラをインストールし、 tsgo
コマンドとして利用できるようになった。 将来的にはこの実行ファイルが tsc
に改名され、公式 typescript
パッケージへ統合される計画である。([Microsoft for Developers][1])
npm install -D @typescript/native-preview
npx tsgo --project ./src/tsconfig.json
VS Code 拡張機能と新しい言語サービス
CLI だけではなく、Visual Studio Code 向けの「TypeScript (Native Preview)」拡張も公開された。インストール後にコマンドパレットで “TypeScript Native Preview: Enable (Experimental)” を実行するか、
設定 UI の “Use Tsgo” スイッチを有効にすることで、新しい LSP ベースの言語サービスが利用できる。
settings.json
に
"typescript.experimental.useTsgo": true,
と記述しても同じ効果が得られる。
スピード比較 ― Sentry コードベースでの検証
TypeScript チームは OSS プロジェクト Sentry(約110 万行の TypeScript)を用いた計測結果を示している。従来版とネイティブ版で型チェックを行った所要時間とメモリ使用量は次のとおりだ。
実行コマンド | Total time | Check time | メモリ使用量 |
---|---|---|---|
tsc (TS 5.8) |
72.81 s | 63.26 s | 3.2 GB |
tsgo (Corsa) |
6.76 s | 5.88 s | 3.9 GB |
同一マシンでの計測では、 型チェックが 1 分強から 7 秒弱へと劇的に短縮された。 実環境により差はあるものの、二桁倍率の高速化が期待できることを示す好例である。
現状の制限とロードマップ
プレビュー版は毎晩ビルドされており、 最終的に TypeScript 7 としてリリースされる予定だ。 ただし現時点では --build
モード、.d.ts
出力、ダウンレベル emit、auto-import や rename などのエディタ機能が未実装である。問題が発生した場合は GitHub の issue tracker へ報告し、一時的に従来の言語サービスへ戻すことが推奨されている。
JSX、JavaScript型チェッカー、エディタ対応、APIレイヤー
チームは型チェッカーの移植をほぼ完了しており、JSX および JavaScript+JSDoc の型チェックを新たに実装した。
エディタ側では LSP 準拠の言語サーバを開発中 で、診断、定義ジャンプ、ホバーに加えて補完が動作する段階に到達している。今後は find-all-references、rename、signature help などの実装を優先する。
またネイティブ版では、標準 I/O 越しに通信できる API レイヤーを整備中 であり、TypeScript や JavaScript だけでなく 他言語からもコンパイラ機能へアクセス可能になる 見込みだ。さらに、チームはNode.js向けにRust 製モジュール libsyncrpc を開発した。これにより、TypeScript や JavaScript からは従来と同様に 同期的なAPI呼び出し が可能になる見込みだ。
今後の予定
TypeScript チームは年内に --build
(TypeScript 3.0 で導入された プロジェクト参照ビルドモード を有効にするオプション)対応と主要言語サービス機能の実装を完了し、より成熟したネイティブコンパイラを公開する計画である。プレビューは毎晩更新されるため、定期的なアップデートとフィードバックが推奨される。
詳細は[Announcing TypeScript Native Previews」を参照していただきたい。