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にも興味を持って、コミュニティなどにも参加して欲しいと思います」。
ユニークなチーム編成で幅広い情報を発信
今回集まっていただいた4名について米持氏にうかがった。「今回発表をしてもらった4名は、私がリーダーをしている『ソフトウェアテクノロジー・カウンシル(推進会議)』チームのメンバーです。このチームは、IBMのソフトウェア関連テクノロジーを日本のマーケットに送り出すことを目的として活動しています。製品の情報は数多く提供されていますが、技術に関する情報、特に日本語の情報はあまり提供されていないのが現状であるためです」。
「具体的な活動は、まずオープンソースに関することです。これは、いわゆるLAMPだけでなく、IBMが提供するオープンソース、つまり『素人ではなくコンピュータベンダが中心に推進するオープンソース』の情報提供です。プロフェッショナルが集まって作っているオープンソースのテクノロジーを紹介しています。もう一つはオープンスタンダードで、W3Cなど標準化に関する情報を提供しています。これに最も近いのは浦本氏がいる基礎研究所で、ここでは大きなものではSOAPやWS-Securityの標準化に直接関わっています」。
「またIBMは、9月に新しくスタンダードのポリシーを発表しました。これはIBMが標準化団体などに投資する際のポリシーをまとめたもので、その団体のプロセスが明確であるといった、いくつかの要件をクリアしている団体に対してのみ投資するというものです」。
「もう一つは『オープンアーキテクチャ』で、オープンなテクノロジの推奨をしています。例えばJavaに投資していますが、Javaはオープンなテクノロジであり、多くのプラットフォームをサポートしているためです。最終的にはテクノロジをクロスブランドで提供していくようなことを考えています。一方で、セキュリティやインターフェイス技術、Web 2.0といった、単体の製品にはならないが多くの製品が関係するようなテクノロジもトピックとして扱っています」。
また、このチームは編成がユニークであることも特徴だ。これは米持氏がいろいろなところに声をかけているためで、今回のメンバーも和田氏と須江氏はソフトウェア事業部、野口氏は神奈川県大和市にあるソフトウェア研究所、浦本氏は基礎研究所と、部門的に異なるメンバーが集まっている。このほかにも幕張でベータワークスを行っているスタッフや、日本IBMの半数にあたるテクニカルの人的リソースをまとめているリーダーも巻き込んでいるという。
読者に向けてのメッセージをうかがったところ、「現在、外部に向けて情報発信しているものにテクノロジサイト『ソフトウェア・テクノロジー情報』があります。IBMの技術情報はほとんどが英語のものなので、このサイトを中心に日本語の技術情報をどんどん発信していきます。ぜひ情報収集の場として活用してください。また同時に、IBMの外にも英語ができる技術者の方が多くいらっしゃいます。テクノロジサイトはwikiになっているので、IBMのIDを取得することで記事を作成することもできます。このような方にはぜひ、情報発信の場として活用して欲しいと思います。発表の場もたくさんありますので、ぜひ立候補してください」。
Wikiへの参加には、お問い合わせページより米持氏あてのメッセージを送るか、IBMの取り組む新技術を紹介するセミナー『渋谷テクニカルナイト』に参加して立候補するかの2通りあるそうだ。新技術に参画できるチャンス。IBMソフトウェア・テクノロジー情報に関する技術に没頭している技術者は、ぜひとも立候補してほしい。