Javaと親和性が高く、アジャイルな開発に適したスクリプト言語
「Groovy」は、JavaのVM上で動作するスクリプト言語であり、Javaのクラスファイルをそのまま使用するほか文法もほぼ同じであるなど、Javaと密接な関係にあることが特徴となっている。このためJavaからの移行がしやすく、その上Groovyで新たにサポートされた機能や文法を使用することで、可読性が高くすっきりしたコードを記述することができる。また、スクリプトであるためコンパイルの必要がなく、ソースコードを書いたらすぐに実行できることからアジャイルな開発に適している。
Groovyは、JavaのエキスパートであったJames Strachan氏とBob McWhirter氏らによって開発がスタートされた言語だが、これにはユニークなエピソードがあると須江氏はいう。「James Strachan氏が夫婦で海外旅行に行った折に、空港で奥さんがひとりで買い物に行ってしまい、時間をつぶすためにネットカフェでPythonの勉強をしたそうです。しかし、わずかな時間でJavaに欠けている機能に気づき、Javaをベースにいろいろな機能を追加して生産性を向上することを目的に開発を始めたのがGroovyだったのです」。
Javaは優れたプラットフォームであり、使いやすくパフォーマンスも高いことからエンタープライズでのスタンダードとして普及している。また環境面でも優れており、エンジニアの層も厚くノウハウも蓄積されている。しかし、普及しているがために仕様の変更が難しく、しばしば論争が起きる上に実際の拡張には多大なコストがかかってしまう。このため最近では言語仕様の面で古さが目立ってきており、コーディングの冗長性などにおける制約も多く、改善の必要性が高まっている。
そこでデベロッパの世界では、Javaの優れたプラットフォームを生かしつつ、先進的な言語仕様を取り入れて開発効率や生産性、使い勝手を向上しようという動きが高まった。現在、最も成功していると言えるのはJRubyであるが、Groovyもこうした流れから生まれた言語の一つである。Groovyはその後JCP(Java Community Process)に提案され、「JSR 241」として標準化されている。James Strachan氏の多忙によるプロジェクトリーダー交代や、JSR化に際しての大幅な言語仕様の見直しなどにより、GroovyプロジェクトそのものやGroovyの普及が一時的に停滞した時期があった。しかし、現在のGroovyは、仕様も安定し、JavaにPythonやRuby、SmallTalk、JavaScriptなどの動的な要素を取り込み、Javaでは対応の弱い部分をカバーしたバランスの良い言語となっている。
Groovyに注目する理由として、須江氏は「文法がJavaに近いこと」「Javaの資産がそのまま使えること」を挙げている。Groovy上で扱うクラスはJavaのクラスそのものであるため、JRubyやJythonなどと異なり、例えばRubyの文字列やPythonのリストとJavaクラスとの使い分けといった煩雑さがなく相互運用性が高い。また、Groovyの利点としてリストやマップ、XMLといったコンプレックスデータを扱うためのリテラルが言語仕様として用意されていることが挙げられる。また、Javaの機能にはない動的なメソッドの呼び出しをJavaのクラスに適用することもできるため、例えばJavaのStringにGroovy側で自由にメソッドを追加して、Javaクラスを拡張することができる。
さらにGroovyの特徴的な機能に「ビルダー」がある。これはGoFのBuilderパターンを実現するために作られたもので、見通しのいい書き方で構造を持つオブジェクトを組み立てることができる。例えば、XMLをJavaで作ろうとすると、最初にファクトリを作り、そこからDOMインスタンスを作り出して要素を追加していくという作業が必要で非常に面倒だが、GroovyではXMLを作成するための「マークアップビルダー」を使うと、XMLをクロージャの「入れ子」で表現して要素を追加できる。このためXMLの完成品をイメージしやすくなっている。このようにビルダーを使うことで、構造物をシンプルに作成できる。
Groovyを応用した典型的な事例には、フルスタックWebフレークワークであるGrailsがある。Grailsは多くのコンポーネントの組み合わせで構成されており、このつなぎ目にGroovyを使用するというものだ。Grailsの基盤としてはSpringとHibernate、SiteMeshといったフレームワークが利用されているが、その上にGroovyの薄いラッパーをかぶせて基盤部分の複雑さを隠蔽している。これによって既存のJavaEEアプリケーションサーバーで稼働させることのできる、可用性の高いアプリケーションを容易に作成できる。また、GroovyはIBMのProject Zero(WebSphere sMash)にも採用されている。つなぎ目の「のり」として使えるため、サーバサイドでのマッシュアップのアジャイルな開発に適している。Javaをベースとしているため、堅牢性の高いSOA環境との接続にも有効だ。
最後に、現状のGroovyにおける課題についてうかがうと、「Groovyは、JavaScriptと同じで歴史的に若いソフトウェアであり、開発環境がまだ十分こなれていないことが挙げられます。特に、IDEの作成がコンピュータサイエンス的に難しく、これは動的言語であるが故に、IDEが動的なコンテキストもしっかり理解する必要があるからです。ただし、これらの状況は徐々に改善されてきており、Groovyランタイムのパフォーマンスの面でも向上してきました。後は、まだマイナーな言語なので知名度を上げていきたいです。日本のコミュニティも少ないので、活性化するといいな、と思います。これはGroovyに関する日本語の情報が少ないためもありますが、最近『Groovyイン・アクション』という書籍も出ました。実はこの本の翻訳に参加しています。ぜひGroovyにも興味を持って、コミュニティなどにも参加して欲しいと思います」。