J2EE関連の最新仕様をわかりやすく解説
J2EE Watch [3]
標準化進む新スクリプト言語“Groovy”
豆蔵中原慶
2004/8/19
| J2EE Watchでは、J2EE関連の最新仕様に関するトピックを取り上げ、分かりやすく解説します。(編集局) |
読者は、新しく登場したGroovyというプログラミング言語をご存じだろうか? GroovyはJava Virtual Machine(以下、JVM)上で動作するスクリプト言語である(注1)。ここで読者は疑問を抱かれることだろう。たしかにこのページは本来J2EEの最新仕様をキャッチアップするためのコーナーだ。しかし実は、GroovyはJCPで公認され、JSR-241で標準化が進められている。JSRでの活動により仕様が策定されると、将来のJava言語仕様に組み込まれる。従って、J2SEの標準機能として使用できるスクリプト言語となるのである。さらに付け加えれば、J2SE1.5 (Java5/Tiger) で追加されたAutoboxing/unboxing、Metadata 、Genericsなどと同じように、言語仕様としてJavaの実行系に組み込まれるということだ。
そこで今回は、直接J2EEとは関係はないが、Javaの世界における最近のホットな話題の1つであるGroovyを紹介しよう。ところで、本稿ではGroovyが登場した背景、Groovyの特徴と用途、課題に関して解説する。Groovyの詳細な文法や機能に関しては、http://groovy.codehaus.org/を参照してほしい。
注1:Groovyを実行するには、JDK1.4.x が必要となる。■Java APIをシームレスに使えるGroovy
Groovyの開発は、オープンソース・プロダクトで有名なJames Strachanと、XPathエンジンのJAXEN等で有名なBob McWhirterによって始められた。GroovyはJavaより簡単に手早く実装でき、楽しく開発を行うことを目標に、Java開発者によって開発されたオブジェクト指向スクリプト言語である。
サーバサイドをはじめ、ここ数年でJavaテクノロジーは急速に発展した。その理由として、マルチプラットフォームでの動作をサポートしたオブジェクト指向言語であるところが大きい。JVMという動作環境が、プラットフォームの違いを吸収する。そのため、コンパイルされたバイトコードは、JVMが動作する環境であればプラットフォームに依存せず動作する。
Groovyは、Javaの発展に伴い普及したJVMをインフラとして利用している。つまり、Javaと同じく「Write Once Run Anywhere」を実現したスクリプト言語である。JVM上で動作するスクリプト言語としては、JRubyやJythonといったスクリプト言語がすでに存在する。にもかかわらず、なぜ新しく開発されたGroovyが注目を集めているのだろうか?
その理由は、Javaとの親和性にある。JRubyやJythonを利用するには、Javaプログラマは新たに文法やAPIを学習する必要がある。それに比べ、Groovyの文法はJavaの文法と非常によく似ている。しかも、既存のJava クラス(J2SE APIやJ2EE API)をJavaのコードから利用するのと同じように、シームレスに利用することができる。ラッパーを使う必要も、APIを区別する必要もない。つまり、Javaプログラマはほかの言語を習得するより容易にGroovyを習得することができる。更にGroovyのソースコードは、Groovyコンパイラ(groovyc)により100% Pure Javaのバイトコードにコンパイルすることができる。習得が容易だということは、Javaの世界に新しく登場する言語としての魅力といえる。
しかし、Groovyの魅力はこれだけではない。GroovyにはJ2SE APIを拡張した機能や、言語レベルでの画期的な拡張が施されている。さらに、RubyやPython、Perlなどほかのオブジェクト指向スクリプト言語が持つ強力な機能を備えている。例えば、動的型付けによるジェネリックプログラミングが可能となっている。また、Javaの匿名内部クラスとよく似たクロージャをサポートしている。ほかにも、オブジェクト・ナビゲーションや、ListやMapを扱うための簡潔な文法が言語レベルでサポートされている。これらの機能を使うことにより、GroovyではJavaでの実装に比べ簡潔な実装が可能となる。
JSFとそれをサポートしたSun Java Studio Creatorの登場により、近年サン・マイクロシステムズが提唱してきたEoD(Easy of Development)が実現に近づいた。GroovyもEoDに沿ったものだといえる。Java開発者が感じていたJavaに対する窮屈感や、RubyやPython、Perlの規制の緩い文法に対するあこがれを実現したのがGroovyだと筆者は考える。
■Groovyの特徴と用途
Groovyには実装を簡単に、手早く、楽しく行うような機能や文法が備わっている。その特徴を生かした用途を筆者なりに考察してみよう。
XMLの代替としてのGroovy
Groovyには、SQLによるデータベース操作、単体テスト、Beanの扱い方などを簡潔に実装する機能が用意されている。ここでは、XMLやSwingによるユーザーインターフェイス等、階層化された構造をクロージャを使って表す方法について見てみよう。
現在、軽量コンテナ(PicoContaineやSpring等)やアプリケーションサーバ、Antのビルドファイルなど、ほとんどの設定ファイルはXMLで記述されている。XMLの階層構造は、コンピュータから扱うには容易だが、プログラマには複雑である。たった1つのタグの間違いを見つけ出すために、長い時間を費やした読者も多いのではないだろうか。GroovyのMarkupBuilderクラスは、XMLやHTML等のマークアップ言語を、何らかのストリームに出力する機能を持っている。MarkupBuilderクラスは、XMLの煩わしさからプログラマを解放してくれる。
簡単なXMLデータをGroovyのプログラムから出力する例を見てみよう。出力対象となるリスト1のようなXMLがあるとしよう。
<foods> |
このXMLデータを出力するGroovyプログラムがリスト2だ。このプログラムでは、foodData変数に出力するデータを格納している。XMLの出力に関する記述は、xml=new MarkupBuilder()以下である。なお、このプログラムではクロージャやListの扱いなど、Groovy特有の文法の知識が必要となる。これらの文法に関してはGroovyの本家サイト(http://groovy.codehaus.org/)を参照してほしい。
リスト 2:リスト1のXMLデータを出力するGroovyプログラム import groovy.xml.MarkupBuilder |
Groovyでは、要素名となるクロージャを作成することでXMLデータの要素を表わす。引数には要素の属性を指定する。要素を表すクロージャの中でさらにクロージャを定義することで階層構造を表している。クロージャ内では、繰り返しや条件分岐の処理を行うことができる。
すなわち、XMLデータをGroovyで作成すれば、動的なXMLデータの作成が可能になるのだ。例えばデータベースから値を取得し、そのデータに従ったXMLデータを作成したり、現在日時に従って動的に変化するXMLデータを作成することができる。これを利用し、設定ファイルをXMLファイルではなくGroovyで定義することで、動的な設定が可能となるわけだ。この実例としては、すでにSeasar2のようにGroovyを設定ファイルとして利用するためのライブラリが存在する軽量コンテナも登場している。
その他の特徴
Groovyの特徴には、前述のマークアップ機能のほかにも、テストコードの簡潔な作成や、テキスト中に埋め込まれたスクリプトレットや式言語を解析し文字列に変換するテンプレート機能、簡潔なデータベース操作などがある。
特にJUnitのテストコードをGroovyで作成する機能は、テストコード作成において非常に有効だ。GroovyとJavaの親和性の高さと文法の類似性により、Javaプログラマは容易にGroovyでテストコードを作成することができる。このことは、単体テストコードを簡潔に、素早くJavaプログラマが記述できることを意味する。JUnitがGroovyのランタイムに含まれていることで、GroovyでJUnitのテストコードを記述することを可能としている。さらに、GroovyではJUnitのアサートメソッドに加え、独自のassertメソッドが用意されている。GroovyでJUnitテストコードを作成する利点に関しては、Groovyの本家サイト(http://groovy.codehaus.org/Unit+Testing)に記述があるので参照してほしい。
以上、Groovyの特徴と用途について述べた。Groovyの魅力は、Javaに比べ文法の規定が緩く、簡単にコード作成ができるということである。素早く、簡単にプログラム作成ができることから、ラピッド・プロトタイピングやテスト駆動型の開発に向いているといえるだろう。
■Groovyの課題と今後
Groovyは、Perlなどほかのスクリプト言語と同じように、Groovyのみでアプリケーションを構築することは可能である。しかし、まだ生まれたばかりの言語だ。執筆時点でのGroovyのバージョンはGroovy 1.0-beta-6であり、このバージョンではまだ不具合が存在する。また、言語仕様が変更される可能性もある。しかし、その特徴から、Groovyは今後のJavaプラットフォームを利用したアプリケーション構築に活用されている可能性があり、評価する価値はあるのではないだろうか。
今後解決されるべき課題としてはパフォーマンスがある。GroovyのパフォーマンスはJavaに比べ劣っている(注2)。現状のパフォーマンスでは、Groovyのみでアプリケーションを構築することは現実的ではない。
もう1つの大きな課題は、Groovyのエラーを解読するのは非常に困難である点だ。現状では、スタックトレースがコンソールに表示されるが、重要な情報がそれ以外の情報の中に埋もれてしまっている。この問題が解決され、JSR-241での標準化が進み正式リリースされれば、Groovyに対応した開発ツールが多数登場すると思われる。
このように、Groovyにはまだ多くの改善すべき課題が存在する。しかし筆者は、Groovyの登場により厳格な言語であるJavaに柔軟性が加わったと考える。Groovyの文法は規制が緩く、簡単にプログラムを作成することができる。Groovyによる手早い開発はテストやXMLの代替をはじめとして、今後Javaの開発に多く取り込まれていくと考えられる。つまり、Groovyの登場によりJavaの開発は、よりアジャイルな開発に適用しやすくなっていくのではないだろうか。
| 筆者プロフィール |
中原慶(なかはら けい)![]() 3年半の間、ソフトハウスにて多種多様なシステム開発に従事する。システム開発を通し、次々に登場する理想的な技術と、実際の開発現場で使われる技術に温度差を感じる。その後、自分自身が、よりよい開発プロセスや技術を実際の開発現場に浸透させる橋渡しなろうと考え、株式会社豆蔵に入社。現在の興味の対象は、より実践的なモデリング。 |
J2EE Watch バックナンバー
- 第1回 Webサービスの標準サポート「JAX-RPC」
- 第2回 “誰もが書けるEJB”を実現する「EJB 3.0」
- 第3回 標準化進む新スクリプト言語“Groovy”
- 第4回 導入段階を迎えたリッチクライアント(前編)
- 第5回 開発ツールとJSFのよい関係とは?
- 第6回 J2SE 5.0「Tiger」で何が変わるか?
- 第7回 DIとAOPがサーバ・コンポーネント技術を変える
- 第8回 Java開発用のIDEとしてEclipseはどう変わったのか
- 第9回 通信系サービスと情報系サービスを融合するJava
- 第10回 Java技術者がフロントにFlashを選択した理由とは?
- 第11回 米JBossは米Red Hatとマーケットシェア拡大を狙う
| Java Solution全記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成 - Android 2.1の新機能で作る、美しく燃える“待ち受け” (2010/2/24)
新しく追加された、動く壁紙「Live Wallpaper」機能のサンプル動画を表示し、構成、設定ファイル、実装の仕方を解説します
|
|
- PowerShell 2.0で始めるWindowsシステム管理
- natテーブルを利用したLinuxルータの作成・2
- ERPの“事業仕訳け”でIT予算をもっと有効に!
- 調査の難しい「OutOfMemoryError」事例、5選
- 組み込みシステム開発における“モデル”とは?
- 西和彦、ビル・ゲイツに会う
- 「事業仕分け」「修正予算」って何?国家予算の全体像
- IT業界職種カタログ(8)ITエデュケーション
- .NET TIPS - .NET開発のテクニックとヒント集 -
- Hyper-Vライブ・マイグレーションの運用ノウハウ
- 構造体の便利な用途、インターフェイス入門
- 3人中2人が間違える!? 片持ちばりの計算をしよう
スキルアップ/キャリアアップ(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の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |







