PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

TypeScript 7.0 ベータ公開、コンパイラをGoに移したら10倍速くなった話

キーポイント

本文

Microsoftが、TypeScriptの次世代版となる ​「TypeScript 7.0」ベータ版 を公開しました。
今回の話、単なる“バージョンアップ”ではありません。かなり本質的です。というのも、TypeScriptのコンパイラや周辺処理を Go言語に移植 してしまったからです。

TypeScriptは、ざっくり言うと「JavaScriptをより扱いやすくするための言語」です。型が付けられるので、大きなコードでもミスを見つけやすく、チーム開発でも安心感があります。いまやWeb開発ではかなり当たり前の存在ですよね。

ただし、TypeScriptを使うコードがどんどん巨大になるにつれて、コンパイラにも「もっと速く」「もっと大規模に耐えてほしい」という要求が強くなっていました。
ここが今回のポイントです。​言語として便利でも、ビルドやコンパイルが遅いと開発者はつらい。これは本当に実感として大きいです。毎日何度も待たされるなら、数秒の差でもストレスになりますから。

そこでMicrosoftは、TypeScript 7ではコンパイラをGoへ移しました。
Goは、シンプルで高速な実行を得意とする言語です。さらに、コンパイルしてそのまま動く ネイティブバイナリ を作れるので、Node.js上で動く構成よりも速さを出しやすい、というわけです。

記事によると、この移植によって コンパイル速度はこれまでの10倍高速 になったとされています。
10倍はかなり派手です。こういう数字はつい「本当に?」と思ってしまいますが、少なくともTypeScriptのように日常的に何度も走る処理では、体感へのインパクトは大きいはずです。
個人的には、これは“理論上すごい”というより、​開発現場で効くタイプの改善 だと思います。

さらに面白いのは、​Language Server Protocol(LSP)​ に対応したランゲージサービスもGoでネイティブ化された点です。
LSPというのは、エディタが「補完」「エラー表示」「定義ジャンプ」みたいな便利機能を使うための共通ルールのこと。要するに、VS CodeなどでTypeScriptを書いているときの“賢さ”を支える仕組みです。
ここが速くなると、コード補完やエラー反映のもたつきが減って、編集体験がかなりよくなります。地味に見えて、実はかなり重要です。

TypeScriptのリードアーキテクトである Anders Hejlsberg 氏は、なぜGoを選んだのかについて、いろいろな言語でプロトタイプを試した結果として、

といった理由を挙げています。

このあたり、かなり筋がいい判断だと思います。
特にTypeScriptのような“開発者の毎日に深く入り込む道具”では、機能追加よりも 速さと安定性 のほうが価値を持つ場面が多いです。遅いツールは、それだけで使い勝手を悪くしてしまいますから。

もちろん、TypeScriptをGoにしたからといって、すべてが魔法のように解決するわけではないでしょう。新しい実装には新しい課題も出るはずです。
ただ、それでも今回の移植はかなり大きい一歩です。TypeScriptが「便利な言語」から、​大規模開発にも耐える高速な基盤 へと進化していく流れが見えてきます。

開発者目線で見ると、これはかなりうれしいニュースです。
コンパイル待ちが短くなるだけで、作業のリズムが崩れにくくなりますし、巨大プロジェクトでもストレスが減る。こういう改善は、派手さ以上に毎日の満足度に効きます。
正直、こういう“裏方の進化”こそ、実は一番ありがたいんじゃないかと思います。


参考: 「TypeScript 7.0」ベータ版が公開。TypeScriptコンパイラなどをGo言語に移植、コンパイルを10倍速に

同じ著者の記事