Haxe使いから見たTypeScript雑感

TypeScript良いですね。世間の流れは完全に動的型付け言語から静的型付け言語+型推論に移ってきていますが、JavaScriptの上にうまくそれを導入してきた感じです。ヘルスバーグはやっぱすごいよね、と。

今後実装される予定のジェネリクスが載ってきたら、better JavaScriptとしては最強言語の一角になりそうな雰囲気ですね。

CoffeeScriptとTypeScriptについて

言語仕様としては正直別物レベルの存在なのだけど、ツールとしての性質(コンパイラがJSとして動作するなど)が大きく似ているため、Web上ではよく対比されてるようです。

TypeScriptが世に出てきてしまった以上、CoffeeScriptは「型付けのできないTypeScriptの出来損ない」みたいな存在になってしまったかなぁと。TypeScriptの出現以前から、CoffeeScriptには採用するほどのメリットがあるのか・プロジェクトがちゃんと継続していくのかといった点に疑問の声が一部で上がっていましたが、その点は顕在化してしまったかな、と。

既にCoffeeScriptを習得している人が、書き捨て~キャンペーンサイトなどの保守期間がごく短いページを作る用途であれば、悪い選択肢ではないと思いますが、これからCoffeeScriptを学習するメリットはほぼゼロに近いと思います。

HaxeとTypeScriptについて

言語仕様としてはTypeScriptとHaxeはよく似ています(共に静的型付け+型推論、構造的部分型:structural subtyping、既存のJavaScriptライブラリへ後付けで型インタフェースを定義できるなど)。HaxeはActionScriptECMAScript 4)ベース、TypeScriptはECMAScript 6ベースということで、どちらもECMAScriptの流れを汲む言語ではあります。

ただし、ツールとしては性質が大きく異なっています。TypeScriptはあくまでもJavaScriptを生成する言語ですが、HaxeはJavaScript以外にもネイティブ(NekoVM)、サーバサイド(PHP、mod_neko、node.js)、C++Java、Flash等を生成することが可能です。そのため、HaxeとTypeScriptは多少は競合する点があるものの、CoffeeScriptのように直接競合することはありません。

現時点のHaxeとTypeScriptを比較して、Haxeを使うメリットとしては、

  • 開発の歴史が比較的長く(2005年~)、開発環境や言語仕様が十分にこなれている。またユーザ数も多い。
  • マルチプラットフォーム
  • inlineやmacro等のパフォーマンスチューニングをわりと手軽に行える(macroが簡単かと言われるとアレだけど、言語仕様レベルでASTを弄る機構があるのが良い)
  • 文字リソースの埋め込みやテンプレートエンジンが標準搭載(HTML生成時によく使う)
  • 条件付きコンパイル(#ifdef)が書ける
  • コンパイラ(+hxml)がビルドツールを兼ねており、余程のことがない限り別のビルドツールを用意する必要がない程度の機能を備えている

逆にTypeScriptの方が優れている点としては、

  • 言語仕様の良さ(ラムダが書きやすいなど)
  • JavaScriptとの連携がしやすい(Haxeでは__js__()関数を使ったインラインアセンブリならぬインラインJavaScriptを書けるが、多少煩雑)
  • ブラウザ上でコンパイラが動作する
    • 未検証だが、コンパイル速度の点ではOCamlで書かれているHaxeの方が有利なのでは?という気もしているが…
  • 開発環境が強力(リリース時点でHaxeの開発環境より整っている感じがある)
  • MSの開発力

といったあたりかなぁと。

今、TypeScriptをやるべきか否か

今後もJavaScriptをやっていく人間は、最低でも情報だけは抑えておくべきでしょう。可能であれば、言語仕様まで抑えておくといいかなと。

ただ、TypeScriptを今すぐ仕事に使えるかといえば、私ならまず使いません。現時点ではHaxeの方が明らかに優っているため、Haxeを選択します。(Haxeを習得してまったのが大きいです。TypeScriptがあと半年早く出ていたら魂売ってた可能性は高いのですが。)

冒頭でも書いた通り、今後ジェネリクスの導入が予定されているなど、TypeScriptは所詮DeveloperPreviewの状況なので、これから言語仕様が変わってくることが明らかです。なので、保守期間の長いプロジェクトであれば、言語仕様に追従してコードを書き換えていく手間がどうしても発生してきます。とはいえ、既に仕様が固まっているJavaScriptをベースにしている言語なので、死ぬほど大きなコードの書き換えが発生するか?と言われると、そこまで大きな変更は発生しないんじゃないかな、とも思っています。静的型付けできるメリットと天秤にかけて、自己責任で使う分にはOKではないでしょうか。

まぁ、これからTypeScriptをガンガン使っていくぞ!とかTypeScriptでワンチャン!だとかいう人は、今からTypeScriptを使うべきでしょう。そうではなく、「TypeScriptっていう便利なつーるがあるらしいよ」程度の認識の方は、1年ほどROMっていて、こなれてきた頃ぐらいに美味しく頂くのが宜しいかと思います。

補足

Haxeの「ユーザ数が多い」というのは、言語コミュニティがしっかりしている、開発実績が十分にある、開発チームに普及させようという意思がある(これ誰が使ってんの?という状態ではない)という意味合いで、猫も杓子もHaxe使ってるぜ!という意味ではないのであしからず。