ドメイン固有モデリング

ドメイン固有モデリング（ドメインこゆうモデリング、"Domain-Specific Modeling"、DSM）とは、ソフトウェアなど主にITシステムで使われるシステム設計開発手法である。グラフィカルなドメイン固有言語(DSL)を使用してシステムの様々な面を表現する。DSM言語は汎用モデリング言語よりも抽象度が高く、システムを記述するのに詳細化を要しない。
概要.
DSMに付随する概念として、コード生成（DSMモデルからの自動的な実行可能コードの生成）がある。DSMがソースコードの記述や保守から解放されることで、開発者の生産性は、劇的に向上する。自動生成と手で書いたコードの信頼性を比較すると、自動生成のほうがバグが少なく、品質が高い傾向がある。
DSMは、1980年代のCASEツールによるコード生成の試みや、1990年代のUMLツールによるコード生成の試みとは異なる。なぜなら、コード生成機能とモデリング言語は、いずれもツールベンダーによって開発されたものであるが、DSMは、通常それを使用する組織が作成する（もちろんツールベンダーがDSM言語を作ることは可能である）。ごく少数の専任開発者がモデリング言語とコード生成機能を開発し、他の開発者がそれを使用する。
コード生成機能とモデリング言語を利用する組織自身で開発することで、その組織の領域（ドメイン）とニーズを正確に対応させることができる。また、用語や概念が開発者にとって親しみやすいものであるため、開発者がモデリング言語を学習する時間も削減することができる。さらに、その組織の要求だけを考慮すればよいので、モデリング言語の修正も早い。
DSM言語のツールサポート.
多くの汎用モデリング言語は、CASEツールの形で各種ツールを備えている。DSM言語は、それぞれの市場が非常に小さいため、同様のツールを一から作るのは採算が合わない。その代わりとして、DSM言語をサポートするツールを構築するためのDSMフレームワークやDSM環境がある。
DSM環境は、メタモデリングツールである。つまり、モデリングツールやCASEツールを定義するためのモデリングツールである。そこで作成されたツールも同じDSM環境で動作するか、場合によっては独立したプログラムとして動作するようにできるものもある。一般に、DSM環境は、普通のCASEツールと比較して抽象レベルが一段高い。
DSM環境を使うと、DSM言語用ツールの開発コストを劇的に低減することができる。よく設計されたDSM環境は、手間のかかるプログラム部品の生成を自動化し、ドメイン固有エディタ/ブラウザ/部品などを備えている。そのドメインの専門家はドメイン固有の構成要素と規則だけを使い、DSM環境は対象ドメイン向けに最適化されたモデリングツールを提供する。
多くのDSMは、DSM環境として提供される。商用製品には MetaEdit+、オープンソース製品にはGEMS、学術向けにはGMEがある。DSMが一般化するにつれて、既存の統合開発環境にDSMフレームワークを追加する動きが出てきた。例えば、EclipseのEMFやGMF向けのEclipse Modeling Project (EMP)、マイクロソフトでのソフトウェアファクトリー向けのDSL Toolsなどがある。
DSMの例.
DSM言語は特定のドメインにおける複数の抽象化レベルを適用範囲とする。例えば、携帯電話用のDSM言語では、ユーザーインターフェイスの高度な抽象的定義から論理回路の低レベルの実装までサポートする。同様に金融サービス向けDSM言語は顧客に関する高度に抽象化された定義や各種取引に関するアルゴリズムの実装までサポートする。
DSM言語とUMLの比較.
統一モデリング言語(UML)はソフトウェアを中心とした汎用モデリング言語であり、主にオブジェクト指向プログラミングをサポートするよう設計されている。DSM言語とは異なり、UMLは非常に広範囲の領域で利用可能である。
しかし、UMLにはプロファイル機構があり、それによって特定のドメインやプラットフォーム向けにカスタマイズしたり制限したりできる。UMLプロファイルはステレオタイプと呼ばれるタグ付き値と制限によってUMLを特定ドメイン向けに制限および拡張する。UMLのカスタマイズ例としてよく知られているのはSysMLであろう。これはシステム工学向けのDSM言語である。
DSM言語の定義.
言語を定義するには、その定義を記述する言語が必要である。言語のモデルをメタモデルと呼ぶことが多いが、モデリング言語を定義するための言語はさしずめメタメタモデルである。メタメタモデルは2種類に分類される。既存言語のカスタマイズによって生まれた言語と当初からメタメタモデルとして開発された言語である。
既存言語から派生したメタメタモデルとしては、実体関連モデル、形式言語、EBNF、オントロジー言語、XML Schema、MOFなどがある。
ドメイン固有モデリングは特定タスクのために新たな言語を作成することを特徴としているため、メタメタモデルとして新たに設計された言語があるのも何ら驚くべきことではない。その種の言語で有名なものとしては、OPRR、GOPRR、GOPPRRがある。
他のメタモデル定義用ドメイン固有言語として、単純な変換言語とすることを指向したATLがある。ATL変換の巨大なライブラリがEclipse metamodel open source libraryにある。ATLはドメイン固有変換言語の典型例である。