symfony × MySQL × Shift_JIS: 0×5c関連 KLab男塾を開設!!
Nov 27

全国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アプリのテストなどにも強力な性能を発揮します。

Trackback URL

Leave a Reply