全国1千万人のJavaScriptユーザーの皆様こんにちは。たかだです。 本日は、拡張性とポータビリティにすぐれた JavaScript 処理系 Rhino(ライノー)をご紹介したいと思います。 JavaScript マニアなら、ブラウザ上だけではなく、もっと汎用的なツールとして JavaScript を利用したいと思いますよね? 日常的に利用するちょっとしたスクリプトはもちろん、できれば サーバーサイドのWebアプリや GUIアプリケーションまで JavaScriptで書きたいですよね?(という人が何人いるのかわかりませんが) RhinoはJavaScriptの実行環境としてだけではなく、Javaをインタラクティブに操る処理系としても役立ちます。 Rhino はオープンソースで開発されている JavaScript の処理系です。Mozilla Foundation によって管理され、Java言語で実装されています。 最大の特徴は、Java のクラスやメソッドを JavaScriptから操作できることです。JavaScriptコードを Javaバイトコードに変換し、classファイルを作成することもできます。 このため、処理系自体を拡張しなくても、Javaのほとんど全機能を JavaScriptから利用することができます。 など、ブラウザから独立した JavaScript(JScript)処理系にはいくつかの選択肢がありますが、拡張性に優れ、Java言語の機能を引き出せる Rhino はもっとも有力な選択肢の1つです。

インストール

さっそく使ってみましょう。 公式サイトより最新版を入手してください。 これ以外にJDK 1.4以降の Java実行環境が必要です。Java実行環境のインストールについてはここでは説明しません。 適当な場所に解凍してください。js.jarというファイルがあるはずです。こちらのファイルに、クラスパスを通せばさっそく実行できます。 以下のコマンドを実行するとJavaScriptのインタラクティブシェルが立ち上がります。 ## 以下 /path/to/rhino は解凍したrhinoのディレクトリに合わせて変更してください。
$ java -classpath /path/to/rhino/js.jar org.mozilla.javascript.tools.shell.Main
Rhino 1.7 release 0 0000 00 00
js> print(1+1);
2
js>
終了には quit() という関数を呼び出します。
js> quit()
ファイルに保存したスクリプトを実行することもできます。
$ echo 'print("hello, world");' > hello.js
$ java -classpath /path/to/rhino/js.jar org.mozilla.javascript.tools.shell.Main hello.js
hello, world

ただし、こんなに長いコマンドを覚えるのは大変なので、呼び出し用の短いエイリアスを作成しておきましょう。 Windowsでは、以下のようなファイルをrhino.batという名前で保存し、パスの通った場所に置いておきます。 Windows環境では、日本語の文字化けを防ぐため、-Dfile.encoding=UTF-8というオプションを付ける必要 あります。
@echo off
set CLASSPATH=/path/to/rhino/js.jar
java -Dfile.encoding=UTF-8 org.mozilla.javascript.tools.shell.Main %1 %2 %3 %4 %5 %6 %7 %8 %9
bash(UnixライクOS)では以下の用なファイルをrhinoという名前で保存し、パスの通った場所に置き、実行権限を与えます。
export CLASSPATH=/path/to/rhino/js.jar
java org.mozilla.javascript.tools.shell.Main $*
以上により、rhino というコマンドで、rhino のJavaScriptシェルを呼び出すことができるようになりました。
$ rhino
Rhino 1.7 release 0 0000 00 00
js> 

Javaの機能を呼び出す

rhinoからJavaの機能を呼ぶのはとても簡単です。
js> java.lang.System.out.println("Hello");
Hello
以上のようにパッケージつきで呼び出せば、まるでJavaScriptの関数を呼ぶように簡単にJavaのメソッドにアクセスできます。 パッケージをタイプするのが面倒な場合は、importPackageという関数で、グローバル環境に読み込むことができます。
js> importPackage(java.lang);
js> System.out.println('hello');
hello
パッケージは、JavaScriptのオブジェクトのような扱いになっているので、変数に代入もできます。
js> var $out = java.lang.System.out;
js> $out.println('Hello');
Hello
Javaクラスのインスタンスを作成するのも簡単です。
js> var f = new java.io.File('.');
js> f.exists();
true

便利な標準関数

Javaの機能を呼びださなくても、いくつかの機能は標準で提供されています。 以下の関数などはかなり使いどころがあるのではないでしょうか。
print()
標準出力に文字列を出力する。
readFile(path)
ファイルを読み込み、内容を文字列として返す。
readUrl(url)
URLを読み込み、内容を文字列として返す。
runCommand(cmd)
外部コマンドを実行する。
Rhinoを使えば汎用的スクリプト言語としてJavaScriptを利用できるのはもちろん、Javaアプリのテストなどにも強力な性能を発揮します。