連載

次世代開発基盤技術“Software Factories”詳解

第7回 Software Factoriesによる可変性を管理したモデル駆動型開発の例

マイクロソフト株式会社 萩原 正義
2005/10/12
Page1 Page2 Page3 Page4

パターン指向のアーキテクチャ構築

 プロダクトライン設計では、アーキテクチャ/デザインパターンをベースとしたアーキテクチャ構築とDSLの設計が行われる。アプリケーション・アーキテクチャのパターンとしては、関心の分離を実現するレイヤ構造がよく採用されるが、この場合は各レイヤの共通機能を提供するフレームワークと、フレームワークのプログラミング・モデルを利用した、プロダクト開発を支援するDSLを設計する。

 また、フレームワーク設計では、分離された関心における共通パターンを実装シナリオとしてフレームワークに組み込み、DSLでカスタム設計を可能とする。

 例えば、プレゼンテーション・レイヤのUIプロセス・コンポーネント(=分離された関心)は、Webセッションの復旧、Webセッションの転送などを提供し、WebページをUIとしたCRUD(Create、Read、Update、Delete)操作を行うアプリケーションの開発支援、ユーザー登録やチェックアウトなど個別のアプリケーション機能の開発支援などをコード生成技術として持たせる。個別のアプリケーション機能の提供はWebアプリケーションを利用するステークホルダーごとにパッケージ化される。

 図3はそのような関心を分離するレイヤ構造のアーキテクチャ・パターンを利用したアーキテクチャ構築の例である。

図3 関心を分離するレイヤ構造のアーキテクチャ・パターンを利用したアーキテクチャ構築の例
この図は.NETにおけるアプリケーション・アーキテクチャの例である*5。関心の分離の実現はこのようなレイヤ構造によるだけではなく、そのほかのアーキテクチャ・パターンやデザインパターンを用いることで可能となる。関心の分離の実現ではできるだけ分離した関心間で結合度が低く、依存関係が単純になることが求められる。これは変更の局所化、可変性への柔軟な対応という点でアーキテクチャ上の重要な意思決定である。
*5Application Architecture for .NET: Designing Applications and Services」を参照のこと。

DSLの設計例

 プロダクトライン分析では問題領域、解決領域を定義し、必須(共通)フィーチャ、オプション(可変)フィーチャを持つフィーチャ・モデルを作成する。そしてプロダクトライン設計では、フィーチャ・モデルの中の適当なドメインのスコープにおいてDSLの設計を行う。一般的にはスコープは関心の分離の原則に従って決定する。

 DSLの設計では、オプション(可変)フィーチャなどの変化する部分にモデルの柔軟性を与える。その柔軟性がAnnotationのような宣言的定義だけで十分な場合は論理クラス図のクラス属性で定義し、それ以上の制約や手順などの振る舞いに関して柔軟性が必要な場合には、論理クラス図のクラス構造や状態遷移図で定義する。こうした定義は、厳密には論理クラス図と状態遷移図に対して、DSLモデルの記法(具象構文)に関する制約や表現ルールの注釈を付け加えて表現する。これが抽象構文(メタモデル)の定義となる。

 この定義とは別に、DSLモデルを永続化するための構文、コード生成やモデル変換のためのテンプレートの設計をしなければならない。テンプレートの設計では、DSLから生成されるコードが実行されるフレームワークの可変点への設定と複合化すべきコード、フレームワークの構成定義などを決定する。これらはプロダクトライン設計のアプリケーション開発プロセス自動化フェイズで行う。

 前述のUIプロセス・コンポーネントの例では、DSLを利用するプロダクト開発者は、提供されるDSLに従って、UIプロセスの制御フロー、分岐や終了条件、ビジネス・プロセス・コンポーネントの呼び出しなどを定義し、ユーザー登録などの個別のアプリケーション機能のコード生成結果を利用する。

●Visual Studio 2005で提供されるDSLツールによるDSL設計

 こうしたDSLを設計するために、Visual Studio 2005ではDSLツールが提供される。DSLツールはDSLモデルを設計するためのモデル・ベースのコンパイラ・コンパイラの一種である。

 例えば、DSLツールでのDSLモデルは以下の図4の角丸の四角のクラスとして定義され、DSLモデルが持つべき属性、継承や参照などの関係、関係におけるほかのDSLモデルとの多重度を定義する。実際の定義では、クラスや参照関係をツールボックスから選択し設計画面上でレイアウトする。

 DSLツールでは、ツールボックスをカスタマイズし、別のモデルや関係を定義することや、DSLモデルの記法上のシェイプ(形状、色、フォント、線など)の選択も可能である。加えて、DSLメタモデルのインメモリ・データ構造である「Abstract Syntax Graph」(ASG:抽象構文グラフ)の処理、モデル定義の永続化、コード・ジェネレータの呼び出し機能も提供する。ただし、クラス図による構造定義以外の別のドメイン依存の記法や意味の定義、モデル・レイアウトに対する制約などは現在のところサポートされていない。

 図4の例では、通常の概念モデリングのように、ルートの概念を別の概念との関係で詳細化して定義している。概念として、例えば、UIプロセスがルートにあるとすると、その下にはページ遷移の対象としてのページがクラスとなり、ページ間の遷移や制約が関係で示され、全体がUIプロセスをモデル化するDSLの定義となる。

図4 Visual Studio 2005で提供されるDSLツールによるDSL設計の例
DSLツールはDSLモデルを設計するためのモデル・ベースのコンパイラ・コンパイラの一種である。DSLモデルは図中の角丸の四角のクラスとして定義され、DSLモデルが持つべき属性、継承や参照などの関係、関係におけるほかのDSLモデルとの多重度を定義する。実際の定義ではクラスや参照関係をツールボックスから選択し、設計画面上でレイアウトする。DSLツールでは、ツールボックスをカスタマイズし、別のモデルや関係を定義することや、DSLモデルの記法上のシェイプ(形状、色、フォント、線など)の選択も可能である。加えて、DSLメタモデルのインメモリ・データ構造である「Abstract Syntax Graph」(ASG:抽象構文グラフ)の処理、モデル定義の永続化、コード・ジェネレータの呼び出し機能も提供する。

まとめ

 Software Factoriesによる開発のキーポイントをまとめて説明した。しかし、この開発基盤技術はほかの最新のソフトウェア工学的アプローチと同様に、その有効性の検証を積まなければならない。その点では、まだ多くの課題が残されているといえる。

 現在のソフトウェア開発は、オブジェクト指向開発の定着、フレームワークやコンポーネントの普及と進歩、パターンや開発プロセスなど各種プラクティスの普及、開発ツールの充実、新しいパラダイムの適用など、全体として技術は進化しているものの、技術の複雑化、変化への迅速な対応、より高い品質の確保など相反する要求を満たすために一種の技術的閉塞(へいそく)状況に陥っている。

 この状況の打開のために、ソフトウェア開発技術を束ねたソフトウェア基盤技術が求められている。個々の技術の可能性を引き出し、トータルで有機的な基盤になるための技術が次世代のソフトウェア工業化には必要なのである。この連載を始めたとき、この思いを伝えようとしたが、果たして読者に伝えられたのかをいま振り返っているところである。

 さて、次回は本連載の最終回として、Software Factoriesと最先端のソフトウェア工学技術との比較をし、将来の開発基盤技術のあり方を提言する。End of Article


萩原 正義
Software Architect

1993年マイクロソフト入社。北海道大学、早稲田大学非常勤講師。.NET開発、アーキテクチャの調査研究と技術啓蒙に従事。アスペクト指向、フレームワーク実装技術、開発方法論、データ中心アプローチとオブジェクト指向分析/設計との融合、モデル駆動型アーキテクチャ、サービス指向アーキテクチャなどが現在の興味対象。趣味は、IT業界の著名人との雑談とウインター・スポーツ。ソフトウェア技術の発展に貢献することが夢。

 

 INDEX
  次世代開発基盤技術“Software Factories”詳解
  第7回 Software Factoriesによる可変性を管理したモデル駆動型開発の例
    1.フィーチャ・モデルによる可変性管理
    2.ビューポイントの設計
  3.パターン指向のアーキテクチャ構築
    4.付録:Software Factoriesの開発手順
 
インデックス・ページヘ  「次世代開発基盤技術“Software Factories”詳解」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間