Nashorn(Nasven)でJavaのライブラリをカジュアルにJavaScriptで試す

Apache commons とか Apache HttpClient みたいなJavaのライブラリをちょっと試してみたい時に、IDEでプロジェクトをいちいち用意して、Javaのコードを書くのが面倒だったりする。

Java SE 8には、Nashorn (なすほーん) というJavaScriptエンジンが搭載されていて、Javaライブラリを利用するJavaScriptプログラムを動かすことができる。JavaScriptに馴染み深い自分からすれば、ありがたい。

ただ、素のままでは「jarを取ってきて、クラスパスを設定して」という作業を手でおこなう必要があって、これまた面倒。これを解決する方法のひとつがNasven( GitHub - nasven/nasven: Nasven.js core code )。Maven artifactの依存関係を記述して、依存ライブラリの取得、クラスパスの設定をよしなにやって、スクリプトを実行してくれる。

インストールはUnix系のOSだとコマンド一発で簡単。

curl -sSL j.mp/installnasven | sh

自分の場合はホームディレクトリ配下に.nasvenというディレクトリが作成された。

スクリプトを動かすところまでやってみる。ここではApache HttpClientを試す。
sampleという名前のディレクトリと、さらにその配下にpackage.jsonというファイルを作成して、依存関係を記述する。

{
    "name": "sample",
    "version": "1.0.0",
    "keywords": ["nashorn"],
    "author": "@kitak",
    "contributors": [],
    "dependencies": {
        "maven": [
            "org.apache.httpcomponents:httpclient:4.1.1"
        ]
    },
    "engine": "nashorn 1.8.0_45"
}

次に同じディレクトリにindex.jsという名前でスクリプトを記述する。

var URLEncodedUtils = Packages.org.apache.http.client.utils.URLEncodedUtils;
var URI = Packages.java.net.URI;

var url = new URI("http://example.com?a=1&b=2");
var queries = URLEncodedUtils.parse(url, "UTF-8");

print(queries);

(スクリプトの内容に意味は無いよ... )

スクリプトを動かすときはjjsコマンド(Nashornの実行ファイル名)から。

 jjs -scripting ~/.nasven/nasven.js -- sample

ライブラリの取得とスクリプトの実行がおこなわれる。簡単!

Nashornそのものの使い方は Oracleのドキュメント Java Platform, Standard Edition Nashornユーザーズ・ガイド、リリース8逆引きNashorn - やりたいことからNashornのサンプルコードを引く - #侍ズムJava 8 Nashorn Tutorial - Benjamin Winterberg が参考になる。

最近、SEO対策(最近の検索エンジンのクローラがJavaScriptを解釈する、ということは前提に置きつつも)、初期表示の改善の点から、サーバーサイドでJavaScriptのライブラリ/フレームワークコンポーネントからHTMLをレンダリングすること(ウェブフロントエンドで「サーバーサイドレンダリング」と呼ばれているもの)が話題にちょくちょく挙がる。Java文化の会社ではNashornはサーバーサイドレンダリングの鍵となる要素だと思っていて、そういった意味でも、Nashornを普段から活用して良い部分も悪い部分も知っておきたいという気持ちも重なり、書いた記事なのでした。