2007-11-22呑み足りない
JavaScriptの実行環境と周辺についての雑文
JavaScript, Memo | |
何となく最近思ってる事を書きとめてみた。
WSHと拡張性
WSHは現在5.7がlatestだけど、メジャーバージョンはもう上がらないみたい。
今後は細かなセキュリティ上のfixしか行われないようです。*1
なので面白い機能が追加される事は期待しない方がいい。
WSFとCLIアプリ
WSFを使うとCLIアプリが作りやすいんだけども、結局cscriptから叩かないと動かない。これはちょっと不便。
本当ならexe化出来たらいいんだけど、公式ではそういう物は無い。
あと問題なのがcscriptでワンライナーが書けないって事。
Perlで言うところの-eみたいな奴の事。
最もやろうと思えばWSFを使ってそういうワンライナーが書けるwrapperスクリプトは実現可能。
そのうち気が向いたらやる。
ただREPLがあれば済むし、既にそういうコードは書いて良く使ってるので要らないかもw
WSCの可能性
WSCはWindows Script Componentの略で平たく言えば、ActiveXオブジェクトを任意のActiveScript(JScript/VBScript)で実装出来るって枠組み。
但し、任意のインターフェースを実装する訳じゃないのが痛い。
それが出来たらBHO*2をJScriptでとか出来たのに。激しく残念。
さらに問題なのがActiveXObjectのイベントハンドラを作る枠組みとして、WSHの場合は
WScript.ConnectObject(foo, "foo_"); function foo_OnSomeEvent() { // something }
みたいな感じで書けるんだけども、これがobject要素のevent属性をtrueと言う形でしか実現出来ない。
つまりscriptで宣言したActiveXObjectに対してイベントハンドラを定義する仕組みが無い。
これは泣ける。
ScriptXのEventSinkを使うと出来るんだけど、この機能が不安定っぽぃし野良COMだしなぁ。
とは言え、HTC(HTML Component)と大体同じように拡張機能を提供出来るのは面白いし、実装を外部化出来るので、呼び出しはFactoryパターン、つまりActiveXObject経由で行いつつ、実装は裸のjsファイルを使いまわすなんて事が出来る。
特定のディレクトリ以下にjs, wsc, 必要ならtlbファイルなんかを集めて汎用的に使うライブラリなんてのも出来るっちゃ出来る。これは実はちょっとやってみたい。
WSH関連のまとめ
と言う訳でWSHは一通りやると分かるけど面白い事が出来る事は間違い無いけど、無茶しようとする場合は
とかでもやらない限りは規定の枠組みを拡張ってのは出来ない。
既にあるActiveXはそれなりに色んな用途に使えて面白いけど、如何せん情報が少なすぎる気がする。
それとJScript.NETは避けて来てたんだけど、そろそろ試してみようかなぁ。
.NET系のライブラリはWSHからもActiveXObject経由で使えるんだけども、まぁJScript.NETもやってみないとよしあし分からないし。
HTAについて
これは今で言うAirとかXUL RunnerとかXAML辺りの先駆けと言って良いテクノロジで、ぶっちゃけhtmlをIEで開いただけの物ってイメージで差し支えない。*3
なんでUIはHTML+CSSで記述する訳なんだけど、これらのパーツを作るライブラリがいまいち無いのが問題。
こういうのもあるけど、人並みなGUIを作るほど揃ってる訳じゃなかった。
これこそHTC作って共有すべきなんだろうなぁ。HTCでXULで定義されてる要素を実装とかキチガイじみた事でもしたら、ある意味神だww
かと言っていわゆるAjaxとかって言う総称で呼ばれてるリッチなUIライブラリとか全然使う気になれない。
HTAはそんな訳でほとんどやってない。本当はちょっとやりたいんだけども。
XAMLのがいいんじゃないかなぁ、まだやってないけども。
あといわゆるVBとかのUIを構成するコンポーネントを配置すればいいのかもしれないけど、これこそobject要素でコンポーネントを埋め込んで、id属性名で取得して自前で設定していくなんて苦行以外の何者でもないだろう。しかも何がどれだかさっぱり分からんしwww
あとobject要素でUI構成が隠蔽されてたら、マークアップしてる意味がねぇ。。。
そもそも論だけどHTMLは語彙も少ないし、GUIを記述する為の物では本来無いので、その語彙の中でGUIを作るって土台無茶がある。
XUL Runnerとか、Mozilla系の事
とにかくXULは今練習中なんだけど、XUL Runnerで動くアプリケーションは可能性を感じる。
- XUL
- XBL
- XPCOM(PyXPCOMも含め)
辺りを組合すとUIに大して相当突っ込んだ機能を盛り込む事が可能。
今はXBLやってるんだけど*4、HTC/Behaviorと非常に似てる。と言うかほとんど同じ。
Mozilla系は思うところはたくさんあるんだけど、Firefox拡張は便利になるのは分かるけど入れすぎると重たくなるんで、結果たくさん入れづらいと言う弱点がある限りは、それだけじゃなーって感じがする。
ま、必要な物(国際化、マルチプラットフォームなどなど)は全て揃ってるので他のデスクトップアプリケーション系の物より可能性はあると僕は思ってる。
XPCOM
kuたんが作ってくれたWiiRemoconもそうだけどC++使えばOSに近い部分のglueコード書きさえすればブラウザやXUL Runnerアプリの可能性をより高められるし。
全てはそこからだ。
Mozilla系で物凄い不満な点
拡張用に再利用可能なライブラリってのでまともなものが無いんだよね。
まだ試してないけど拡張ってXPCOMだけを実装して配布とか恐らく出来ると思うんだけど、こういう流れは無いよね。
あとinstall.rdfにrequires要素ってのがあって、依存性のある他の拡張を指定する記法があるんだけど、これもどこまでそういった用途に使えるか分からない。
JSって何かすると基本的にGlobal領域を汚染しやすいのがネックで、namespaceも自前で解決しなきゃなんで、XPCOMのような枠組みは有効なのかなとは思ってるんだけど、その辺りを整備してホスィなぁ。
この辺り日本のMozilla Hacker達がどう思ってるとか是非に聞いてみたい。
AppleScriptとかOSXとか
事情は余りよく知らないしCarbonがどうとかって話はほとんど知らないけど、どういう訳かSafariはAppleScriptからdo JavaScriptって命令でJSのコードを流す事が出来るみたい。
これ使うと相当面白い事出来そう。
ただAppleScriptのシンタックス覚えるのがうんざり。
AppleScriptでやってる事そのものがJavaScriptで書けたらいいのになー。そういう事出来ないのかなぁ。
これだけなら、http://developer.mozilla.org/en/docs/Components.utils.import
が有用じゃないでしょうか。Fx3 からになりますが。
http://mxr.mozilla.org/mozilla/source/js/src/xpconnect/loader/XPCOMUtils.jsm
サンプルと言うか、内部で使われてますが
http://mxr.mozilla.org/mozilla/source/js/src/xpconnect/loader/JSON.jsm
http://mxr.mozilla.org/mozilla/source/js/src/xpconnect/loader/ISO8601DateUtils.jsm
本当の解決は Mozilla 2+JS2 以降になるんでしょうが…
どっちかって言えばライブラリの共通化みたいな事が行われるといいなーと思う訳です。
拡張に便利なライブラリとか、上とか今ひとつ言いたい事がわからんですが、
http://developer.mozilla.org/en/docs/FUEL
をもうすこし出来ることを多くしたいというような感じでしょうか。
もっともこの辺の動きは、
http://developer.mozilla.org/en/docs/nsIScriptableIO
こういうのもあったりして、あんまり統一性がないまま各個人がすすめてるんで、なかなかねぇ…昔よりはだいぶましにはなってきてるんですが。
端的に言っちゃえばMozilla内だけでもいいからCPANみたいなのがあるといいなと言えば分かりますかねw
nsIScriptableIOは初耳でした。