モデル駆動開発の考え方を実用レベルで実現したシステムの例としてMendix社の製品を紹介します。この製品はDSLベースの現実的モデル駆動開発の実現により、欧州と米国を中心に利用が拡大しています。製品としては開発者(ビジネスエンジニア)が利用するMendix Business Modelerと社内サーバやクラウド側の実行環境(Mendix App Platform)があります。
モデルに基づいてシステム開発を行うアプローチとして説明されるモデル駆動開発ですが、具体的な製品としてはUMLやDSLをベースとしたモデル作成支援とコード生成・編集支援(スケルトンコードを生成し補完するコードを書き込む仕組み)を備えたものが多数派です。これに対しMendix App Platformは、対象領域をWebアプリケーションに絞り込むことで、モデル開発だけでビジネスアプリケーションが完成する(モデルを解釈実行)という最短のパスを実現しています。作成するモデルは次の3種類で、すべてBusiness Modelerを使っての作業になります。
- ドメインモデル(データモデル)
- GUIモデル
- ロジックモデル
ドメインモデル
UMLのClass図(サブセット)相当のグラフィカルな記法を使い、ダイアグラムとして作成します。ここで定義するClassは実行環境でデータベースの一つのテーブルに対応づけられます。出来る範囲ですが入力項目の妥当性チェックも指定できます。例えば次のようなものです。
顧客-注文-注文明細-製品というEntityモデル
GUIモデル
ドメインモデルで必要な概念と関連を定義しましたが、データ操作(CRUD操作他)につながるGUI定義(モデル)も必要です。登録したデータのリスト表示画面、エントリデータの編集画面がドメインモデルを用いて容易に作成できます(マウス操作が中心)。GUIモデルでは一つの画面定義が必ずしも一つのClassに対応するものでなく、業務の要求に応じた柔軟な画面設計が可能です。例えば次のようにマスター・明細を同時に含めることも出来ます。
注文新規編集画面GUIモデル
ロジックモデル
通常ドメインモデルは構造を表現したモデルになります。従って、振る舞いを表現したモデル、例えばビジネスロジックやビジネスルールの定義も必要になります。何らかのプログラミング言語やスクリプト言語でこの部分を記述し、自動生成されたコードに欠けているコードを書き足す方式を良く見かけます。この製品では業務ロジックをBPMNのサブセットを使いモデルとして記述します。例えば次のようなものです。
サンプルロジックモデル
こういった書き方なら業務・ビジネスロジックの大部分をコードの世界に入らず書くことが出来ます。Web ServicesやXMLインタフェースもモデルレベルで対応できるようになっています。どうしてもモデルで表現出来ない(またはしたくない)場合は、ロジックモデルの一部からJavaコードを呼び出せます。
大雑把な概要説明でしたが、かなりの種類の業務アプリケーションをこの方式で記述出来そうだということがお分かりになったと思います。では、実行環境はどうなるのでしょう?単体テストはBusiness Modelerを動作させているPCでサーバプロセスを動かすことで実施出来ます。それ以上のテストや本番用には、企業内サーバに実行環境を用意するか、Mendix社が運用するクラウド上の実行環境(Mendix App Platformの構成要素)を利用します。
評価のために簡単なサンプルシステムを作成してみましたが、国際化にも対応しており、業務概念定義・画面定義・ロジック定義だけで(コードを書く事なく)動作しました。また、プログラミング言語を使わなかったため一連の開発作業が早く、限られた時間でモデル作成・テスト・修正を何度もまわす事ができました。
さて、このようなシステム開発手法はシステムの発注者・利用者にとってどんなメリットがあるでしょう。Webアプリケーション形態の業務アプリケーションをかなり短期間で作成出来ます。その改変・更新も同様に短期間で出来ます。作成したモデルが実行環境のもとで実行されると共に、そのモデル自体が読み易いため、発注者・利用者と開発者がコミュニケートする仕様書として利用する事も出来ます。ビジネス環境が激変する昨今にぴったりの、変化に対応し易い業務システムが実現出来そうです。