モデル駆動開発がここ数年,注目を集めている。主に メタプログラミング や "テクスチュアル DSL (textual-DSL)",さらには Xtext や MPS のような 言語ワークベンチ との関連によるものだ。これらの技術に多大な功績を持つ Markus Voelter 氏が,自身の 2008 年の論文 "MDD と DSL のベストプラクティス (MDD and DSL Best Practices)" の改訂版を発表した。主要な更新内容のひとつは素晴らしいものだ。
モジュール言語の持つ可能性と言語の拡張性によって,モデリングとプログラミングの間にある溝はほぼ完全に埋めることができます。この事実は,モデル駆動開発によってどのようなアプローチが可能か,どのようにアプローチすべきか,という判断に極めて深く影響します。
それでも氏は,DSL の "チューリング完全 (Turing Complete)" 化を,DSL が不適切なレベルの抽象化にいたる徴候であると現在も考えている。氏の説明によれば,
既存言語に対する拡張機能 (MPS や Soofax が,あるいはある程度 Xtext2 が実現しているような) は,汎用目的言語の拡張によるドメイン固有言語(Domain Specific Language, DSL) の構築を可能にします。つまり,DSL からスケルトンを生成してその中に 3GL を組み込むのではなく,代わりに例えば汎用目的言語をベースとして,その式や文を継承した言語拡張を開発する,という方法もあり得るのです。
DSL の構築が,例えば UML などの拡張よりも望ましい方法である,とする氏の意見は今も変わらない。その一方で,Java の組み込み搭載による拡張を実現した MPS のようなツールの存在もある。要は DSL が Java との統合を意図したものであるなら,汎用言語を拡張するというのも理にかなった方法なのだ。特に氏は,MPS や Xtext,あるいは Spoofax など言語ワークベンチの新しい機能を使って型システムのルールを DSL で機能させ,実現させる方法については,3GL から学ぶことを提唱している。
ビューポイントに関する氏の見解も大きく発展している。ソフトウェアシステムのすべての側面を単一の表記で記述することは一般的に不可能である,という信条を掲げる IT 産業において,ビューポイントは強く支持されてきた概念である。システム構築プロセスのさまざまな時期に関与する多様な役割の存在により,この考えはより強固なものになっている。
[さまざまなビューポイントを表現可能な] 独立した言語モジュールである Spoofax や MPS のようなツールによって,言語のモジュール化が現実のものになります。特に単一のモデルを異なる方法で (結果的に,おそらくは異なるサブセット/ビューポイントに) 投影可能な MPS は,関連性とビューポイントを取り扱う上で,まったく新しいアプローチを可能にするのです。
氏はライブラリに対する DSL の利点を強調し,拡張機構によるメリットを次のように示唆する。
DSL を利用することで,ユーザにライブラリの定義手段を提供する代わりに,ユーザ (およびそれを支援する開発者)がプロジェクト特有の言語拡張を,モジュール化された方法で開発できるのです。この方法には適応表記と静的チェックに加えて,ツールによるサポートというメリットもあります。
"プログラミング言語" あるいは "ドメイン記述言語" を構成する要素に関する定義は 不明確だ。モデル駆動開発に対するツールやアプローチの大きな進展にも関わらず,それを指向する組織の数はいまだ少数である。なぜあなたは,ソフトウェア開発とアーキテクチャにモデル駆動アプローチを適用するのか,あるいは適用しないのか?