SpiderMonkey

Google Maps API バージョン2リファレンス(意訳とサンプル)に触発されてJavaScriptを使い始めたのですが、コードを書く前にメソッドの動作を確かめる、そのためだけにいちいちhtmlを書いてブラウザで動かして…というのが非常に面倒くさいです。

というわけで、ブラウザを使用せずにスタンドアロンで動かせるJavaScriptの実装を探してみたら、SpiderMonkeyというものを見つけました。

これは、Mozilla の C による JavaScript 実装です。FirefoxJavaScriptエンジンとほぼ同等の動作をするというのがいいですね。

自分が使っているDebianでのインストール方法は以下の通り。

# apt-get install spidermonkey-bin

このDebian用バイナリだと、readlineライブラリにもリンクされているので、履歴等が使えて便利です。

インストール後に"js"コマンドを実行すると、irbのようなインタラクティブシェルが起動します。

$ js
js>

Dateオブジェクトの作成を試してみるとこんな結果になりました。

js> new Date("2006/8/30")
Wed Aug 30 2006 00:00:00 GMT+0900 (JST)
js> new Date("2006-8-30")
Invalid Date
js> new Date("2006 Aug 30")
Wed Aug 30 2006 00:00:00 GMT+0900 (JST)
js> new Date("2006 8 30")
Invalid Date

JavaScriptライブラリを使用する場合は、loadで呼び出します。

js> load("prototype.js")
prototype.js:880: ReferenceError: document is not defined
js> Prototype.Version
1.5.0_rc0

現在の実行環境ではdocumentオブジェクトが定義されていないのでエラーが発生していますが一応読み込めているようです。

このloadメソッドはhelpに記載されていました。

js> help()
JavaScript-C 1.5 pre-release 6a 2004-06-09
Command   Usage                  Description
=======   =====                  ===========
version   version([number])      Get or set JavaScript version number
options   options([option ...])  Get or toggle JavaScript options
load      load(['foo.js' ...])   Load files named by string arguments
print     print([exp ...])       Evaluate and print expressions
help      help([name ...])       Display usage and help messages
quit      quit()                 Quit the shell
gc        gc()                   Run the garbage collector
trap      trap([fun, [pc,]] exp) Trap bytecode execution
untrap    untrap(fun[, pc])      Remove a trap
line2pc   line2pc([fun,] line)   Map line number to PC
pc2line   pc2line(fun[, pc])     Map PC to line number
build     build()                Show build date and time
clear     clear([obj])           Clear properties of object
intern    intern(str)            Internalize str in the atom table
clone     clone(fun[, scope])    Clone function object
seal      seal(obj[, deep])      Seal object, or object graph if deep

printメソッドを使うと、あらかじめ作成したjsファイルを実行して、結果をコンソールに出力させることが出来ます。

まず、quitでJavaScriptコンソールを抜けて…

js> quit()
$

jsファイルを作成。

$ echo "print('Hello World!')" > hello.js

jsコマンドの引数にhello.jsファイルを指定することでスクリプトを実行できます。

$ js hello.js
Hello World!

画面効果はブラウザ上でないと確認出来ませんが、データ処理等のロジック作成はSpiderMonkey上のほうが楽かもしれません。