最近,Javaとスクリプト言語の連携が注目を集めています。Javaはそれ自体,ソフトウエア開発環境として完結しています。なのになぜ,Javaでスクリプト言語を使うことが注目されているのでしょうか。
理由はおそらく「Java向けに用意されている豊富なクラスライブラリを柔軟なスクリプト言語で扱いたい」ということではないかと思います。Javaはその「固さ」が信頼性を重んじる企業システムの文化にマッチし,COBOLに代わる開発言語として受け入れられました。一方で,こうした「固さ」は思いついたことをすぐに試してみたいという用途には向きません。思いつきをすぐに形にするのは,断然スクリプト言語が優れています。Javaとスクリプト言語の「いいとこ取り」ができれば,きっと楽しいに違いありません。
Javaとスクリプト言語を併用する方法としては,Java仮想マシン(Java VM)上で動作するスクリプト言語を実装するのが主流です。現在,Java VMで動作するさまざまなスクリプト言語が開発されています(下の一覧表)。ほかには,スクリプト言語の中からJava VMを起動してJNI(Java Native Interface)経由でJavaを利用するという方法もあります。arton氏(関連リンク)が開発している「RubyJavaBridge(rjb)」がこの手法を採用しています。rjbを使うと,RubyからJavaのクラスを利用できます。
言語 | 文法 | 特徴 |
---|---|---|
BeanShell | Java | Javaのソースコード・インタプリタ |
Groovy | 独自(Javaライク) | JSR 241。一時注目を集めたが,最近はやや地味 |
Jacl | Tcl | TkのラッパーであるSwankと併用可 |
JRuby | Ruby | RubyのJava実装。不完全だが開発は活発 |
JudoScript | 独自(JavaScriptライク) | 名前の由来は柔道らしい |
Jython | Python | PythonのJava実装。前身はJPython |
Pnuts | 独自(JavaScriptライク) | 日本人(戸松豊和氏)が開発 |
Rhino | JavaScript(DOM抜き) | mozilla.orgのプロジェクト。Java SE 6が採用予定 |
Sleep | 独自(Perlライク) | 文法がPerlに近い。Objective-Cの影響も少しある |
個人的な印象では,これらの中ではJythonとRhinoが頭一つ抜け出ているかな,という気がします。Jyhonは,CによるPython実装と並ぶJavaのPython実装として一定の評価を受けています。また,Rhinoは次期Java SEであるJava SE 6(開発コード名Mustang)が採用することになり,がぜん注目されています。一方,JSR(Java Specification Request)になるなど一時期注目を集めていたGroovyは,最近パッとしないなというのが正直な感想です。
ただ「Javaとスクリプト言語が連携して本当にうれしいの?」という根本的な疑問は根強く存在します。PHPの実行エンジンや開発ツールを開発しているイスラエルZend Technologiesは,Mustangが搭載するスクリプト言語サポート(JSR 223)に対応するPHPエンジンを開発中です。しかし,PHP関連のある優秀な若手技術者は「あれはZendがベンチャー・キャピタル対策でやっているだけ。実際にPHPを使っている開発者はJavaとの連携になんて興味ない」と語ります。私も正直,「Javaとスクリプト言語を一緒に使うことにどれほどの意味があるのか」という気持ちがないわけではありません。
でも,もしかしたら,こうした技術の有効な用途を思いつく人がまだ少ないだけなのかもしれません。例えば,上に挙げたarton氏のrjbとJavaの音楽クラスJsynを使ってRubyによる即興演奏を試みている人がいます(関連リンク)。こうした実例が増えていけば,プログラミングの世界は確実に広がっていくはずです。
今回は,Java関連スクリプト言語の概要についてお話ししました。次回からは,こうしたスクリプト言語の実際の使い方を解説していきます。
【参考にした記事】
- JavaWorld.com「Choosing a Java scripting language: Round two」
- Rubyist Magazine「Ruby Library Report【第2回】Javaとの連携」
- Web Services Summit「Moving Past Java(「Beyond Java」などの著者であるBruce Tate氏へのインタビュー)」