Exploring the TypeScript Compiler Part 3: Why TypeScript?

本記事は tskaigi 2026 Day2の制約と時代から読み解くTypeScriptコンパイラ設計史の増補改訂版の Part 3です。

今シリーズの Part1ではなぜ TypeScript コンパイラは Go で Port されたのか、Part2ではそもそもどんな動作原理なのかを追ってきました。Part3ではそもそもなぜ TypeScript が生まれたのか、周辺の出来事をたどっていきます。

TypeScript の1.0が公開されたのは2014年の4月であり、内部開発の開始はおおよそ2010年頃だと言われています。そこに至るまでにどんなことがあったのか追ってみましょう。

TSまでの道

2004 ~ 2006 Ajax革命

Google から2004年に Gmail、2005年に Google Maps など画期的な Web アプリケーションが公開されました。いわゆる Ajax 革命というやつです。

2004年当時のGmailの画面
図1: Gmail(2004)— Google, Hitting send on the next 15 years of Gmail
2005年当時のGoogle Mapsの画面
図2: Google Maps(2005)— 出典: Version Museum, 22 Years of Google Maps Website Design History

Web ページが単なる文書ビュアーからアプリケーションへ変貌していく起点となったと言われています。

2008 ~ 2010 JS高速化戦争

2008年9月には Google が V8を公開し、それを搭載したブラウザ Google Chrome もリリースします。公開直後のスナップショットではベンチマークの一つでIE7の15倍のパフォーマンスも記録しています。V8の登場により、JavaScriptCore や SpiderMonkey といった JS エンジン間の高速化競争がさらに激化します。

Chrome、Safari、Firefox、Opera、Internet ExplorerのSunSpiderベンチマーク結果。実行時間が短いほど高速
図3: 2008年当時の SunSpider ベンチマーク結果 — John Resig, JavaScript Performance Rundown, 2008

Node.js が登場したのも2009年ごろの話です。

2009 ~ 2010@Microsoft

ではこの頃 TypeScript の開発元である Microsoft は何をしていたのでしょうか。その内部事情が語られていたのが TypeScript Origins: The Documentary です。

TypeScript Origins: The Documentary

ドキュメンタリーによると JS エンジンの高速化に伴ってもちろん IE の JS エンジン Chakra もどんどん改善が進んでいきました。その影響で JavaScript でより巨大なソフトウェアを作るという方向はもはや避けられなくなりました。 Microsoft も例外ではなく、主力製品であるデスクトップアプリケーションの Web 移植を迫られます。

しかしながら、2010年ごろの JavaScript は開発体験が他言語に比べて圧倒的に貧弱だったと語られています。C++ や C#で作られた数十万行の製品を移植するには、とても耐えられるものではありません。 そこで移植作業に使うエディタから JS で作り始めますが、あまりにデバッグがしにくく困り果ててしまいます1。

当時の選択肢

当時この問題に対するアプローチは大きく2つでした。

1. 別言語からJSへコンパイル

別言語から JS にコンパイルすることで JS を遠ざけるということでした。

  • Script# (C# -> JS)
  • CoffeeScript

といったツールを使って回避するという動きでした。

2. JS自体を置き換える

これに該当するのが Google の Dart です。現在は Flutter の台頭で知られていますが、元々は JavaScript の置き換えを目指していました。V8に関わった人物が Dart を作り、ブラウザに Dart VM を搭載する計画もありました。しかし、この計画は最終的に頓挫します。

Dart の野望

Dart が新言語として発表されること自体は、以前から外部に知られていたようです。発表直後に内部文書がリークし、その目的の1つが明らかになったという経緯を辿りました。

(このメモは実在自体はしたようですが、会社の決定ではなく単なる draft 文書です。JS を置き換える方針だけでなく、Harmony と呼ばれる後の ES6路線も含めた議論段階の資料である点には注意されたし)

グーグル、JavaScriptに代わるWeb言語「Dart」を開発中か

Dart VM を積んだ chromium である Dartium のプレビューが出るなどもしています。

Dart 1.0: A stable SDK for structured web apps

しかし、最終的にその計画は頓挫します。他のブラウザベンダーからの反発や、既存資産との相互運用性が理由です。ユーザー側にも、dart2js で JS にコンパイルする方がデバッグやクロスブラウザ対応を進めやすいという事情がありました。

Dart for the Entire Web

第3の選択肢

社内では Script#を使いたいという要望もあったようです。一方、C#用の擬似的なランタイムやライブラリを使ってまで、実際のターゲットから離れることには疑問が残りました。

そこで、ターゲット言語から離れるよりも JS 自体を改善するという発想に至ります。JS を土台とし、機能を漸進的に追加できる言語として生まれたのが TypeScript です。

そして、開発中だったエディターはある人物に引き継がれます2。内部向けの Monaco Workbench3や Visual Studio Online 'Monaco'というサービスを経て現在の VSCode へと至ります。 また、エディターを引き渡す際には次の約束を取り付けたそうです。

I made them agree to one thing, which is: when we have enough TypeScript that you could actually use it, please try to use it in building VS Code and give us feedback because we desperately need feedback.

TypeScript が使えるようになったら、それでエディタを作りフィードバックしてほしいという約束です。この約束によって、

  • TypeScript で VSCode を作る
  • VSCode で VSCode と TypeScript を作る

というドックフーディング体制ができます。

Monaco からの手紙

なぜ引用符が付きの'Monaco'と表記されているのか気になった方はいるでしょうか?これにはある事件が関係しています。

2013年ごろにブラウザで使える軽量エディターのサービスとして Visual Studio Online Monaco が公開されます。

Visual Studio Online "Monaco"

しかし、利用状況はかなり厳しく、全世界での MAU は3000人程度だったようです。

そこまで跳ねなかったにも関わらずヨーロッパにある某国から正式にその命名に関する手紙が届いたらしく、引用符をつけて'Monaco'としたことで対応したという嘘のような本当の話があります。

The Story of VS Code | Official Documentary

次回

TypeScript が生まれるに至った歴史的な背景を簡単に紹介しました。ここまでで TypeScript は既存のものを壊さないように、JavaScript のスーパーセットであること、型が実行時に消えることが要件として課せられています。

それに加えてドキュメンタリーではエディタをはじめとした周辺ツーリング体験の実現を非常に重視していたようにみて取れます。

ではそのようなツーリング体験を成立させるにはどのようなことをする必要があるのでしょうか。その解の1つはすでに同じく Microsoft が作っている C#のコンパイラ Roslyn にあります。次回はその Roslyn とそこから生まれた Red Green Tree(赤緑木)という実装パターンについて解説します。

Footnotes

  1. 個人的になぜエディタ自体も JS で作ろうとしたのかは疑問に感じました。Web アプリに JS が必要でも、エディタまで同じ言語にこだわる必要はなくない?と。ドキュメンタリーでは深く触れていないため推察になりますが、アプリだけでなく開発環境まで Web 化するという賭けだったのかもしれません ↩

  2. その人物は、Gang of Four の一人としてや Eclipse で有名な Erich Gamma です。最近 Visual Studio Code: The First Decade というドキュメンタリーも公開されました ↩

  3. TypeScript Origins: The Documentary で実際の画面を見ることができます。よく見ると TS にはない property という構文や、.strという拡張子のファイルが現れています。.strは TypeScript のことで、プロジェクト名であった Strada の頭文字です。 ↩