最近の Web と Javascript デバッガは強力で,ブラウザと密に統合されている – ただしそれは デバッグ対象のコードが手作業で記述された,平坦なJavascript の場合に限った話だ。今日では,実行あるいはデプロイされる Javascript の多くが開発者ではなく,ソフトウェアによって生成されている。そのようなコードの大部分は縮小されているか,あるいは圧縮されたコードだ。このようなファイルに対して,通常はソース行を単位とするブレークポイントをセットするのは至難の技か,あるいは不可能だ – 元になったソースがきれいにフォーマットされたものであっても同じことだ。
もうひとつの問題:Javascript はコンパイル言語の出力ターゲット としても注目を高めてきている。Javascript 仮想マシンの普及がその主な理由だ。CoffeeScript はそのような新言語の一例であり,さらに先日発表された ClojureScript は,Javascript にコンパイルされる形式の,独立した言語の例だ。これらの言語で記述されたコードのデバッグでは,ブレークポイントの設定や console.log()
メッセージ,その他言語依存の機能には,元になった言語ではなく 生成された Javascript コードを扱うことになる。
これは新しい問題ではなく,JVM 言語にもかつて同じ問題があった。その成果が JSR-045 - 他言語のデバッグサポート となり,JRuby など JVM へのコンパイルを行う様々な言語で使用されている。
解決策はソースマップ (Source Maps/SMAPs),すなわち,ソース言語とターゲット表現間をマップするファイルだ。Google の Closure コンパイラには,縮小された出力 Javascript ファイルの SMAP ファイルを生成する機能がある。ただし現時点で SMAP ファイルを読むことができるツールは,Firebug 拡張である Closure Inspector に限られている。
Mozilla と WebKit の両プロジェクトでは,それぞれのデバッグ機能で SMAP をサポートする作業を開始している。
Mozilla は SMAP とデバッグ機能に関する綿密な計画資料 を作成した。資料には,ソースマップの別領域に関する言及も見られる – SASS あるいは LESS など,CSS のスーパーセットによってコンパイルターゲットとして使用される CSS である。
この作業をトラックする Mozilla のチケットが Bug 618650 – JS ソースに変換されたソース言語と JS とを関連づけるマップ であり,計画資料ではターゲットリリースとして Firefox 9 がリストされている。
WebKit も SMAP サポートを計画しているが,実際に扱う SMAP フォーマットは Closure Inspector のフォーマットの拡張版になる可能性がある。同様な検討を Mozilla も行っていて,Bug 63940 – Web Inspector: デバッガのコンパイラソースマッピングサポートのドラフト実装 がその機能のトラックである。
InfoQ ホームページ ニュース Mozilla と WebKit,縮小された JS や CoffeScript など JS 言語のデバッグサポートを目指す