去る 10 月 27 日~ 30 日にかけて、アメリカ・ロサンゼルスにて開催された「Microsoft PDC」に参加してまいりました。
PDC というイベントでは、毎回マイクロソフトの新しい技術が披露され、「もっともエキサイティングなカンファレンス」であるといえます。

今回も、Azure Services Platform を始めとして、Windows 7 や.NET4.0 といったトピックが紹介されました。
これらはマイクロソフトが提唱する「Software + Services」を実現するためのプラットフォームとして位置づけられています。

中でも私が一番注目した技術は、モデリングプラットフォームである「Oslo」です。
これはモデル駆動開発を実現するためのプラットフォームで、テキストベースのドメイン特化型言語 (DSL) やグラフィカルベースの DSL をモデル化し、SQL Server2008 上に構築されたリポジトリに格納する構造になっています。

中でも、テキストベースの DSL をモデリングするために開発された「M 言語」に注目しています。
これは C# や JAVA の開発経験がある人であれば比較的容易に習得可能な言語で、スキーマを定義する MSchema、DSL の文法を定義する MGrammer、そして抽象的なデータモデルを表現する MGraph の 3 種で構成される「M 言語フレームワーク」として構成されています。
例えば座標 (Location) を表すための Point を MSchama で定義すると以下のようになります。

module Location {
    type Point{
        X : Integer where X < 100;
        Y : Integer?;
    }
}

Point という型は、X と Y の 2 つの Integer 型スキーマ項目から構成され、X は 100 未満である必要があるという定義になっています。
このようにして、MSchema を定義することで抽象モデルを表記する事が可能です。
また、値を代入する際には以下のように指定します。

module Location {
   X{10}
   Y{20}
}

さらに変換ルールを MGrammer で定義することで、テキストベースの DSL を MSchema で定義したスキーマに変換することが可能です。

module Location {
    language PointLanguage {
        syntax Main = h:Integer("," v:Integer)?
            =>Point{ X{ h }, Y{ v }};
    }
}

上に示した MGrammer を適用すると、座標を以下のように指定することが可能です。

10,20

このようにして、より自然言語的な表現でモデルの値を指定することが可能になります。
M 言語フレームワークで定義されたモデルはリポジトリに格納することで、プラットフォームに依存しないモデル定義として再利用することが可能です。
また、これらのモデルを実行環境に合わせた様式に変更することでモデル駆動型の開発を実現することが可能になります。