2013年12月17日火曜日

「Dart」がECMAで標準化されると聞いて即試してみた。今すぐ導入する必要はあるか?

今日は「お!」と思うニュースがあった。何と、GoogleがJavascriptの後継として開発しているDartが、Javascriptの標準化も行っているECMAで標準化されることになったという。

Dart News & Updates: Ecma forms TC52 for Dart Standardization

これは、DartもJavascriptと同様、標準化作業を経た後に様々なブラウザに搭載されるようになる可能性を示している。

Dartには興味があったが、Chromeにしか搭載されないようじゃしょうもないと思ってノーチェックだった。しかし、こうなると。。。

GoogleはJavaでOracleと問題になってるし、かなり前から脱Javaしたかったはずだ。もし標準化が上手く行って普及の兆しが見えるとしたら、ブラウザもサーバーサイドもAndroidもみんなJavaVMの代わりにDartVMが搭載されるようになって、うわ〜!!っていう未来が見えてくる。

上の記事ではこう言っている。

Dart is now officially stable and mature enough for production use.

本当か?確かめる必要がある。いつやるの?今でしょ?ということで、早速Dartのチュートリアルをやってみた。1時間程度で終わるというので(^^);

Try Dart | Dart: Structured web apps

このチュートリアルで感じたことを挙げてみようと思う。


JavaとJavascriptを知ってる人はすぐ慣れると思う

classとかfunctionがオブジェクトとか、両方の特徴を持ってる感じ。もっと言っちゃえばActionScript3に近い感じ。


DartEditorのフォーマッターが貧弱過ぎる(´・ω・`)

一応リファクタリングはできるんだけどねぇ…


ブラウザへのアクセスはJSと大差ない感じ
window.localStorage[KEY] = saveValue;


クラスをJSONから構築できるの(・∀・)イイネ!!
Class.fromJSON(String jsonString)


言語レベルでdeferredがサポートされてる感じでコールバック地獄にハマりにくそう
HttpRequest.getString(path).then(anyFunction);


jQuery的機能が言語にビルトインされている
SpanElement element = querySelector('#elementName');


DartVMが無いブラウザでも本当に動く

DartをJavascriptにコンパイルすると、
〜.dart.js
〜.dart.js.deps
〜.dart.js.map
〜.dart.precompiled.js

というファイルが自動的に作られる。HTMLの方ではこれらのファイルを直接読み込む必要はない。これだけ。

<script type="application/dart" src="〜.dart"></script>
<script src="packages/browser/dart.js"></script>
この2行のコードによってJSモードにするかDartモードにするかを環境によって自動的に切り替えていると思われ。


Dartを使うからといってJSが使えないということは無い

「Dartが動く=JSも動く」だろうから、都合のいいところだけDartで作って後は追々Dart化するとかでもアリかも。


DartからJSを呼ぶこともできる(dart:js)
context.callMethod('alert', ['Hello from Dart!']);


Angular.dartがある!

どちらもGoogleが作っているだけに?


Bootstrap3.0のDart版がある!

まだ全てのコンポーネントが移植されたわけじゃないけど、そのうち完成しそう。jQueryのDart版でDQueryなんてのも一緒につくっちゃったっぽい(^^)
Bootjack and DQuery


即導入か?

DartからJSのプログラムにアクセスできるので、既存のプロジェクトをDartで書きなおすことは不可能ではないと思う。しかし、様々なところで非ダイレクト感が出てきてストレスを感じるようになりそうな気がする。

やはりDartで作るなら基本Dartで。JSのライブラリに依存してるならそれをDartに移植するくらいの気合が必要だと感じた。

そうしないと、Dartと既存のライブラリで機能の重複が起こる。例えば、DartにはjQuery的な機能がすでに備わっているけれど、他のライブラリがjQueryに依存しているために仕方なく読み込む。。。みたいなことになりかねない。

というわけで、既存のプロジェクトを書き直すのは今のところまだまだリスクが高いと感じた。

しかし、DartはJavascriptではない未来のWEBアプリケーション開発の地平を見せてくれていると思う。大いに期待したい。