xFramework NX & Node.JS

ども、小堤です。

久しぶりのブログです。

先日から、TwitterでちょいちょいいってるNXの話。
まぁNode.JSの話なんですが。

Ext.Platformが、Ext JS 4.0/Sencha Touchの共通コアになることが発表されましたね。
まぁ、Ext Coreじゃなくて、今後このExt.Platformなのかな?かなかな?って思っています。それか、そのさらに中にExt Coreになるんか・・。まぁどっちでもいいんですが。

これのソースコードリーディングをしながら、ぼちぼちいろいろ試していて
最近、Node.JSも触っていて、なんか、Node.JSってjQueryとかExt JSとかそのまま使えるわけもなく。

でも、クラスの継承とか、セオリーとか、Sencha Touchっぽく実装したいわけで。

なので、xFramework NXとして、Ext.Platformの一部移植しつつ、xFramework PXっぽくさらにWebSocketサーバーとか簡単に作れるように
いまから、準備していこうと思って、先日Gitに切りました。

https://github.com/xenophy/xFrameworkNX

また、コア部分作ってる段階なんで、JSコード大好きなひとじゃなければ、つまらないかもね。

Node.JS は requireの戻り値で、オブジェクトに読み込んだ内容を設定するみたいな。

sys = require(‘sys’);

みたいな、書き方をよくするんですが、なんか、きもいー。
まぁ、きもくないんでしょうけど、きもいー。

あと、何かにつけコールバック関数で処理をおこなうんで、jQueryみたく、ネストの嵐、ネストは半角スペース2で?みたいな世界になりそう。

だったので、NX.js読み込めば、Ext オブジェクトみたく、グローバルスコープにNXオブジェクトが生成されて、extendやら、isXXXやら使えるようなところまではできています。
また、関数オブジェクトの数が肥大化することは必死なので、NX.test.UnitというNX.extendで継承したクラス前提のユニットテストも作成しました。

んで、これでユニットテストしながら、ちゃかちゃか作っていくわけですね。

まぁ、来年の春くらいには、使い物にしたいなぁと、時間見つけてはコーディング。

で、Node.JSさわってて、まぁそうだわなー、そうなんだーっていう点。

グローバルスコープは、windowじゃなくて、global

まぁ、足り前ですが。windowじゃないんですね。ついつい。

argumentsが配列ではなく、オブジェクト

こいつのせいで、そのまま動かないっていうのは多々あるのかも。
argumentsはブラウザだと配列ですが、Node.JSではオブジェクトです。なんか、特殊なオブジェクトってかんじ。
何が、特殊かというと、Objectはlengthプロパティがないけど、argumentsのオブジェクトは、互換性を考えてなのか、lengthが使えます。
引数の数を感知できるわけですね。

Function.callee.caller.nameが使えない

calleeまではオブジェクト存在するんですがねー。
callerもか。nameとれないんですよ。
自分自身の関数名を取得する手段が、いまのところ見当たらナス。

まぁそんな感じで、Node.JSもぼちぼち、触っていっています。
本当は、xFrameworkNX じゃなくて、Sencha NXとかSencha Serverとかいう名前にしたかったんだけど、さすがに怒られるかな(笑)と思って、自重しました。

ちなみに、READMEもまだかいてないし、ライセンスも書いてませんが、ライセンスはMITです。
なので、Ext.Platformのいいところはぱくるし、動かないところは、Node.JS用に書き直します。

あと、地味にPHP.JSの一部もNXスタイルでリライトして取り込もうと思ってます。
あんまりやり過ぎると重くなるかなぁ、と思うけど、結局NXオブジェクト取り込んでサーバー起動時の負荷で、リクエストに対する起動速度じゃなくなるのが、Apache + PHPと違うので、かなり動作も期待。

地道に作ります。
来年くらいから、小さい案件はNode.JSでNXで、WebSocketで、Ajaxで、みたいな感じで、ぱぱっといけるようにしたいなぁ。
ちなみに、ベース作るだけで、今年終わりそうだけど、UIは、HTML・Ext JS・Sencha Touchを考えています。
なんで、テンプレートエンジンもつくらねばーねば。

とりあえず、WebSocketサーバーできたら、Sencha Touchで簡易チャットだな(笑)

xFramework NX & Node.JS