Personal tools
You are here: Home ブログ sato_t Categories Rhino
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent comments
Re:マルチパラダイムデザイン sato_t 2008-10-26
Re:マルチパラダイムデザイン anaka 2008-10-25
 
Document Actions

Rhino

Up one level
JavaによるオープンソースのJavaScript実装、Rhinoに関する話題

Document Actions

rtype.js - prototype.js for Rhino

Rhinoブーム到来 だそうです。

Rhino絡みのエントリは初回なので軽く説明しておくと、 Rhino とはJavaによるオープンソースのJavaScript実装です。JavaScriptを単体で実行できる他、Javaアプリケーションに組み込んだりもできます。Mozillaがメンテしています。JDKにもバージョン6から同梱されるようになり、OpenOffice.orgでも利用されているようです。ちなみにRhinoという名前はオライリーのサイ本から付けられたそうです。

話は変わって、何年か前にAjaxが流行り出した頃からJavaScriptライブラリが続々と登場しています。もはやデファクトスタンダードと言っても過言ではないprototype.jsを筆頭に、Dojo、Yahoo! UI、ExtJsなど多様な用途の様々なライブラリが利用できるようになり、JavaScriptによるWeb開発はずいぶん容易になりました。一方で、これらのライブラリはあくまでブラウザ組込みのJavaScript処理系での動作を意図しており、RhinoやSpiderMonkeyなどブラウザ以外での動作を念頭に置いたJavaScriptライブラリは見かけません。

というわけで、prototype.jsをRhinoで動くように改造してみました。名付けてrtype.js。昔の某弾幕系シューティングゲームと名前が似ているのは偶然の一致です。多分。

http://sourceforge.net/projects/rtype/

RhinoだとJavaのクラスライブラリ使えるから外部ライブラリいらないじゃん、とかいう突っ込みはなしの方向でお願いします。もともと実用性はあまり重視していなくて、prototype.jsをRhinoで使えたら面白いかな、という発想をそのまま実行に移しただけなのです。rtype.jsの半分はネタでできています。とは言っても、JavaScriptでオブジェクト指向っぽいプログラミングがやり易くなるとか、それなりのメリットはあると思いますが。

機能的な追加はありません。ブラウザ固有の機能(HTML-DOMアクセスとかAjaxサポートとか)を一方的に削っただけです。作業時間の9割は、UnitTestをRhino上で実行できるようにすることに費やしました。

とりあえず公開しましたが、まだUnitTest全部通ってません。ので、バグあります。α版です。人柱版です。

くれぐれも、クリティカルな用途には使用しないで下さい。

くれぐれも、クリティカルな用途には使用しないで下さい。

大事なことなので2度言いました。

商用製品であればとても公開できる段階ではありませんが、趣味ベースのプロジェクトではノリと勢いが重要です。完成度が高まるまで手元に置いておいたら熱が覚めてしまうかもしれません。公開してしまえば、物好きな人がソース読んでバグ見つけてパッチ送ってくれるかもしれません。

現時点でのバグはまだ整理できていませんが、通らないテストのほとんどはハッシュの順序性によるものです。prototype.jsのテストコードを見るとハッシュ内の要素の順序が保持されることを前提に書かれているようですが、Rhinoでは順序が保持されないようです。なので、

var Fixtures = {
  many: {
    a: 'A',
    b: 'B',
    c: 'C',
    d: 'D#'
  }
};

testInspect: function() {
  this.assertEqual("#<Hash:{'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D#'}>", $H(Fixtures.many).inspect());
}

上記のようなテストコードを実行すると

Failure: assertEqual
expected <'#<Hash:{\'a\': \'A\', \'b\': \'B\', \'c\': \'C\', \'d\': \'D#\'}>'>, actual: <'#<Hash:{\'c\': \'C\', \'d\': \'D#\', \'a\': \'A\', \'b\': \'B\'}>'>

みたいな引っかかり方をします。ハッシュの順序性保持は実装依存なので、もしかするとRhinoの仕様なのかもしれません。

とりあえず近々にやりたいことリスト

  • 既知バグを整理してSF.netのTrackerに登録する
  • 本家と同じく、rake test一発でテストが全部実行できるようにする
  • 現状皆無なドキュメントを整備する

今後ですが、本家のバージョンアップに追随するかどうかはまだ全く考えていません。バージョンアップ内容と佐藤の忙しさ次第です。こんないい加減なプロジェクトですが、手伝ってもいいよという奇特な方がいらっしゃいましたらお声掛け頂ければ幸いです。

Category(s)
Rhino
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/sato_t/rtype-js-prototype-js-for-rhino/tbping

ありえるえりあ勉強会@五反田~テスト編~ 資料

1/29にウノウさんとアリエル合同で実施したピザパーティ勉強会で、ウノウの山本テスト番長の前座として講師を拝命したので話をしてきました。会場にいらっしゃった皆様、ニコ生で見ていただいた皆様、拙い発表でしたがいかがでしたでしょうか。ニコ動やTwitterではとても嬉しいコメントがいくつもあり、とても励みになりました。ありがとうございました。

勉強会の資料を公開します。

三番目の資料に出てくるRhinoUnitのソースは以下に置いておいたので、ご興味のある方はご覧下さい。

RhinoUnit

RhinoUnit絡みで、1つ話しそこねたことがあるのでここで補足します。デモではJavaScriptのコードをテストする部分しかお見せしませんでしたが、RhinoUnitを使ってJavaのプログラムをテストすることもできます。JavaScriptは構文が柔軟でコンパイルも要らないといったメリットがあるので、テストケースの作成や保守が楽になるんじゃないかと考えています。ちょうど山本番長のお話にも、テストにスクリプト言語を使う話が出てきました。このあたり、突っ込んで考えていくと面白いかもしれません。

ウノウラボで山本番長の資料も公開されています。絶版の超プレミア本の内容に触れられるまたとない機会です。是非ご覧下さい。

ありえるえりあ勉強会@五反田~テスト編~ 発表資料

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/sato_t/3042308a3048308b3048308a304252c95f374f1a-4e9453cd7530-30c630b930c87de8-8cc76599/tbping

Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.