イントロダクション
まずは、私達がどのようにTypeScriptを使ってきたかを簡単に紹介します。
2012年の終わり頃から最近までの約1年半TypeScriptを使ってあるプロダクトの開発をしてきました。
作っていたものは、SPA(シングルページアプリケーション)で、クライアント側の構成はこんな感じです。
- TypeScript
- RequireJS(AMD)
- Underscore.js(便利)
- Durandal(SPAフレームワーク)
- Knockout.js(ModelとViewの双方向バインディング)
AltJSは過去にもいくつか使っていて、
今回はなぜTypeScriptにしたのかというと、一言でいえば「流れがきていた(*1)」ということです。
*1 :
・EcmaScript6の先取りができる
・(頼りなくても)型が欲しかった
・Microsoftがメンテナンスしている
こんな理由で約1年半使ってきて感じたTypeScriptのデメリットを書きます。
TypeScriptのデメリット
- コンパイルが遅い
- コンパイラのアップデートの追従にコストがかかる
1. TypeScriptはコンパイルが遅い
最終的にこのプロダクトでは、約500個のTypeScriptのファイルが作られ、コンパイルの時間が20秒程度。1年前に買った15インチ Mac book Pro Retina(*2)で、です。
*2 :
- プロセッサ: 2.7 GHz Intel Core i7
- メモリ: 16 GB 1600 MHz DDR3
- ディスク: SATA 6 Gbit/s SSD
- TypeScript version 0.9.1.1
星の数ほど「コンパイル遅い」と口にしてきました。
ですが、JavaScriptだけを使った場合の以下の状況よりは格段に良いと言えます。
a. ブラウザで対象画面を開いて、Syntaxエラーを確認するのにかかる時間
「メソッド名をTypoしている…」
これを確認するのに程度に差はありますが、1分はかかるでしょう。さらにテストケースを追加するなら、5分は余計にかかるでしょう。
TypeScriptなら、ほぼ全てのSyntaxエラーは静的なチェックにより解消されます。
b. ブラウザで対象画面を開いて、対象のアクションを実施し、scriptエラーを発見するのにかかる時間
「ここにはNumber型が来る想定だったのに…」
これも程度に差はありますが、確認に1分はかかるでしょう。
このような実行時例外は型チェックにより解消可能な場合が多いです。
動作確認時間に、本質的でないテストケースの追加…、
コンパイル時間の20秒がとても短く感じられます。これは開発者が増えるほどより大きな効果となるでしょう。
2. TypeScriptコンパイラのアップデートの追従にコストがかかる
大きな理由はまだ枯れていないということです。
開発を開始したころ、0.8.1を使っていました。
初めのうちはコードの量が少なく、リリースごとの変更に追従できていましたが、0.9から 0.9.1.1 へのアップデートは時間がかかりました。
- 対応時間: 4人日
- 対応期間: 2週間(0.9.1.1のリリース日からだと、1ヶ月と2週間)
0.9.1.1のバグ報告等の情報収集にリリースから1ヶ月程度導入を見送り、各開発者のコードベースが落ち着くのを待ってアップデートを行った為、適用が完了するまでに期間がかかりました。
開発も一段落するころ、バージョン0.9.5がリリースされましたが、互換性の無い変更による影響が大きく、対応にはさらに倍の時間が必要になると考え導入はしていません。
これからも使いたい
開発の終わりに開発者全員にアンケートをとったところ、「これからもTypeScriptを使いたい」が満票を獲得しました。
開発者の皆さんはTypeScriptが好きなようで、次のプロダクトでもAltJSにはTypeScriptを使おうと思っています。
Welcome to TypeScript
http://www.typescriptlang.org