1 Nashornエンジンの概要
注意:
Nashornエンジン、jjs
ツール、およびjdk.scripting.nashornとjdk.scripting.nashorn.shellの各モジュールは、将来のリリースでの削除に備えてJDK 11では非推奨です。
Nashornエンジンは、ECMAScript言語仕様第5.1版の実装です。これは、ECMAScript 6で導入された多数の新機能も実装します。これには、let
、const
などのテンプレート文字列、ブロック・スコープ、イテレータおよびfor..of
ループ、Map
、Set
、WeakMap
およびWeakSet
データ型、シンボル、2進数表現と8進数表現があります。
Nashornプロジェクトの一環として、完全にJava言語で開発されました。このコードは、Da Vinci Machineの新機能に基づいています。Da Vinci Machineは、「Java Specification Request (JSR) 292: Javaプラットフォームにおける動的型付け言語のサポート」のリファレンス実装です。
Nashornエンジンは、Java SE Development Kit (JDK)に含まれています。JavaスクリプトAPIを使用してJavaアプリケーションからNashornを呼び出し、埋め込まれたスクリプトを解釈できます。また、スクリプトをjjs
またはjrunscript
ツールに渡すこともできます。
注意:
Nashornは、JDKに含まれる唯一のJavaScriptエンジンです。ただし、「JSR 223: Javaプラットフォームのためのスクリプト」に準拠するスクリプト・エンジンを使用することも、独自のエンジンを実装することもできます。『Java Platform, Standard Edition Java Scriptingプログラマ・ガイド』のスクリプト言語およびJavaに関する項を参照してください。
JavaコードからのNashornの呼出し
Javaアプリケーション内でNashornを呼び出すには、JavaスクリプトAPIを使用してNashornエンジンのインスタンスを作成します。
Nashornエンジンのインスタンスを取得するには:
-
javax.scriptパッケージをインポートします。
JavaスクリプトAPIは、このパッケージ内のクラスとインタフェースで構成されます。
-
ScriptEngineManager
オブジェクトを作成します。ScriptEngineManager
クラスは、JavaスクリプトAPIの出発点です。ScriptEngineManager
オブジェクトを使用して、ScriptEngine
オブジェクトをインスタンス化し、各オブジェクトが共有するグローバル変数を管理します。 -
getEngineByName()
メソッドを使用して、マネージャからScriptEngine
オブジェクトを取得します。このメソッドは、スクリプト・エンジンの名前の
String
引数を1つ取ります。Nashornエンジンのインスタンスを取得するには、"nashorn"
を渡します。または、次のいずれかを使用することもできます:"Nashorn"
、"javascript"
、"JavaScript"
、"js"
、"JS"
、"ecmascript"
、"ECMAScript"
。
Nashornエンジンのインスタンスを取得したら、それを使用して文とスクリプト・ファイルの評価や変数の設定などを行います。次の例のEvalScript.java
は、Nashornを使用してprint("Hello, World!");
文を評価する簡単な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 Platform, Standard Edition Java Scriptingプログラマ・ガイド』のJavaクラスを使用するJavaスクリプトAPIの例に関する項を参照してください。
コマンド行からのNashornの呼出し
Nashornエンジンを呼び出すために使用できるコマンド行ツールは、2つあります。
-
jrunscript
: これは、JSR 223に準拠する利用可能なスクリプト・エンジンを呼び出す汎用コマンドです。オプションを指定しないデフォルトでは、jrunscript
はJDKのデフォルトのスクリプト・エンジンであるNashornエンジンを呼び出します。 -
jjs
: これは、Nashorn専用に作成された推奨ツールです。Nashornを使ってスクリプト・ファイルを評価するには、jjs
ツールにスクリプト・ファイルの名前を渡します。標準入力を使用して渡された文を解釈する対話型シェルを起動するには、スクリプト・ファイルを指定せずにjjs
ツールを起動します。
NashornパーサーAPI
NashornパーサーAPIを使用すると、特にIDEやサーバー側のフレームなどのアプリケーションでECMAScriptコードを解析および分析できます。
文字列、URLまたはパーサー・クラスのメソッドを使用するファイルからECMAScriptコードを解析します。これらのメソッドは、ECMAScriptコードを抽象構文ツリーとして表現する、CompilationUnitTreeのインスタンスを返します。パッケージjdk.nashorn.api.treeには、NashornパーサーAPIが含まれています。