UML 統合開発ツール
XDE for Visual Studio.NET by C# メモ

更新日:2004/10/18
最終更新日:2005/ 2/ 7
gomi521@oki.com
suzuki898@oki.com

概要

XDE は IBM/Rational の UML 統合開発ツールです。
UML の各種ダイアグラムの作成からコード生成やリバースエンジニアリングが可能です。
XDE for Visual Studio.NET はマイクロソフトの Visual Studio.NET で一体化して動作する XDE です。
同様のものとして、XDE for Eclipse があります。これもこの Visual Studio.NET 版とほぼ同様に動作します。

内容

準備

  1. IBM/Rational ROSE のバージョンアップまたはアンインストール

    1. ROSE のバージョンアップ

    2. XDE と ROSE を並行して使用するときは、ROSE の版数を XDE のものと揃える必要があります。具体的には最新版の ROSE にバージョンアップする必要があります。
      # ROSE と合致する版数は製品情報をご覧ください。
    3. ROSE のアンインストール

    4. ROSE の機能はほぼ XDE で動作しますので、新規に ROSE を使う必要性はあまりありません。ROSE を使用しないときはアンインストールをしてください。
      # Robot など他の ROSE Suite 製品に含まれるツールを使用するときは、ROSE suite を最新版にしてください。

      なお、Rational Suite に同梱されている PurifyPlus は XDE にも同梱されていますので、PurifyPlus は Visual Studio.NET から動作します。

インストール

  1. 必要なディスク容量は約 1 GB です。
  2. Visual Studio.NET は予めインストールされている必要があります。
  3. XDE for Visual Studio.NET の媒体 CD-ROM から、指示に従ってインストールを行います。

使用方法

XDE ではコード生成を行わずにモデリングだけを行うときと、コード生成とリバースエンジニアリ ングを行うときの両方で、使うことができます。

ここでは、コード生成とリバースエンジニアリングを行うときの XDE の使用方法について記述します。

Rational XDE モデリングから開始するときは以下にあります。

なお、操作は、ツールバーのプルダウンメニューからの操作か、右クリックによる ポップアップメニューでの操作で説明しています。 実際は頻度の高い操作はアイコンボタンをツールバーに表示してクリックするという方法が多 く使われています。

Visual Studio.NET の起動〜プロジェクトの作成

Visual Studio.NET を起動します。次に新規のプロジェクト(ソリューション)の作成または既存のプロジェクト (ソリューション)を開きます。ここでは新規プロジェクトを作成するときの例を示します。 但し、既存のプロジェクトのときでも同様に作成していくことができます。

  1. プロジェクトの作成
    [ファイル][新規作成][プロジェクト]
    で作成します。
  2. プロジェクトの選択
    適当なプロジェクトを選択します。ここでは 

    [Visual C# プロジェクト][コンソールアプリケーション] 

    を選択して、C# のコンソールアプリケーションを作成していきます。

    注意: [Rational XDE モデリングプロジェクト]は UML モデリングのためのプロジェクトですので、ここでは選択しないでください。
  3. プロジェクト名と格納場所の設定
    ここではプロジェクト名に [XDETest]  場所を [C:\VCppNET\XDETest] にします。

Visual Studio.NET のプロジェクト作成

リバースエンジニアリング (ラウンドトリップエンジニアリング)

Visual Studio.NET はプロジェクトに応じたテンプレートコードを生成しますので、そのコードをリバースエンジニアリングして、UML クラス図を生成します。

以下に自動生成されるテンプレートコードを示します。

using System;

namespace XDETest
{
	/// 
	/// Class1 の概要の説明です。
	/// 
	class Class1
	{
		/// 
		/// アプリケーションのメイン エントリ ポイントです。
		/// 
		[STAThread]
		static void Main(string[] args)
		{
			//
			// TODO: アプリケーションを開始するコードをここに追加してください。
			//
		}
	}
}
 
  1. [ソリューションエクスプローラ]のウィンドウで、[プロジェクト XDETest] または [ソリューション XDETest] を[選択]して、[右クリック] します。

    もし、ソリューションエクスプローラが表示されていないときは、[表示] [ソリューションエクスプローラ] で表示します。
  2. 右クリックしたときに現れるメニューから [リバースエンジニアリング] を選択し実行します。
  3. [XDETest.mdx] のウィンドウが表示されます。

    ここはまだオブジェクトは持ってきていませんので、空になっています。
    XDE や ROSE はモデルオブジェクトからウィンドウへ持ってくることにより表示されるようになっています。
  4. [モデルエクスプローラ] から [Class1]のモデルオブジェクトを [XDETest.mdx] ウィンドウへ [ドラッグ] して持ってきます。

    もし、[モデルエクスプローラ]が表示されていないとき(最初の使用のときは表示されていません)は、
    [表示] [その他のウィンドウ] [モデルエクスプローラ] により、表示します。
  5. クラス図のサイズを調整します。デフォルトでは小さくなって一部しか表示されていません。

リバースエンジニアリングの UML クラス図

Visual Studio.NET で生成されるデフォルトのクラス名である Class1 のクラス図が表示されます。操作はデフォルトで生成される Main () が表示されます。

UML クラス図の編集

クラス図の追加や変更、削除は従来の ROSE の Look&Feel とほぼ同じ感覚で行えます。

画面のクラス図の直接編集

  1. 名前の変更は、クラスを[選択]した後、直接行えます。
  2. 属性や操作の追加は クラスを [選択] [右クリック] でメニューを表示し、[UML の追加] または [C# の追加] をクリックします。
    両者の差は部品が C# に依存した各種の部品か UML の部品かになっています。[C# の追加] で [メソッド] を選択しますと C# に依存した詳細なメソッドの設定が可能になっています。[UML の追加] では C# に依存しない抽象的なものだけが直接編集することで設定できます。この詳細は後述しています。

[ツールボックス] を使っての編集

もしツールボックスが表示されていなければ、[表示] [ツールボックス] で表示します。

  1. [C#] または [UML クラス]の部品を[ドラッグ] または 部品を[選択]して、モデルウィンドウで[クリック]
    ここでは [C# のクラス] を [ドラッグ] します。
  2. [C# クラスの追加] ウィンドウが表示されます。
    ここでクラス名やアクセス属性、基底クラスなどの情報を設定します。例えば、クラス名は Class2 のそのままにして、基底クラスに [Class1] を設定します。
    設定が終われば、[OK] ボタンをクリックします。

C# のクラス図の設定

 3.    モデルウィンドウに 3 でドラッグしたクラスが表示されます。
        但し、この段階では基底クラスへの[汎化]関係の 矢印は表示されません。これは [ダイアグラム] [継承概要のリフレッシュ] を行うと表示される ようになります。また、以下の手順にあるコード生成や同期を行うことにより表示されます。

Class2 の追加  
(リフレッシュまたは同期をしない段階では汎化関係の矢印は表示されないことに注意)

 

コード生成と同期

クラス図からコード生成を行います。

  1. クラスを選択、[右クリック] [コードの生成]
    例えば、Class2 を選択してコード生成をします。
  2. そのクラス図のクラスを[ダブルクリック]すると、生成されたコードがウィンドウに表示されます。
    [Class2] のクラス図をダブルクリックしてみます。
    生成されるコードは以下のようになります。
namespace XDETest
{
	public class Class2 : Class1
	{
	}
}

今後は、クラス選択して [右クリック] [同期] を行うとモデル(クラス図)とコードの同期が取れて、同一のものになります。

モデルオブジェクトから Class2 をドラッグしてモデルウィンドウへ持ってくると、汎化関係も表示されます。

このときに以前の Class2 を選択し、[右クリック] [ダイアグラムから削除] して1個にします。これが上記の Class2 の追加画面になります。 

モデルウィンドウのタブをクリックしてクラス図に戻り、Class2 の操作を追加してみます。操作方法はUML クラス図の編集と同様です。[C# の追加] で [メソッド] を選択し Operation1 メソッドを追加し、[UML の追加] で [操作] を選択し、操作 Operation2 を追加してみます。そしてこれを右クリックで [同期] または [コード生成] を行います。生成されるコードは以下のようになります。

namespace XDETest
{
	public class Class2 : Class1
	{
		public int Operation1(long arg1)
		{
			return 0;
		}
		public void Operation2()
		{
		}
	}
}

既存プロジェクト "funado.lisp" のリバースエンジニアリング

既存プロジェクトの funado.lisp の C# の WindowsForm 版をリバースエンジニアリングしてみます。

新規プロジェクトのリバースエンジニアリングと同様に行います。

  1. 既存プロジェクトを開きます
    [ファイル] [開く] [プロジェクト] で、プロジェクトを選択します。ここでは funad.lisp のWindowsForm 版のプロジェクトを選択します。
  2. [ソリューションエクスプローラ] で プロジェクト [funado.lisp] を選択し、右クリックで [リバースエンジニアリング] を行います。
  3. [モデルエクスプローラ]で、クラスを選択し、それをモデルウィンドウ [funado.mdx] ウィンドウでドラッグします。
    位置とサイズを調整します。

funado.lisp (WindowsForm by C#) の UML クラス図

言語依存ダイアグラムか UML ダイアグラムか?

XDE for Visual Studio.NET では、ダイアグラムには言語依存、例えば C# ダイア グラムか UML ダイアグラムが共存しています。UML ダイアグラムからでも、もちろん コード生成は可能です。

機能的には言語依存の設定を行うダイアログが出るか出ないかの差だけで、結果としての機能は同じです。例えば、UML のクラスを選んでも、class の属性に unsafe などの C# 特有のものをプロパティウィンドウで手動で設定することはできます。そのため、ダイアログウィンドウが出るのがうっとおしくなければ、言語依存のダイアグラムを使う方がいいでしょう。

言語依存ダイアグラムの紹介 (C#ダイアグラムの紹介)

C# ダイアグラムのクラス図には、C# 特有のものが用意されています。

例えば、ストラクチャ, enum、委譲やクラスの属性として abstract、sealed、new など、引数の属性 in, out, ref など C# 特有のものが使えるようになります。以下に C# のメソッド追加で指定できるパラメータ設定画面が示します。

C# ダイアグラムにおける C# メソッド追加の設定画面

本質的な問題ではありませんが、C# ダイアグラムではインタフェースはロリポップ表記 (○で表現するもの)になっています。

またリバースエンジニアリングするときのデフォルトは、言語依存ダイアグラムです。

使い分けの指針

具体的な問題を考えていきましょう。例えば、あるものをクラスで実装するか、構造体で実装する かをいつ判断するかです。これは同形ですので、後回しにしてもそれほど弊害は出ません。同じように enum で実装する場合もそうです。ここからは早期の段階では UML ダイアグラムを使用しても大きな 問題はないということになります。

次にクラス属性やメソッド属性をいつ決定するかです。例えば、メソッドを static にするか dynamic にするかの判断をいつするかです。これは比較的早期に決定すべき問題です。その理由は他への影響 が存在するためです。しかし UML ダイアグラムでこの表現が出来ないということではなく、UML ではステレオタイプを使用して表現が可能です。またはノートに表現する方法もあります。しかしス テレオタイプやノートはオプションですので、表記を忘れてしまう可能性が発生します。ここからは 言語依存のダイアグラムが早期に、つまり設計段階の早い時期に必要であることを示しています。

これらの情報を考慮して、プロジェクトで統一して、どのダイアグラムを使用するかを決定する 必要があります。

デザインパターンの適用

XDE では多くのデザインパターンが登録されています。以下は [ツール] [Patterns] [お気に入りのライブラリを開く] [GoF Library for CSharp v2_5] で表示されるパターンエクスプローラです。


パターンエクスプローラ

パターンの選択、適用

まず、モデルウィンドウを表示し選択しているときに、[ツールボックス][GoF Pattern LIbrary for CSharp]をクリックし、適当なパターンを選択します。例えば、[FactoryMethod] パターンを適用してみましょう。
(これは[ツール] [Patterns] [お気に入りのパターンを適用]でもできます。)

一口メモ: デザインパターンには C++ 版と C# 版があります。ツールボックスの右側にその言語名が書かれていますので、ウィンドウ幅がないと表示されていませんが、 Patterns と複数形になっているのが C++、Pattern と単数形になっているのが C# ですので、ここで区別することができます。

この操作後には [パターン適用ウィザード] かまたは [パターン適用ダイアログ] かを選択する画面が表示されます。最初はウィザード形式のものを選びましょう。このウィザードでは名前などを設定することができます。[OK] ボタンをクリックしますとパターンがモデルウィンドウに挿入されます。"パターンの拡張に成功しました"といダイアログが表示されますので、[OK] ボタンをクリックします。

モデルウィンドウに以下の FactoryMethod のパターンが挿入されます。


FactoryMethod パターンのモデル図

パターンコードの生成

モデルエクスプローラから、FactoryMethod パターンのクラスすべてをモデルウィンドウにドラッグ&ドロップします。

もしモデルエクスプローラが表示されていないときは、[表示] [その他のウィンドウ] [モデルエクスプローラ] で表示します。

以下に Creator クラスと ConcreteCreator クラスの図がモデルウィンドウに表示されている状態を示します。


FactoryMethod パターンの一部

モデルウィンドウでこれらのクラス図を選択し、右クリックでメニューを表示させ、[同期] をクリックします。これらに対するコードが生成されます。

例えば、ConcreteCreator クラス図をダブルクリックしますと、そのコードが表示されます。

以下にそれを示します。

namespace XDETest
{
  /// 
  /// -The ConcreteCreator overrides the FactoryMethod to return an instance of a ConcreteProduct.
  /// 
  public class ConcreteCreator : Creator
  {
    public ConcreteCreator()
    {
    }
    /// 
    /// -This operation returns an instance of the Product
    /// 
    /// 
    /// 
    /// 
    public override Product FactoryMethod()
    {

      //TODO: The operation overrides the factory method to return an instance of a ConcreteProduct. 
      //You can customize the operation based on your application needs; 

      return new ConcreteProduct();
    }
  }
}

後は通常の UML クラス図と同様に操作できます。

チームでの分担開発(モデルの分割とマージ)

XDE は、モデルファイルの分割/マージにより、複数メンバーでの分担開発をサポートします。

ここでは、チームでの分担開発を行う場合の、XDE の使用方法について記述します。

XDE での分担開発の概要

XDE のモデルは、パッケージまたはダイアグラムごとに分割またはマージすることが出来ます。分割したモデルは、分割した単位で個別のファイル(パッケージは拡張子 .pkx、ダイアグラムは拡張子 .dgx)として保存されます。

分担開発にあたっては、VSS や ClearCase などのバージョン管理ツールを用いると、共有化がしやすく便利です。

分割したモデルで複数作業者による変更の競合が発生した場合は、XDE の機能を使って差分を比較しながらマージすることが出来ます。ですがまずは、分割したファイル単位で排他的に取り扱う方が、手間やトラブルが少なくて済みます。

分割の手順

モデルの分割は、XDE のモデルエクスプローラで行います。

ここでは、バージョン管理ツールを使わない手順を書いています(使う場合については後述)。

  1. まず誰か一人の環境で、モデルエクスプローラにてパッケージ(またはダイアグラム)を右クリック⇒「ユニットの分割」を実行します
    そうすると、Visual Studioの該当プロジェクトディレクトリの下にサブディレクトリが作られ、分割したものがユニットファイルとして格納されます。
    分割を解除するには、同じ操作で「ユニットの結合」を実行します。
  2. 分担したい人に、XDEプロジェクトのディレクトリを、丸ごとコピーして渡します(または共有ファイルサーバで共有する)
  3. 各担当者は、担当分のパッケージについてモデリングします
    Visual Studioから直接ユニットファイルを開くことはできないので、必ずモデルファイル本体(.mdx)を開き、モデルエクスプローラから担当部分    の編集を行います(変更内容は、各ユニットファイルに保存される)。

マージの手順

マージは、分割した個々のユニットファイル(.pkx、.dgx)を一箇所に集めることで行います。

マージが必要になったときに、マージ役の人がファイルを受け取って自分のプロジェクトディレクトリにコピーするか、または共有ファイルサーバ上でファイルを集めます。ユニットファイルを排他的に運用すれば、ファイルを集めるだけでマージが完了します。

同じユニットファイルに対して変更の競合が発生した場合は、XDEの機能で比較とマージを行うことが出来ます。

  1. 各担当から、モデルファイル(.mdx)と、ユニットファイルの入ったサブディレクトリ一式を受け取ります
    競合部分の比較とマージは、ユニットファイル単位では行えません。
  2. マージ役の人が、Visual Studio上で、比較元のモデル(.mdx)を開きます
  3. 「ファイル」メニュー⇒「Compare/Merge」⇒「新規セッション」を実行します
  4. 「コントリビュータ」(入力側)に、比較先のモデル(.mdx)を指定し、「比較」または「マージ」を実行します
  5. 画面上で差分を確認し、比較元のモデルに反映させます

バージョン管理ツールで管理する

バージョン管理ツールを使いますと、上記作業を楽に行う事が出来ます。

  1. まず誰か一人の環境で、モデルファイルの分割を行います
  2. バージョン管理サーバーにプロジェクト全体を登録(チェックイン)します
  3. 各自が、担当パッケージのユニットファイル(.pkx、.dgx)をチェックアウト⇒モデリング⇒チェックインを行います
    そうすると常にバージョン管理サーバー上でモデルが共有されます。

ビジュアルトレース(Visual Trace)

Visual Trace は、動作するプログラムから動的にシーケンス図を生成する機能です。

この機能を使うと、まず XDE 独自の「トレースシーケンス図」が生成されます。これにより、プログラムの動作を時系列で、実行時間とともに見ることが出来ます。さらにそこから、UML 標準のシーケンス図を生成することも出来ます。

Visual Trace を使うには、XDE の他に、Purify Plusのインストールが必要です。PurifyPlusもデバッグやテストで大変役に立ちますので、ぜひインストールしてください。

Visual Trace の使いどころ

Visual Trace 機能は、動作するプログラムでなければ適用できません。下記のような使い方が有効です。

トレースシーケンス図の作成手順

まず動作するプログラムから、トレースシーケンス図を以下の手順で作成します。

  1. Visual Studio の「PurifyPlus」メニュー⇒「Visual Trace」⇒「Visual Traceの統合」で、Visual Trace の統合機能を有効にします
    「PurifyPlus」メニューは、PurifyPlus をインストールすると現れます。
  2. Visual Trace で対象にするクラスを選択します
  3.  
  4. 記録開始オプションと、スタックの深さを選択します
  5.  
  6. プログラムを、デバッガなしで開始します
    記録を手動にした場合は、メニューから記録のオンオフを切り替えます(「PurifyPlus」メニュー⇒「Visual Trace」⇒「トレースの記録」)。

UML シーケンス図の作成手順

次にトレースシーケンス図から、UML のシーケンス図を以下の手順で作成します。

  1. XDE のモデルファイルを開いておきます
  2. トレースシーケンス図上で右クリックし、「Generate Sequence Diagram」を実行します
  3. 宛先(格納先)のモデルとパッケージを選択します
  4. コードとモデルの関連付けを選択します
    関連付けを行うと、シーケンス図上の要素から対応するコードへジャンプすることが出来ます。
  5. 図のレイアウトオプションを選択します
  6. 完了すると、UML のシーケンス図が自動生成されます

その他の便利な機能

エイリアス機能

クラスやメソッド、属性に対して、実際の名前とは別にエイリアス(別名)を付ける事が出来ます。これを用いて、英語による実際の命名と、日本語による設計作業用の命名を使い分けると便利です。

やり方は、まずクラスやメソッド、属性のプロパティで、実際の名前となる「(Name)」の他に、「Alias」も入力します。あとは、ダイアグラムのプロパティの「UseAlias」を「True」にすれば、そのダイアグラムでの表示がエイリアスの方に切り替わります。

ダイアグラムの整列 (オートレイアウト)

各種 UML 図(ダイアグラム)の位置を調整して、整列(レイアウト)します。操作方法は [ダイアグラム] [整列] です。

ダイアグラムのリフレッシュ

プロパティやコードの編集を繰り返し実行していますとダイアグラムに反映されて いるかどうかが分からなくなります。このときには、[ダイアグラム][ダイアグラムのリフレッシュ] で画面を再描画してください。

モデルのエクスポート、インポート

クラス図などのモデルを他へエクスポートすることや他のプロジェクトのモデルをインポートすることができます。

XMI 形式(XML形式)による汎用的な形式で交換する方法があります。この形式であれば、他の UML ツールとも互換性があります。

しかし、ファイルは大きくなり、変換時間も掛かります。また拡張されたレイアウト情報など一部の情報が失われます。

一方、XDE との交換であれば、モデルファイルそのもので交換が可能です。具体的には、mdx ファイルによる交換です。(この mdx ファイルは ROSE のモデルファイル mdl ファイルに相当します。)

XMI のエクスポート

[ファイル] [XDE のエクスポート] [XMI のエクスポート]として、生成する XML [ファイル名] を設定して [OK] を押します。

XMI のインポート

[ファイル] [XDE のインポート]  [XMI のエクスポート]として、インポートする XML [ファイル名] を入力して [OK]を押します。次に 出力ウィンドウを[閉じます]。

これでインポートされましたので、今までと同様にモデルエクスプローラから、モデルウィンドウへインポートしたモデルをドラッグ&ドロップにより表示させます。

以下に クラス図をインポートした結果とその XMI ファイルの一部を紹介します。

インポートしたクラス図の XMI

図形データとしての利用

XDE で記述した各種ダイアグラムを、他のツールで「図形」として利用する方法を記述します。

XDE のダイアグラムに「日本語を全く使用せずに英語で記述している場合」は以下になります。

  1. そのままコピーができます。

  2. コピーした図は GIF に変換されていますので、GIF を扱える他のツールへペーストが行えます。但し、ドラッグ&ドロップはできません。

日本語がある場合は文字化けをしてしまいます(2004-10-20 現在)。そこで以下のようにします。

ここは、貼り付けを行うときに

 [形式を選択して貼り付け] [ピクチャ (拡張メタファイル)] 

で行います。これにより、文字化けは起こりません。

また、以下の方法では、文字化けは起こりません。

のどちらかを使って、出力結果のイメージデータをコピー&ペーストして利用します。

(Visual Studio.NET の便利な機能) 行番号の付加

画面上の行番号の付加

[ツール] [オプション] [テキストエディタ] [すべての言語] [全般] [行番号]

印刷での行番号の付加

[ファイル] [ページ設定] [行番号]

Rational XDE モデリングから開始

実装するプログラミング言語が決定していなくて、モデリングから開始する場合については、以下のように行います。

但し、コード生成は行いませんので、コード生成するときにはコピーする必要があります。

  1. [ファイル] [新規作成] [プロジェクト] [XDE モデリングプロジェクト] [空のプロジェクト]
    により、XDE の空のプロジェクトを生成します。

  2. 次に [ファイル] [新しい項目の追加] [Rational XDE] [空のモデル]
    により、モデルウィンドウを生成し、表示します。 

後は、ツールボックスから、オブジェクトをドラッグ&ドロップして、UML の図を作成します。下の図ではクラスを2個をモデルに挿入しています。


XDEモデリング

 

前述のコード生成を行う「使用方法」と同様に作図します。

 

拡張ヘルプ (チュートリアル)

XDE for Visual Studio.NET に Rational 拡張ヘルプがあります。操作方法は [ヘルプ] [Rational 拡張ヘルプ] です。

ここには以下のような各種チュートリアルがありますので、詳細はこれを参照してください。

但し、RUP をベースにして記述されていますので、操作中心の記述は現時点ではないようです。また JavaApplet で動作しますので、JRE が必要になります。

拡張ヘルプ

最後に

XDE はさすがに「こなれた」感じのする UML ツールです。違和感なく使えることが多いでしょう。
モデルエクスプローラからモデルウィンドウへドラッグすることを除けば・・・

また各種のデザインパターンが用意されているなど便利な機能がありますので、みなさん、楽しみながら、 プログラミングしていきましょう。


資料室へ戻る