濃縮還元オレンジニュース

DSLの使用

IBM developerWorksのシリーズ記事「進化するアーキテクチャーと新方式の設計」から。イディオムのようなパターンには技術的なものと領域(Domain)特有のものに大別でき、領域特有のパターンを抽出する方法としてDSL(Domain Specific Language;ドメイン特化言語)の利用を紹介しています。

まずDSLを使用する動機について「領域特有のパターンとそれ以外を視覚的に差別化し、技術的知識を持たない人でも理解できるようにすることでビジネス利害関係者とのコミュニケーションギャップを埋められる」と説明しています。そして、あるステートマシンの例をもとに、Javaコード、XMLによる外部DSL、パーサ生成器であるANTLRで作成したカスタム外部DSLの例を示していますリスト1~3⁠。Javaコードでは単なるコードにしか見えなかったものが、DSLで表現することで非常に読みやすくなることがわかります。そして最後にJRubyによる内部DSLの例リスト4を示し、プログラミング言語自身が持つ構文能力を駆使してDSLを表現する方法について解説しています。

リスト1 Javaコード(抜粋)
Event doorClosed = new Event("doorClosed", "D1CL");
Event drawerOpened = new Event("drawerOpened", "D2OP");
Event lightOn = new Event("lightOn", "L1ON");
Event doorOpened = new Event("doorOpened", "D1OP");
Event panelClosed = new Event("panelClosed", "PNCL");
:
リスト2 XMLによる外部DSL(抜粋)
<stateMachine start = "idle">
<event name="doorClosed" code="D1CL"/>
<event name="drawerOpened" code="D2OP"/>
<event name="lightOn" code="L1ON"/>
<event name="doorOpened" code="D1OP"/>
<event name="panelClosed" code="PNCL"/>
:
リスト3 ANTLRによるカスタム外部DSL(抜粋)
events
doorClosed D1CL
drawerOpened D2OP
lightOn L1ON
doorOpened D1OP
panelClosed PNCL
end
:
リスト4 JRubyによる内部DSL(抜粋)
event :doorClosed, "D1CL"
event :drawerOpened, "D2OP"
event :lightOn, "L1ON"
event :doorOpened, "D1OP"
event :panelClosed, "PNCL"
:

記事の終わりに、DSLの特徴として「コンピュータプDSLの使用ログラミング言語であること」⁠言語的性質があること」など5つの特徴について述べています。

なお、DSLについてより詳しく知りたい方は、2010年9月に発刊が予定されている『Domain SpecificLanguages』⁠Addison-Wesley Professional)のドラフトがMartin Fowler氏のサイトにて公開されています。

URLhttp://www.ibm.com/developerworks/jp/java/library/j-eaed13/

おすすめ記事

記事・ニュース一覧