NetBeansはEclipseよりも先に、Webアプリケーション開発に必要なものがオールインパッケージのような感じで入っていたため、個人的には手軽にWebアプリケーション開発に挑戦をするならNetBeansがお薦めだと思っていました。最近は、EclipseもJava EE用パッケージを用意するなどしているため、いまはNetBeansとEclipseと、どちらが良いかは悩ましいところです。
日本ではEclipseが非常にブレイクしたので、読者の身の回りには「Eclipse使い」が多いのではないでしょうか。ただ、JSRのリファレンス実装を取り込むスピードはNetBeansの方が速いような気がします。JavaFXへの対応やGlassFishへの対応などは、NetBeansはかなり早い段階から取り組んでいますから、使い分けるといいのではないかと考えて、筆者は両方インストールして使っています。
このように、Java用IDEが普及してきた流れもあるため、Javaデスクトップアプリケーションも十分実用性が高くなったといえます。CPUやOSに最適化されたネイティブコードのアプリケーションが駆逐されるほどの勢いはありませんが、今後も適材適所でJavaデスクトップアプリケーションもたくさんの種類が出てくるのではないかと予測しています。
また、HotSpot技術やJITコンパイラ技術により、現在のJavaVMは非常に高速にJavaアプリケーションを実行できるようになったので、JDK 1.0/1.1のころによくいわれた「JavaVMによるJavaアプリケーションの実行は遅い」という点については、現在はほとんど問題視されなくなってきていますが、偏見が根深く残っているのも事実です。
さて、そうすると、デスクトップ向けのJavaアプリケーションのバージョン管理が今後どうなるか気になります。
Webアプリケーションを利用することのメリットには、クライアントマシンではWebブラウザが動いていればよく、Webアプリケーションのバージョンアップはサーバ側でコントロールできるということがあります。Javaデスクトップアプリケーションでも、クライアントマシンではJavaVMが動作すればよく、バージョンアップも簡単にコントロールできる方法があるとうれしそうです。
サン・マイクロシテムズはこの要求に応えるものとして、「Java Web Start」という技術を提供しています。この技術を利用すると、Javaアプリケーションは初回の起動時はネットワークからダウンロードしてからプログラムを実行しますが、2回目以降の起動はローカルにダウンロードしたファイルを使って実行します。また、ダウンロード元にアプリケーションのバージョンアップファイルが置いてあると、バージョンアップもできます。
このように、Java Web Startの登場により、筆者はGUIアプリケーション開発時には次の3種類のうち、どこに分類されるGUIアプリケーションを開発するのかを意識する必要があると考えています。
最近はOSにしても自動セキュリティアップデートが付くのは当たり前ですし、Adobe ReaderやアップルのSafariのように、ソフトウェアレベルで自動セキュリティアップデートをするものも多くあります。ただし、これらはインストールに当たって、インストールファイルをダウンロードしてローカルマシンでインストールを行います。
Java Web Startでは、Webブラウザから簡単にデスクトップへインストールできますし、バージョンアップも簡単にできます。Java Web Startは、「アプリケーションの実行ファイルをローカルマシンへキャッシュする技術」ともいえ、こういった仕組みが今後は普及するのではないかと考えています。
アプレットやサーブレット、デスクトップアプリケーション、Java Web Startと順番に見てきましたが、これに前回の「Javaはクラウドのプラットフォームになり得るのか」で紹介したクラウドコンピューティングも含めて考えてみましょう。
クラウドコンピューティングが実現された世界では、処理がデスクトップで行われているのか、インターネットで行われているのか、データはローカルにあるのかサーバにあるか、といったことが隠蔽(いんぺい)されて、あまり気にしなくてもよくなるはずです。こういった世界を実現するためには、これを支える技術が必要ですし、支える技術を簡単にソフトウェアへ搭載できる開発ツールが必要です。
「技術開発に興味があるか」「技術を簡単に利用できるようにする仕組みに興味があるか」「簡単に使えるようになった技術を利用するソフトウェア開発に興味があるのか」によって、キャッチアップのタイミングや興味の持ち具合に差はありますが、いずれにせよ、Java SE 6u10には注目してみてください。
クラウドコンピューティングを支える技術に限らず、新しい技術は既存技術の応用であることが多いものです。
例えば、今回話に出てきたHotSpot技術やJITコンパイラ技術は彗星(すいせい)のごとく突如現れたわけではなく、長い年月をかけて開発されてきたものです。Javaも文法はC/C++を参考にしていますし、オブジェクト指向言語もJavaが登場する前からあり、それをJava言語設計時に参考にしたものです。
近年では、Ajaxが話題になりましたが、そこで使われている技術は1つ1つを見ると枯れていて、それらの既存技術をうまい具合に組み合わせることによって、これまでは難しいといわれていた処理を実現できるということでした。
このように、技術は既存のものであっても、いつブレイクするのかは分かりません。進化したものがある場合は、たまには見直しをしてみるのがよいのです。
例えば、Java SE 6u10は、Java SE 6u7から一気にUpdateの番号が上がりました。「Java SE 6 Update 10 リリースノート」を見ると、いくつか注目すべき点があります。
筆者は「次世代Javaプラグイン」「JQS(Java Quick Starter)」に注目をしています。Javaアプレット、Java Web Startといった既存技術にJavaFXがうまい具合に融合して、非常に興味深いものになってきています。また、Windows 2000やXPにおいてJavaVMを高速起動できるJQSは、「Javaは遅い」というイメージを払拭(ふっしょく)できそうです。
ではここで、次世代Javaプラグインに関連して、冒頭のドラッガブルアプレットのコードを見てみましょう。
既存のJavaアプレットをドラッガブルアプレットにすることは、非常に簡単ですし、JavaFXアプリケーションも簡単にドラッガブルアプレットにできます。ここでは、簡単なJavaアプレットのサンプルコードを書いてシンプルに実現する例を紹介します。
最初に次のような簡単なJavaアプレットを作成します。背景を灰色として、SimpleJAppletという文字列を表示するだけのものです。
package sample; public class SimpleJApplet extends javax.swing.JApplet { public void paint(java.awt.Graphics g) { g.setColor(java.awt.Color.LIGHT_GRAY); g.fillRect(0, 0, 200, 200); g.setColor(java.awt.Color.BLACK); g.drawString("SimpleJApplet", 50, 25); } }
作成したら、コンパイルして、JARファイルも生成しておきましょう。
javac sample/SimpleJApplet.java jar cvf SimpleJApplet.jar sample
次に、これを起動するJNLPファイルを用意します。
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="." href="SimpleJApplet.jnlp"> <information> <title> - Simple JApplet - </title> <vendor>@IT</vendor> <description kind="short">Simple JApplet</description> <shortcut online="true"> <desktop /> </shortcut> </information> <resources> <jar href="SimpleJApplet.jar" main="true" /> </resources> <applet-desc name="SimpleJApplet" main-class="sample.SimpleJApplet" width="200" height="200"> </applet-desc> </jnlp>
最後に、sample.SimpleJAppletクラスを利用するHTMLファイルを作成します。次のように、appletタグで基本情報を指定して、タグでドラッガブルを有効にしたり、参照するJNLPファイルの指定をしたりしています。
<applet code=sample.SimpleJApplet.class width="200" height="200"> <param name="draggable" value="true"> <param name="jnlp_href" value="SimpleJApplet.jnlp"> </applet>
これだけで、ドラッガブルアプレットは実現できます。アプレット自体には、ドラッガブルにする設定は必要ないので、自分で作成したJavaアプレットでも試してみてください。
このように、Java Web Startと融合して進化を遂げたJavaアプレットですが、RIAとして実行するには、ここへHTTPクライアントとしての機能を実装したりする必要があります。また、サーブレット側でもどのようなリクエストを受けて、どんなレスポンスを返すか決める必要もあります。個人的には、RESTのアーキテクチャが一番手軽ではないかと思いますが、それで素早い開発ができるかどうかまでは、現時点では分かりません。これから検討してみようと思っているところです。
皆さんも、昔気になった技術をもう一度思い返してみてはどうでしょうか。いまのコンピュータリソースだったら使えるかもしれませんし、いろいろな技術向上によっていまなら以前よりもっと使える技術となっているかもしれません。
なお、今回作ったサンプルのソースコードはこちらからダウンロードできます。
@IT関連リンク
開発者が知っておくべきJavaと仮想マシンの歴史
安藤幸央のランダウン(42) JavaとVMが生まれた背景や名前の由来、さまざまなJDK、マイクロソフトやAndroid、iPhoneとの関係、Java VMで動くスクリプト言語など
「Java Solution」フォーラム 2008/9/4
実行速度に挑戦してきたJava VMの歴史
Javaの歴史は実行速度向上の歴史でもあった。今日のJava VMが完成するまでのアーキテクチャの変遷を振り返ることで、Java VMの理解をより深めることができる
「Java Solution」フォーラム 2003/12/11
いまさら聞けない「Webブラウザ」超入門 後編
いまさら聞けないリッチクライアント技術(12) 主要4ブラウザのIE、Firefox、Opera、Safariを取り上げて、Webブラウザによるレンダリングの違いや歴史を説明する
「リッチクライアント & 帳票」フ ォーラム 2008/5/14
SwingでJavaに強くなる
JavaはサーブレットやJSPだけじゃない!Eclipseを使ってSwingを学ぶことで、Javaの基本、GUIアプリケーションの基本スキルを高めよう
SWTは本当に高速なGUIを実現するのか?
[コラム]安藤幸央のランダウン(19) クライアント環境のJavaアプリケーションで高速なGUIを実現するSWT。だが、その性能を盲信してはいけない。使い分けが重要だ
「Java Solution」フォーラム 2003/6/4
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
編集部より:小山氏による大人気のJava入門連載「EclipseでJavaプログラミング超入門」が2009年1月からバージョンアップして改訂する予定です。こうご期待!
Copyright © ITmedia, Inc. All Rights Reserved.