1 Nashornエンジンの概要

この項では、Nashornエンジンの概要、およびこれを使用してJavaアプリケーション内またはコマンド行のJavaScriptコードを解釈する方法について説明します。

注意:

Nashornエンジン、jjsツール、およびjdk.scripting.nashornjdk.scripting.nashorn.shellの各モジュールは、将来のリリースでの削除に備えてJDK 11では非推奨です。

Nashornエンジンは、ECMAScript言語仕様第5.1版の実装です。これは、ECMAScript 6で導入された多数の新機能も実装します。これには、letconstなどのテンプレート文字列、ブロック・スコープ、イテレータおよびfor..ofループ、MapSetWeakMapおよび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エンジンのインスタンスを取得するには:

  1. javax.scriptパッケージをインポートします。

    JavaスクリプトAPIは、このパッケージ内のクラスとインタフェースで構成されます。

  2. ScriptEngineManagerオブジェクトを作成します。

    ScriptEngineManagerクラスは、JavaスクリプトAPIの出発点です。ScriptEngineManagerオブジェクトを使用して、ScriptEngineオブジェクトをインスタンス化し、各オブジェクトが共有するグローバル変数を管理します。

  3. 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が含まれています。