「Javaは遅い」から「Javaは楽しい」に至る歴史:小山博史のJavaを楽しむ(12)(3/3 ページ)
教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集部)
オールインパッケージのNetBeans
NetBeansはEclipseよりも先に、Webアプリケーション開発に必要なものがオールインパッケージのような感じで入っていたため、個人的には手軽にWebアプリケーション開発に挑戦をするならNetBeansがお薦めだと思っていました。最近は、EclipseもJava EE用パッケージを用意するなどしているため、いまはNetBeansとEclipseと、どちらが良いかは悩ましいところです。
日本ではEclipseが非常にブレイクしたので、読者の身の回りには「Eclipse使い」が多いのではないでしょうか。ただ、JSRのリファレンス実装を取り込むスピードはNetBeansの方が速いような気がします。JavaFXへの対応やGlassFishへの対応などは、NetBeansはかなり早い段階から取り組んでいますから、使い分けるといいのではないかと考えて、筆者は両方インストールして使っています。
IDE使いならJavaデスクトップの実用性は分かるはず
このように、Java用IDEが普及してきた流れもあるため、Javaデスクトップアプリケーションも十分実用性が高くなったといえます。CPUやOSに最適化されたネイティブコードのアプリケーションが駆逐されるほどの勢いはありませんが、今後も適材適所でJavaデスクトップアプリケーションもたくさんの種類が出てくるのではないかと予測しています。
Javaはもう遅くない
また、HotSpot技術やJITコンパイラ技術により、現在のJavaVMは非常に高速にJavaアプリケーションを実行できるようになったので、JDK 1.0/1.1のころによくいわれた「JavaVMによるJavaアプリケーションの実行は遅い」という点については、現在はほとんど問題視されなくなってきていますが、偏見が根深く残っているのも事実です。
クライアントのバージョン管理が問題だ
さて、そうすると、デスクトップ向けのJavaアプリケーションのバージョン管理が今後どうなるか気になります。
Webアプリケーションを利用することのメリットには、クライアントマシンではWebブラウザが動いていればよく、Webアプリケーションのバージョンアップはサーバ側でコントロールできるということがあります。Javaデスクトップアプリケーションでも、クライアントマシンではJavaVMが動作すればよく、バージョンアップも簡単にコントロールできる方法があるとうれしそうです。
Java Web Startという回答
サン・マイクロシテムズはこの要求に応えるものとして、「Java Web Start」という技術を提供しています。この技術を利用すると、Javaアプリケーションは初回の起動時はネットワークからダウンロードしてからプログラムを実行しますが、2回目以降の起動はローカルにダウンロードしたファイルを使って実行します。また、ダウンロード元にアプリケーションのバージョンアップファイルが置いてあると、バージョンアップもできます。
このように、Java Web Startの登場により、筆者はGUIアプリケーション開発時には次の3種類のうち、どこに分類されるGUIアプリケーションを開発するのかを意識する必要があると考えています。
- 重量級のデスクトップアプリやローカルマシンの管理権限が必要なアプリケーション
- Java Web Startのような軽量級のデスクトップアプリケーション
- Webアプリケーション
当たり前になってきた自動アップデート
最近は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アプレットとJava Web Startの融合
例えば、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アプレット+REST=RIA?
このように、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月からバージョンアップして改訂する予定です。こうご期待!
- ビルドツールGradleのインストールと使い方、Jenkins/Git連携
- JBoss Forgeでアジャイルな対話式開発をやってみた
- JavaとJavaScriptの良いとこ取り? 「Dart」超入門
- 年末でJetty(絶対)にできる Android携帯サーバ活用
- UNIX/Linuxも楽しむ Java開発者になるための学習法
- Subversionならできる! NetBook最強バックアップ術
- 「Javaは遅い」から「Javaは楽しい」に至る歴史
- Javaはクラウドのプラットフォームになり得るのか
- 【新人なるプログラマーへ】ソースコードを読みましょう
- Google Android用携帯アプリ作成のための基礎知識
- デスクトップをJava製ウィジェットでにぎやかに
- そろそろブログ+RSSアプリでも作ってみませんか?
- JavaFXでJava RIA開発はどれくらい変わるの?
- 【新人研修向け特別企画】JavaでPHPを使ってみた
- (Java+Derby)* Ruby on Rails プログラミング
- 待望のJava SE 6 でパーシステンス
- いろいろなJavaを使ってみよう
- JavaとJavaScriptの親しい関係
Copyright © ITmedia, Inc. All Rights Reserved.