読者です 読者をやめる 読者になる 読者になる

WEB+DB PRESS Vol.75でTypeScriptの記事を書きました!

本日発売のWEB+DB PRESS Vol.75JavaScript連載にて、TypeScriptの記事を書かせていただきました。

WEB+DB PRESS Vol.75

WEB+DB PRESS Vol.75

ちょうど今週TypeScript 0.9がリリースされましたが、執筆内容も0.9をベースに書いていますのでご安心ください。

執筆していた4月、5月は0.9の開発中ブランチを追いながら「コンパイル壊れた!」「Update LKGが来ない!」などと大変な思いをしましたが、ちょうど良いタイミングでリリースされたので報われた気分です。

内容はこんな感じ

  • altJSがなぜ盛り上がっているのか?
    • 「Webにおけるアセンブリ言語」としてのJavaScript
    • CoffeeScriptが実現したもの、しなかったもの
  • TypeScriptとは?
  • 開発環境の構築
  • 静的型付けの何がうれしいのか?
    • コンパイル時エラーチェックとIDEによるコード補完
    • 型宣言と型推論
  • クラスとモジュール
  • アローファンクション
  • ジェネリクス
  • 既存のJSとの共存

特に、altJSにまつわる最近のJavaScript位置づけや*1JavaScriptで静的型付けがあるとどううれしいのか?といったあたりは画面キャプチャも交えながら重点的に解説しました。

連載1回分なのでTypeScriptの文法を網羅はできませんでしたが、全体感はつかめる内容かなと思いますのでぜひご一読下さい。

補足: 周辺ツールの0.9の対応状況

公式のVisual StudioPlayground、npmモジュールのコンパイラは0.9で動きます。 grunt-typescriptプラグインもいち早く0.9対応されました。素晴らしい。

ただ、WebStormはまだ0.9に対応してなくて、自分も含めた一部ユーザーから阿鼻叫喚の声が漏れています。 それから宣言ソースファイルのオープンソースリポジトリであるDefinitelyTypedは、0.8系と0.9系が混ざっていて、0.9系への修正も適当なのがもりもりマージされるのでちょっとカオスな感じに。怪しいのがあればプルリクを投げましょう。

結局TypeScriptってどうよ?

こっからポエムです。

TypeScriptの特徴は大きく2点だと思っていて、

  • 静的型付け
  • 未来と過去への互換性の高さ

静的型付けは、必要性を感じている人には喉から手が出るほど欲しいもので、Closure Toolsどっぷりの私としては、もうプロダクトコードでは型無しゆるふわJSは書きたくないなと思っています。

ただjQueryのメインユーザー層のような開発者のマジョリティには「静的型付けが!」とか言ってもすぐには響かないとも思っていて、そこは後者がキーになるのかなと。

未来への互換性: ECMAScript 6 準拠

TypeScriptはES6との互換性をうたっていて、現状ではクラス、モジュール*2、アローファンクション、可変長引数なんかがES6から導入されています。

別の見方をすれば、TypeScriptってES6のShimでもあるわけです。この調子でconst, let, 分割代入、ジェネレータ、MethodDefinitionなんかも実装して頂いて、かつてのjQueryクロスブラウザDOM操作ライブラリとして普及したように、TypeScript as ES6 shim for cross browserみたいなことになってくると面白いと思います。まあ言うだけなら簡単ですけどねw

過去への互換性: JSからの移行とライブラリとの接続性

ES6に準拠ってことは、必然的に過去に書いた普通のJSでもTypeScriptとしてだいたい動くわけです(ES6が仕様として壊れてなければ)。TypeScriptでは型がオプショナルっていうのも移行の敷居が低い理由です。

それから、他のTyped系altJSって結構外部ライブラリを使うのがちょっと面倒だったりするんですが、TypeScriptでは割とあっさり動くのも良いところですね*3

ただ既存のJSライブラリってだいたい型指向じゃないから、動くは動くけどany型ばっかりみたいな、静的型付けの潜在能力を引き出せないという問題があります。これに対してClosure Compilerのチームが出した回答は、フルスタックの型指向ライブラリClosure Libraryを自前で作るという力技でした。

もしアンビエント宣言としてClosure LibraryのJSDocアノテーションが読めれば、いきなりフルスタック型指向ライブラリが手に入るわけで、こういう夢が広がるのがオープンソースの良いところですね。

TypeScriptのこれから

公式のロードマップによると、1.0までは安定性向上に集中するみたいです。

つい数日前までは0.9.1でモジュールの仕様をES6に合わせるって書いてあったんですが、1.xに先送りになってますね。たぶん、思ったより0.9の安定性が低かったんだと思いますw

いずれにせよ、1.xで "We also expect to add more ES6 features to TypeScript post 1.0" と書いてあるので楽しみです。

さっぱり話がまとまりませんが、そんな感じでTypeScriptには個人的にも期待してますし、世の中的にも1.0がリリースされるころには少なくとも今のCoffeeScriptぐらいには流行るんじゃないかなぁと思ってます。


ところで、WEB+DB PRESSJavaScript連載がご好評につき2年目に突入しました。大変ありがたいわけですが、ネタ切れしないようにがんばります。

あと、これまでの連載も収録されたWEB+DB PRESSの総集編が発売されましたので、よろしければこちらもどうぞ。本棚がスリムになるのでおすすめですよ。

WEB+DB PRESS 総集編〔Vol.1~72〕 (WEB+DB PRESS plus)

WEB+DB PRESS 総集編〔Vol.1~72〕 (WEB+DB PRESS plus)

*1:altJSガチ勢の諸氏におかれましては、投げる場合は柔らかめのオノでお願いいたします。

*2:モジュールはES6の文法とはちょっと違いがあります。

*3:参照: 静的型付けをもつJavaScriptへのトランスコンパイル言語を味見してみた その2 | Developers.IO