小山博史のJavaを楽しむ(1)
JavaとJavaScriptの親しい関係
ガリレオ
小山博史
2006/8/18
|
教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた 筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集局) |
■注目を浴びるJavaScript
JavaScriptが世に広まって10年近くたちますが、最近話題に上ることが多くなってきています。なぜ、いまさらJavaScriptが注目を浴びているのでしょうか?
JavaScriptはECMA(ヨーロッパ電子計算機工業会)によって、ECMAScriptとして標準化されていて、Standard ECMA-262 ECMAScript Language Specification 3rd edition (December 1999)や、Standard ECMA-357 ECMAScript for XML (E4X) Specificationといった仕様が公開されています。これらの仕様を見て分かるように、JavaScriptはオブジェクトベース(プロトタイプベースともいわれることもあるようです)のオブジェクト指向言語です。
JavaScriptは、世間ではスクリプト言語としての手軽さの方ばかりが注目されていて、オブジェクト指向言語としての魅力について語られることは多くありませんでしたが、筆者は以前からプログラミング教育の視点からJavaScriptがオブジェクト指向言語である点に注目をしていました。プログラミング初心者がオブジェクト指向プログラミングを学習し始めるきっかけにJavaScriptが良いと、ずっと思っていたのです。なぜなら、Webブラウザに実行環境が搭載されているJavaScriptを使えば、パソコンを購入すれば必ず付いていて、開発環境や実行環境をわざわざ用意しなくても、手軽にプログラミングができるからです。しかし、なかなかJavaScriptはオブジェクト指向言語として扱われる時代は来ませんでした。
そんな中、AJAX(Asynchronous JavaScript + XML)の登場によって状況は変わりました。AJAXの出現により、オブジェクト指向言語として設計されているJavaScriptの特長を利用した実用性の高いライブラリが開発され、使われるようになってきたのです。例えば、有名なライブラリとしては、Ruby on Railsで採用されているprototype.jsといったものがあります。このライブラリでは、JavaScriptのオブジェクト指向言語機能を利用しています。ライブラリに含まれるbase.jsを見ると、Objectという基本的なオブジェクトは拡張されていて、extendメソッドとinspectメソッドが追加されていたりします。HTML文書ファイルへ埋め込むスクリプトという視点で開発されたJavaScriptプログラムでは、このようなライブラリは用意されることはありませんでした。
これからは、オブジェクト指向言語としてとらえたうえで開発をしたり、ライブラリを使用する機会が増えてきます。以前からJavaScriptをオブジェクト指向言語として認識していたので「やっと実用的なオブジェクト指向言語として使うための条件が整った。やはりライブラリは重要だ」と思いましたが、スクリプト言語としてしか見ていなかった開発者にとっては驚きだったはずです。いずれにせよ、JavaScriptはオブジェクト指向言語として注目を浴びているのです。
ここでJavaとJavaScriptの関係を思い返してみましょう。最初に名前についてですが、JavaScriptが開発された当初はLiveScriptという名前でした。1995年のJava発表の影響を受けてJavaScriptという名前になったといわれています。しかし、インターネットが普及し始めて、ネットサーフィンという言葉がよく使われていたころ、Netscape Navigator、Internet Explorerといったブラウザで動作するようになってからは、Javaよりも有名になってしまいました。HTML文書ファイルへ組み込むことができるJavaScriptの方が普及してしまったのです。
こういった経緯のためか、コンピュータに関係する仕事をしている人でも「JavaはJavaScriptの略」と勘違いすることが多く、当時は「JavaはJavaScriptとは違います」といったものです。しかし、Java誕生10周年を過ぎたいまでは、WebプログラミングにおいてのJavaの人気は非常に高く、普及していますから、プログラミングを知っている人であれば、わざわざ「JavaとJavaScriptとは違います」という必要もなくなりました。
次に連携方法についてです。Javaは発表当時アプレットの方が注目されていたため、JavaアプレットとJavaScriptを連携するためのLiveConnectという技術への期待も非常に高かったことを覚えています。残念なことに、いまやサーバサイドWebアプリケーションの方が一般的となっているため、この技術はあまり話題にならなくなってしまいました。
サーバサイドWebアプリケーションにおいては、JavaScriptはブラウザ互換性の問題があったり、携帯電話用ブラウザでのサポートが十分されていなかったことなどにより、Java開発者からは敬遠されがちな存在となっていました。そのため、ターゲットブラウザが限定されていない場合には、あまりJavaScriptを使わないで、サーブレット側で対処するという傾向がありました。このようにJava開発者にとってJavaScriptは名前にJavaを使っているものの、Javaとは直接関係がありませんでした。しかし、この状況はJavaの次期バージョンであるMustang(Java SE 6)からは変わりそうです。Mustangのscripting frameworkで動作するスクリプトとしてJavaScriptが同梱されることになったのです。同梱されるとなると、従来とはJavaScriptの位置付けが変わってきますので、この意味からも話題となっているのです。
■JavaScriptインタプリタ Rhino
それでは、Javaで実装されたJavaScriptインタプリタとして有名なRhinoを使ってオブジェクト指向言語JavaScriptの世界をちょっとのぞいてみましょう。Rhinoの使い方は簡単で、Rhinoのダウンロードページからrhino1_6R2.zipをダウンロードした後に展開してから、次のようにjs.jarを使ってjavaコマンドでインタプリタを起動します。するとJavaScriptプログラムを対話的に実行することができるようになります。help()と入力すると使えるコマンドが表示されるので、見ておきましょう。終了をするにはquit()を使います。
> java -jar js.jar |
最初に、JavaScriptで時刻の操作をしてみましょう。Dateオブジェクトを new 演算子を使って生成し、そのオブジェクトのgetHoursメソッドを使って時間をhourへ、getMinutesメソッドを使って分をminuteへ、その後printコマンドでhourと":"とminuteとを連結した結果を表示しています。printコマンドを使っている部分はオブジェクト指向プログラムらしくありませんが、ほかの処理はJavaとほとんど変わりありません。
js> var now = new Date(); |
次に、JavaScriptでユーザー定義オブジェクトの宣言をしてみましょう。Javaのようにクラス単位でプログラムを作成するわけではないので、コンストラクタの定義がちょっと変わっています。JavaScriptではfunctionキーワードでオブジェクトのコンストラクタを定義します。次の例では、点を表すPointオブジェクトのコンストラクタを用意して、new演算子で原点を表すPointオブジェクトの生成をしています。
js> function Point(_x, _y) { this.x=_x;
this.y=_y; } |
オブジェクトpointへxの値を1増加させるaddXメソッドを追加するには次のように最初にメソッドの処理をfunctionとして宣言しておき、それをオブジェクトpointのaddXメソッドとして登録します。ちなみに、コンストラクタでメソッドを登録することもできます。また、ここでは紹介しませんがprototypeを使って継承をすることができます。オブジェクト指向といってもJavaScriptはクラスベースのJavaとはかなり違っています。
js> function addX() { this.x++; } |
どうでしょう、詳しい文法については解説しませんでしたが、ちょっとだけでも雰囲気が分かったでしょうか。これまでHTMLを補助するものとしてJavaScriptを見ていた人も多いかもしれませんが、オブジェクトベースのオブジェクト指向言語という視点でJavaScriptを使ってみると、Javaのようなクラスベースのオブジェクト指向言語とは違ったテクニックに出合うことができるはずです。意外に面白くてプログラミングの幅が広がります。
■ JavaとRhinoのおいしい関係
ところで、RhinoではJavaのパッケージをインポートして利用するということもできてしまいます。これを使ってJavaのプログラムを対話的に実行することができます。また、JavaプログラムからRhinoを呼び出すこともできるので、JavaScript実行環境を独自アプリケーションへ追加することもできます。例えば、java.lang.SystemクラスのgetPropertyメソッドを使ったり、Swingを使って対話的に画面を表示する場合は、Rhinoを起動してから、次のようにします。
js> importPackage(java.lang) |
Rhinoの情報は「Rhino: JavaScript for Java」や、この日本語版の「Rhino: Java による JavaScript」などにたくさん紹介されています。充実していますからぜひアクセスしてみてください。
さて、Rhinoを使うとJavaとJavaScriptの連携が簡単にできることは分かりましたが、これだけではありません。Javaの次期バージョンであるMustang(Java SE 6)にはJSR 223: Scripting for the JavaTM Platformのサブセットであるscripting frameworkが含まれることになっています。実は、このフレームワーク上で動作するJavaScriptの実行用プログラムとしてRhinoが同梱されます。ただし、scripting frameworkのAPIパッケージであるjavax.scriptは特定スクリプト言語のためのものではないため、scriptingプロジェクトを見ても分かるように、さまざまなプログラミング言語が使えることになりそうです。例えば、AWK(jawk)、Python(Jython)、Ruby(JRuby)などが一覧に含まれています。MustangではJava Compiler API(JSR 199: JavaTM Compiler API)を使用することにより、ソースコードのコンパイルを簡単に行えるようになりますから、Javaそのものも一覧に含まれています。このように仕様上ではJavaのスクリプトは決まったものがあるというわけではありませんが、Mustangに同梱されるものを利用する機会が一番多くなりそうです。そういう意味で、JavaとJavaScriptは従来よりもぐっと近い関係になるといえるでしょう。しかし、「JavaのスクリプトといったらJavaScript」といえるほどになるかどうかは、まだ分かりません。Groovy、Python、Rubyはどれも人気がありますから、scripting frameworkでこれらが使われる開発事例の方が多くなるかもしれません。
いずれにせよ、Mustangがリリースされると、scripting frameworkを使っていままでよりも簡単にプログラムのカスタマイズが可能になります。例えば、従来は初期設定のためにはPropertiesファイルやXMLファイルを使っていましたが、JavaScriptファイルを使うこともできるようになります。ちょっとした拡張機能を実現するのに、JavaScriptプログラムをプラグインとして登録できるようにもなります。ただし、良いことばかりではありません。WebブラウザではJavaScriptに起因するセキュリティホールがたくさん発見されてきています。JavaScriptプログラムを無条件で使えるような実装をしてしまわないように注意する必要があるでしょう。それにしても、JavaScriptがJavaを補う形で利用できるようになるのは、やはりうれしいものです。Mustangのリリースがいまから楽しみですね。
小山博史のJavaを楽しむ バックナンバー
- 第1回 JavaとJavaScriptの親しい関係
- 第2回 いろいろなJavaを楽しむ
- 第3回 待望のJava SE 6 でパーシステンス
- 第4回 (Java+Derby)* Ruby on Rails プログラミング
- 第5回 【新人研修向け特別企画】JavaでPHPを使ってみた
- 第6回 JavaFXでJava RIA開発はどれくらい変わるの?
- 第7回 そろそろブログ+RSSアプリでも作ってみませんか?
- 第8回 デスクトップをJava製ウィジェットでにぎやかに
- 第9回 Google Android用携帯アプリ作成のための基礎知識
- 第10回 【新人なるプログラマーへ】ソースコードを読みましょう
- 第11回 Javaはクラウドのプラットフォームになり得るのか
- 第12回 「Javaは遅い」から「Javaは楽しい」に至る歴史
- 第13回 Subversionならできる! NetBook最強バックアップ術
| 筆者プロフィール |
| 小山博史(こやま ひろし) Webシステムの運用と開発、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクト(http://www.jajakarta.org/)へ参加し、コミッタの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)(http://www.sssg.org/)やbugs(J)(http://www.bugs.jp/)の活動へも参加している。 |
ホワイトペーパー(TechTargetジャパン)
- 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成 - Android 2.1の新機能で作る、美しく燃える“待ち受け” (2010/2/24)
新しく追加された、動く壁紙「Live Wallpaper」機能のサンプル動画を表示し、構成、設定ファイル、実装の仕方を解説します - AWS ToolkitでTomcatクラスタをEC2上に楽々構築 (2010/2/17)
Eclipseで開発したWebアプリを、Google App Engine並みに簡単に、Amazon EC2上にデプロイできる無料プラグインを紹介します
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 New! |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |

| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |

| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |
| ◆ | 直属上司が海外にいるのエンジニアに見る 【実例】場所に捉われないワークスタイル |

| ◆ | 「仮想化工房」のマイスターが選んだのは VMware、Hyper-V、そしてVirtageだった! |
| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |






