10年ほど前のことです。デリバティブ(金融派生商品)関連のシステムを設計していたとき,師匠と仰いでいた先輩から,こんなことを言われました。

「言語を作るか」

 「???」。何を言っているのかさっぱり分かりません。詳しく聞くと,その意味はこうでした。デリバティブの商品は「スワップ(通貨間の異なる金利を交換する取引)」や「オプション(将来に一定のレートや価格で売買する権利)」などを,商品の特徴に合わせていろいろ付与していきます。そこで,構成要素と組み合わせのバリエーションを「設定ファイル」のような言語として作ろうと考えたようです。

 今思えば,この考え方が非常に重要なものでした。デリバティブの構成要素と組み合わせのバリエーションを示したのが「メタモデル」だったのです。

 ポイントは,実体であるインスタンス・レベルでバリエーションを表現していくこと。具象化されたインスタンス(スワップやオプション)から見て,その構成要素やルール(組み合わせのバリエーション)を表現し,メタモデルとするのです。インスタンス=データとしないことで柔軟性の高い表現をすることができます。

「人間」に意味があるか?

 メタモデルを作る際に最も難しいのは「どこまで抽象化するか」でしょう。私の場合,「一度意味のないレベル(粒度)」まで抽象化し,その一歩手前の粒度が適切だと考えています。

 例えば「社員」を抽象化して「人間」としたとします。もし「人間」に意味がなければ,一つ前の「社員」に粒度を落とします。逆に「人間」に意味があれば,「人間」という粒度に「雇用契約」という特性を付与して社員を表現します。

 メタモデルの視点は,システムの分析や設計に役立ちます。また,新しい技術や概念が出てきたときに,既存の技術とどこが違うのかを整理できます。新しい技術をキャッチアップし,プロジェクトにどう役立たせるのか,既存のプロジェクトで価値のあった技術をさらに効率よく利用するにはどうするかなどを考えられるわけです。これは,ITアーキテクトにとって大きな財産となるでしょう。

=今回のキーセンテンス=
 要素技術も大切ですが,技術をメタモデルとしてとらえることもITアーキテクトにとっては必要です。自分なりの要素技術マップを作成してみるのもよいでしょう。何と何が同じで,何と何が違うのかを把握できると思います。キーセンテンスは

「構成要素は何? 組み合わせのバリエーションは?」

です。

(高安 厚思=オープンストリーム)