Doctor JS is a genius. He'll analyze your JavaScript code, complete with polymorphism, prototypes, exceptions and callbacks.

Mozilla Labsから実験的な新サービスDoctor JSが公開された。Doctor JSはJavaScriptのソースコードを静的に分析して型推論の結果を表示するサービス。任意のJavaScriptソースコードを分析して、変数やまたは関数の返り値などの型を示してくれる。JavaScriptではプログラミングの段階では厳密な型付けを要求されない。Doctor JSを使うとどの変数がどの型に対応するかを実装段階でチェックできる。ベースとなっているのはDimitris Vardoulakis氏らが開発したCFA2と呼ばれる関数言語向けのフロー分析システム。Doctor JSはCFA2をJavaScriptに適用することで構築されている。

Doctor JSを使った分析はデモページから実施可能。ページの左側に設置されたテキストエリアにJavaScriptソースコードをコピーし、真ん中の虫眼鏡ボタンを押す。分析した結果が右側のテキストエリアに表示される仕組みになっている。ただし、すべてのJavaScriptソースコードが分析できるわけではない。試用してみた限り、ある程度のサイズを越えてくると分析できなくなるような動きを見せる。

Doctor JSサイト

Doctor JSサンプル実行例

Doctor JS分析例その1 (マイコミジャーナルJavaScriptを分析)

Doctor JS分析例その2 (マイコミジャーナルJavaScriptを分析)

Doctor JS分析例その3 (マイコミジャーナルJavaScriptを分析)

Doctor JS分析例 jQuery 1.4.2 - 分析失敗例

JavaやC/C++は型付けが厳しい。一方、JavaScriptのようなスクリプト言語では厳密な型付けをソースコードレベルで実施する必要がない。こうした動的言語では型に関するプログラミング上の煩わしさに手間をとられることがなく、高速な実装を実現できるという特徴がある。一方、実行時に型を特定することになるため、思いもよらない問題が発生するケースや、型が厳密なコンパイル型言語と比べて実行性能を発揮しにくいという欠点もある。

Doctor JSを使えば、JavaScriptでコーディングしつつ、それぞれの変数や関数の型を意識したプログラミングができるようになる。型が厳密であることにはそれなりの利点があるため、Doctor JSをうまく活用できれば動的言語の便利さをうけつつ、型付けが強い言語の方法論も適用できるようになる。またDoctor JSは、他人が実装したJavaScriptソースコードを読む場合の手助けとしても利用できる。