この章では、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
)を参照してください。
脚注の凡例
脚注1:http://www.ecma-international.org/publications/standards/Ecma-262.html
http://openjdk.java.net/projects/nashorn/
http://openjdk.java.net/projects/mlvm/
http://jcp.org/en/jsr/detail?id=292