この章では、Nashornエンジンの概要、およびこれを使用してJavaアプリケーション内またはコマンド行のJavaScriptコードを解釈する方法について説明します。
Nashornエンジンは、ECMAScript言語仕様第5.1版の実装です脚注1。 Nashornプロジェクトの一環として、完全にJava言語で開発されました脚注2。 このコードは、Da Vinci Machine脚注3の新機能に基づいています。Da Vinci Machineは、「Java Specification Request (JSR) 292: Java プラットフォームにおける動的型付け言語のサポート」脚注4のリファレンス実装です。
Nashornエンジンは、Java SE Development Kit (JDK)に含まれています。 JavaスクリプトAPIを使用してJavaアプリケーションからNashornを呼び出し、埋め込まれたスクリプトを解釈できます。また、スクリプトをjjsまたはjrunscriptツールに渡すこともできます。
|
ノート: Nashornは、JDKに含まれる唯一のJavaScriptエンジンです。 ただし、「JSR 223: Java プラットフォームのためのスクリプト」脚注1に準拠するスクリプト・エンジンを使用することも、独自のエンジンを実装することもできます。 詳細は、『Javaスクリプト・プログラマーズ・ガイド』(http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/index.html)を参照してください |
Javaアプリケーション内でNashornを呼び出すには、JavaスクリプトAPIを使用してNashornエンジンのインスタンスを作成します。
Nashornエンジンのインスタンスを取得するには:
javax.scriptパッケージをインポートします。
JavaスクリプトAPIは、このパッケージ内のクラスとインタフェースで構成されます。 javax.scriptパッケージの詳細は、仕様(http://docs.oracle.com/javase/jp/8/api/javax/script/package-summary.html)を参照してください。
ScriptEngineManagerオブジェクトを作成します。
ScriptEngineManagerクラスは、JavaスクリプトAPIの出発点です。 ScriptEngineManagerオブジェクトを使用して、ScriptEngineオブジェクトをインスタンス化し、各オブジェクトが共有するグローバル変数を管理します。
getEngineByName()メソッドを使用して、マネージャからScriptEngineオブジェクトを取得します。
このメソッドは、スクリプト・エンジンの名前のString引数を1つ取ります。 Nashornエンジンのインスタンスを取得するには、"nashorn"を渡します。 または、次のいずれかを使用することもできます: "Nashorn"、"javascript"、"JavaScript"、"js"、"JS"、"ecmascript"、"ECMAScript"。
Nashornエンジンのインスタンスを取得したら、それを使用して文とスクリプト・ファイルの評価や変数の設定などを行います。 例1-1は、Nashornを使用してprint("Hello, World!");文を評価する簡単なJavaアプリケーション・コードを示しています。
例1-1 Nashornを使ったスクリプト文の評価(EvalScript.java)
import javax.script.*;
public class EvalScript {
public static void main(String[] args) throws Exception {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a Nashorn script engine
ScriptEngine engine = factory.getEngineByName("nashorn");
// evaluate JavaScript statement
try {
engine.eval("print('Hello, World!');");
} catch (final ScriptException se) { se.printStackTrace(); }
}
}
|
ノート: eval()メソッドは、適切な処理を必要とするScriptExceptionをスローします。 |
Javaコードでスクリプトを使用する方法の詳細は、『Javaスクリプト・プログラマーズ・ガイド』(http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/index.html)を参照してください
Nashornエンジンを呼び出すために使用できるコマンド行ツールは、2つあります。
jrunscript
これは、JSR 223に準拠する利用可能なスクリプト・エンジンを呼び出す汎用コマンドです。 オプションを指定しないデフォルトでは、jrunscriptはJDKのデフォルトのスクリプト・エンジンであるNashornエンジンを呼び出します。
jrunscriptの詳細は、このツールのリファレンス・ページ(http://docs.oracle.com/javase/jp/8/technotes/tools/windows/jrunscript.html)を参照してください。
jjs
これは、Nashorn専用に作成された推奨ツールです。 Nashornを使ってスクリプト・ファイルを評価するには、jjsツールにスクリプト・ファイルの名前を渡します。 標準入力を使用して渡された文を解釈する対話型シェルを起動するには、スクリプト・ファイルを指定せずにjjsツールを起動します。
jjsの詳細は、このツールのリファレンス・ページ(http://docs.oracle.com/javase/jp/8/technotes/tools/windows/jjs.html)を参照してください。
脚注の凡例
Footnote1:https://www.ecma-international.org/publications-and-standards/standards/ecma-262/http://openjdk.java.net/projects/nashorn/http://openjdk.java.net/projects/mlvm/http://jcp.org/en/jsr/detail?id=292