現地時間2/21はここバージニア州レストンで開催される、2GXとしても知られるGroovy/Grails Experience(サイト・英語)に関する会議の初日であった。会議は3日間に渡り、90分間のセッションが40セッション、パネルディスカッションおよびコードワー クショップがその内容である。今日の初回のセッションの1つには、Venkat Subramaniam氏による「Groovyでのドメイン固有の言語の作成」があった。ドメイン固有の言語は、過去にMartin Fowler 氏によるIntroduction to Domain Specific Languages(参考記事・英語)やIan Roughley氏によるBuilding Domain-Specific Languages in JRuby(参考記事・英語)の記事としてInfoQに掲載されている。
Venkat氏のセッションでは、ドメイン固有言語とは何か、その特性、タイプ(内部と外部の比較)および作成し、使用するときのGroovyの特長につ いての話があった。Venkat氏は以下にあげるGroovyの内蔵機能を使用して内部DSL(source)を作成することに焦点を当てた。
- Method Missing(source) - メソッドが見つからず、デベロッパが呼び出しをインターセプト可能な場合に呼び出される特殊なメソッド
- Categories(source) - 新しいメソッドがランタイム時に任意のクラスに追加可能
- ExpandoMetaClass(source) - 動的に拡張可能なBean
上記の3点の機能の他に、Groovyがデベロッパに課す制約の欠如とドメイン固有言語を促進する追加機能についてVenkat氏は述べた。その内容は以下のとおりである。
- Closures(source)
- 括弧の使用に関する緩やかな規則 *内蔵リストおよびマップ構文
- Property Missing(source)
- メソッドをインターフェイスに動的に追加する機能および具体的なクラスもメソッドを有する機能
- Categoriesが巧妙なクラスの拡張を可能にする
- 本来ExpandMetaClassは広範囲でグローバルである
- グローバルな影響をクラスに及ぼしたくない場合
- Categoriesは制御された柔軟性を提供する
ドメイン固有言語は今後も注目を浴び続け、Groovyの内蔵機能を使用して作成および使用が可能である。