7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaでJavaScriptが動く"Rhino"を使う

Posted at

目的

 Java製のJavaScriptエンジン"Rhino(ライノ)"の利用について、自身の備忘録と情報共有のため作成します。
 対象は、JavaおよびJavaScriptの基礎知識がある方とします。

内容

 以下の3セクションに分けて説明します。なお、実行環境はWindows 7です。

  1. Rhinoとは?
  2. 導入方法
  3. 実行

Rhinoとは?

 RhinoはオープンソースのJava製JavaScript実装です。通常、EUCを提供するためにJavaアプリケーションに組み込まれます。(私訳)

Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically embedded into Java applications to provide scripting to end users.
"Rhino": MDN

導入方法

 Rhinoインタプリタを使って、使用方法を学習します。
 まず、以下のページからjarファイルをダウンロードします。

"mozilla/Rhino Releases": GitHub

 コマンドライン上でjarファイルを実行します。

> java -jar rhino-1.7.7.1.jar

 以下が表示されれば成功です。

Rhino 1.7.71 2016 02 01
js>

実行

 Javaのコレクションクラス(ArrayList)を生成し、アクセスしてみます。

Rhino 1.7.71 2016 02 01
js> var list = java.util.ArrayList(); // インスタンスを生成
js> list.add("hoge"); // ArrayList.addメソッド
true
js> list.add("piyo"); // ArrayList.addメソッド
true
js> list.add("fuga"); // ArrayList.addメソッド
true
js> for (var i = 0; i < list.size(); i++) { print(list.get(i)); } // ArrayList.getメソッドをJavaScriptのforループから実行
hoge
piyo
fuga

 **JavaクラスのインスタンスにJavaScriptでアクセスできました。**Rhinoの動作確認完了です。

所見

  • 業務でRhinoの存在を初めて知りました。Java8では、Rhinoから**"Nashorn(ナースホルン)"に置き換えられた**らしい。違いについては未勉強です。
  • JavaScriptを使って、Javaのクラスの呼び出しやインスタンス生成できるのは、コラボ企画のような不思議な気持ちになります。
  • サーバサイド(のJava上)でJavaScriptを実行でき独自のJavaクラスを作っておいてエンドユーザ(開発者)に提供できるのがメリットでしょうか?

参考

  1. "mozilla/Rhino Releases": GitHub
  2. "ArrayList": JavaSE7 API Reference
  3. "Nashorn(Java 8のJavaScriptエンジン)の実力": Qiita @ukiuni@github
7
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?