Java8以降では、Rhinoに代わり、NashornがJavaScriptエンジンとして利用可能になっています。そこで、ここでは、Nashornを始めるにあたり、Rhinoとの差異などをまとめてみます。
Nashornの実行ファイル名は「jjs」です。JREおよびJDKのbinディレクトリに「jjs」というファイルが用意されています。そのため、環境変数「JAVA_HOME」を設定するか、「jjs」のあるフォルダにパスを通すことでjjsを実行できるようにしておきましょう。
Windowsでは、環境変数の設定から「JAVA_HOME」を設定します。そして、Nashornを実行するバッチファイルは次のようになります。
"%JAVA_HOME%\bin\jjs" %*
Mac OS Xでは、JRE(またはJDK)のbinディレクトリにある「jjs」へシンボリックリンクを張るか、JAVA_HOMEを設定し、そこからbin/jjsを実行できるようにします。シンボリックリンクを張る場合は、下記のようにパスの通ったディレクトリを指定します。
JAVA_HOME=`/usr/libexec/java_home -v 1.8` ln -si $JAVA_HOME/bin/jjs /usr/local/bin/jjs
また、JAVA_HOMEを設定する方法では、/usr/libexec/java_homeコマンドが利用できます。Nashornを実行するだけの簡単なシェルスクリプトは、次のようになります。以下をパスの通ったフォルダに「jjs」などの名前で保存します。
#!/bin/sh JAVA_HOME=`/usr/libexec/java_home -v 1.8` $JAVA_HOME/bin/jjs $@
引数を付けずに実行すると、インタプリタが起動して、計算などを対話的に実行できます。
$ jjs jjs> 3 + 5 8
Rhinoでは手軽にファイルが読み込めるreadFileメソッドがありましたが、Nashornでは使えません。とはいえ、以下のようなメソッドを定義してあげれば良いだけです。
// Rhino互換のreadFileメソッド function readFile(fname, charset) { var Files = java.nio.file.Files; var Paths = java.nio.file.Paths; var bytes = Files.readAllBytes(Paths.get(fname)); var text = new java.lang.String(bytes, charset); return "" + text; } // Shift_JIS(MS932)のテキストファイルを読み込む例 var txt = readFile("test.txt", "MS932"); print(txt);
readFile()に近いメソッド、readFully()もありますが、これは、スクリプトモード(オプションに「-scripting」を付ける)でNashornを実行した時に有効になります。
var text = readFully("text.txt"); print(text);