次の方法で共有


ドメイン固有言語の概要

このトピックではドメイン固有言語を定義して使用する際の基本概念について (DSL) 説明します。

DSL を初めてこのサイトで検索できる DSL Tools Lab を使用することをお勧めします : Visualizaton and Modeling SDK

ドメイン固有言語に何ができるか。

ドメイン固有言語ではグラフィカルな特定の目的で使用するように設計された表記通常は。 一方UML などの言語は汎用です。 DSL では画面にどのように表示されるかをモデル要素および関係の種類を定義できます。

DSL を定義する場合はVisual Studio Integration Extension (VSIX) パッケージの一部として配布できます。 Visual Studio の DSL のユーザーの使用 :

ファミリ ツリー ダイアグラム、ツールボックス、およびエクスプローラー

表記法はDSL の一部です。 表記とともにVSIX パッケージはを使用してモデルの内容を編集し生成するためにユーザーが適用できるツールが用意されています。

DSL の主なアプリケーションで 1 が構成ファイルプログラム コードおよびそのほかの成果物を生成します。 特に大きな製品の複数のバリアントが作成されるプロジェクトおよび製品ラインでDSL の可変要素の多くを生成するには信頼性の向上を渡すと要件にきわめて高速な応答が変更されます。

ここでVisual Studio でドメイン固有言語を作成および使用する方法の基本的な操作についてのチュートリアルです。

必要条件

DSL を定義するには次のコンポーネントがインストールされている必要があります :

Visual Studio

https://go.microsoft.com/fwlink/?LinkId=185579

Visual Studio SDK

https://go.microsoft.com/fwlink/?LinkId=185580

Visual Studio の Visualization and Modeling SDK

DSL のソリューションの作成

新しいドメイン固有言語を作成するにはドメイン固有言語のプロジェクト テンプレートを使用して Visual Studio の新しいソリューションを作成します。

DSL のソリューションを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. *** Project types *** でENT6ENT [入力] ノードを展開し[ENT7ENT] をクリックします。

  3. [ENT3ENT] をクリックします。

    DSL ダイアログの作成

  4. [入力] ENT3ENT ボックスので型 FamilyTree。 [OK] をクリックします。

    *** Domain-Specific Language Wizard *** が開きテンプレートの DSL のソリューションの一覧が表示されます。

    説明を確認するために各テンプレートをクリックします。

    テンプレートは便利な開始点です。 各はニーズに合わせて編集できる完全な機能はDSL を提供します。 対象の数を作成し通常最も近いテンプレートを選択します。

  5. このチュートリアルでは***** Minimal Language ***** テンプレートを選択します。

  6. 適切なウィザード ページでDSL のファイル名拡張子を入力します。 これはDSL ファイルに含まれているインスタンスが使用する拡張です。

    • コンピューター上のすべてのアプリケーションに関連付けられていないまたはをクリックします。DSL をインストールするコンピューターの拡張子を示します。 たとえばdocxhtm は不適切なファイル名の拡張子です。

    • ウィザードに入力した拡張子をユース ケースとして使用される場合は警告します。 別のファイル名拡張子を使用することを検討してください。 以前の実験デザイナーをクリアするにはVisual Studio SDK の実験用インスタンスをリセットできます。 次に***** Microsoft Visual Studio 2010 SDK ***** ツール*** Reset the Microsoft Visual Studio 2010 Experimental instance ***[入力] ENT0ENT をクリックし[ENT2ENT] をクリックします。

  7. そのほかのページを検査し[ENT0ENT] をクリックします。

    2 つのプロジェクトを含むソリューションが生成されます。 これらは Dsl と DslPackage という名前です。 DslDefinition.dsl 図という名前のファイルが開きます。

    注意

    は2 種類のプロジェクト フォルダーで使用されるコードのほとんどはDslDefinition.dsl から生成されます。したがってDSL に対するほとんどの変更はこのファイルに格納されます。

ユーザー インターフェイスは次の図のようになります。

DSL デザイナー

この方法はドメイン固有言語を定義します。 詳細については、「ドメイン固有言語ツールのユーザー インターフェイスの概要」を参照してください。

DSL のソリューションの重要な要素

新しいソリューションについて次の点に注意してください。

  • **Dsl \ DslDefinition.dsl は **DSL のソリューションを作成したときに表示されるファイルです。 ソリューションのほとんどすべてのコードはこのファイルから生成されDSL 定義に加えた変更のほとんどは次のとおりです。 詳細についてはDSL 定義図の使用 を参照してください。

  • Dsl のプロジェクトは プロジェクト ドメイン固有言語を定義するコードが含まれています。

  • DslPackage のプロジェクトは プロジェクトが Visual StudioDSL のインスタンスで開いて編集できるようにするコードが含まれています。

DSL の実行

アプリケーションを作成したらすぐに DSL のソリューションを実行できます。 後でDSL を定義して変更できます。各ソリューションを変更した後で再度実行します。

DSL を確認するには

  1. ソリューション エクスプローラーのツール バーの [ENT1ENT] をクリックします。 これは DslDefinition.dsl からソース・コードのほとんどが再生成されます。

    注意

    DslDefinition.dsl を変更するたびにソリューションをリビルドする前に ENT5ENT [] をクリックする必要があります。この手順を自動化できます。詳細については、「方法: すべてのテンプレートを自動変換する」を参照してください。

  2. [入力] メニューの ENT5ENT F5 キーを ENT6ENT[] をクリックするキーを押します。

    DSL は Visual Studio の実験用インスタンスで作成しインストールします。

    Visual Studio の実験用のインスタンスが開始します。 の実験用のインスタンスが Visual Studio 拡張機能をデバッグするために登録されたレジストリの別のサブ ツリーの設定を使用します。 Visual Studio の通常のインスタンスはに登録される拡張機能にアクセスできません。

  3. Visual Studio の実験用インスタンスで ソリューション エクスプローラー から テスト という名前のモデル ファイルを開きます。

    または

    デバッグのプロジェクトを右クリックし 追加 をポイントし[ENT2ENT] をクリックします。 [入力] ENT1ENT ダイアログ ボックスでDSL のファイルの種類を選択します。

    モデル図ファイルは空白として表示されます。

    ツールボックスがダイアグラムの型に適切なツールを開き表示されます。

  4. ダイアグラムの図形およびコネクタを作成するにはツールを使用します。

    1. 図形を作成するには図の例のシェイプ ツールをドラッグします。

    2. 2 種類の図形を接続するにはこの例のコネクタ ツールをクリックし最初の図形をクリックし2 番目の図形をクリックします。

  5. メッセージを変更するために図形のラベルをクリックします。

実験 Visual Studio は次の例に似ています :

DSL_min

モデルの内容

DSL のインスタンスであるファイルの内容は モデルと 呼ばれます。 モデルは modelelements を 含む要素間の リンク 。 DSL 定義はどのようなモデル要素とリンクがモデルであることを指定します。 たとえば最小限の言語テンプレートから作成されるに DSL モデル要素の 1 種類リンクの 1 種類があります。

DSL 定義はモデルがダイアグラムに表示される方法を指定できます。 シェイプとコネクタのさまざまなスタイルを選択できます。 図形がある他の図形の内部に含めるように指定できます。

モデルを編集している間 ENT5ENT [入力] ビューのツリーとしてモデルを表示できます。 ダイアグラムに図形を追加するとモデル要素はWindows エクスプローラーに表示されます。 エクスプローラーは図がない場合でも使用できます。

その他のウィンドウ への ENT0ENT [入力] メニューの位置の Visual Studio のデバッグ インスタンスのエクスプローラーに表示できないため <Your Language>   エクスプローラー をクリックします。

DSL API

DSL はDSL のインスタンスである読み取るとモデルを更新する API を生成します。 API の 1 アプリケーションはモデルからテキスト ファイルを生成します。 詳細については、「T4 テキスト テンプレートを使用したデザイン時コード生成」を参照してください。

デバッグのソリューションでは拡張子 「 .tt 」を含むテンプレート ファイルを開きます。 これらのサンプルではモデルからテキストを生成すると DSL または API をテストすることができます。 サンプルの 1 つが Visual BasicVisual C# の他に書き込まれます。

各テンプレート ファイルの下に生成するファイルです。 ソリューション エクスプローラーでテンプレート ファイルを展開し生成されたファイルを開きます。

テンプレート ファイルはモデルのすべての要素を示すコードの短いセグメントが含まれています。

生成されたファイルは結果を抽出します。

モデル ファイルを変更するとファイルを再生すると生成されるファイルの対応する変更が表示されます。

モデル ファイルを変更するとテキスト ファイルを再生するには

  1. Visual Studio の実験用インスタンスでモデル ファイルを保存します。

  2. 実験で使用する各 .tt ファイル名のパラメーターがモデル ファイルを参照していることを確認します。 .tt ファイルを保存します。

  3. ソリューション エクスプローラー のツール バーの [ENT5ENT] をクリックします。

    または

    再生し[] をクリックします ENT4ENT するテンプレートを右クリックします。

プロジェクトにテキスト テンプレート ファイルのいくつでも追加できます。 各テンプレートは 1 個の結果ファイルを生成します。

注意

DSL 定義を変更すると[テキスト テンプレートはコードを更新して機能しません。

詳細については、「ドメイン固有言語からのコード生成」および「ドメイン固有言語をカスタマイズするコードの記述」を参照してください。

DSL のカスタマイズ

DSL 定義を変更して実験用のインスタンスを閉じてVisual Studio のメイン インスタンスの定義を更新する場合。

注意

DSL 定義を変更した後以前のバージョンのを使用して作成したテスト モデルの情報が失われることがあります。たとえばデバッグのソリューションはシェイプとコネクタを含む Sampleという名前のファイルが含まれています。DSL 定義の開発を開始した後にこれらは表示されずファイルを保存するとすべて失われます。

DSL に拡張機能を作成できます。 次の例は可能性の印象を示します。

各変更がDSL 定義を保存すると ソリューション エクスプローラー [入力] ENT4ENT をクリックし次に変更された DSL を試すに F5 を押します。

型およびツールの名前を変更します。

既存のドメイン クラスとその関係の名前を変更します。 たとえば最小限の言語テンプレートから作成された Dsl 定義でDSL に系譜を表させます次の名前の変更操作を実行できます。

ドメイン クラスリレーションシップおよびツールの名前を変更するには

  1. DslDefinition の図では親に FamilyTreeModelユーザーターゲットおよびその子にソースへの ExampleElement に ExampleModel の名前を変更します。 要素を変更する各ラベルをクリックします。

    DSL 定義ダイアグラム - ファミリ ツリー モデル

  2. 要素およびコネクタ ツールの名前を変更します。

    1. ソリューション エクスプローラーの下部にあるタブをクリックしてDSL のエクスプローラー ウィンドウを開きます。 これが表示されない場合 その他のウィンドウ への ENT5ENT [入力] メニューのをポイントしを ENT7ENT [] をクリックします。 DSL エクスプローラーの定義はユース ケース図がアクティブ ウィンドウである場合にのみ表示されます。

    2. DSL のエクスプローラーおよびプロパティを同時に参照できるようにプロパティ ウィンドウを開き配置します。

    3. 次にDSL のエクスプローラーで***** Toolbox Tabs ***** <your DSL> と ツール ENT8ENT を配置する。

    4. をクリック ExampleElement。 これには要素の作成に使用されるツールボックス項目です。

    5. [プロパティ] ウィンドウでユーザーに ENT2ENT [入力] プロパティを変更します。

      [入力] ENT3ENT のプロパティも変更されることに注意してください。

    6. 同様にParentLink に ExampleConnector ツールの名前を変更します。 はName プロパティにコピーされないように ENT0ENT [入力] プロパティを変更します。 たとえば親リンクを入力します。

  3. DSL をビルドし直します。

    1. DSL の定義ファイルを保存します。

    2. ソリューション エクスプローラーのツール バーのをクリックする ENT4ENT [入力]

    3. F5 キーを押します。 Visual Studio の実験用インスタンスが表示されるまで待機します。

  4. Visual Studio の実験用インスタンスのデバッグのソリューションではテスト モデル ファイルを開きます。 ツールボックスから要素をドラッグします。 DSL エクスプローラーのツールのキャプションと型名が変更されたことを確認します。

  5. モデル ファイルを保存します。

  6. .tt ファイルを開き古い名前と新しい型とプロパティ名に置き換えます。

  7. .tt ファイルで指定されたファイル名がテストのモデルを指定してください。

  8. .tt ファイルを保存します。 .tt ファイルのコードを実行した結果を確認するために生成されたファイルを開きます。 これが正しいことを確認します。

ドメインにクラスのプロパティを追加します。

パーソナル化の追跡と年を表すためにドメイン クラスのプロパティ (など) を追加します。

ダイアグラムに新しいプロパティを表示するためにモデル要素を表示している図形に デコレータを 追加する必要があります。 またデコレータにプロパティを割り当てる必要があります。

プロパティを追加し表示します。

  1. プロパティを追加します。

    1. ユース ケース図ではユーザー定義のドメイン クラスを右クリックし 追加 をポイントし[ENT4ENT] をクリックします。

    2. 追跡および生年月日など新しいプロパティ名のリストを入力します。 それぞれの後に Enter を押します。

  2. 図形のプロパティを表示するデコレータを追加します。

    1. ユーザーのドメイン クラス図からの反対側までの灰色の行に従います。 これは図の要素マップです。 これはクラスの図形にドメイン クラスをリンクします。

    2. このクラスの図形を右クリックし 追加 をポイントし[ENT3ENT] をクリックします。

    3. BirthDecorator と DeathDecorator " などの名前で 2 人デコレータを追加します。

    4. プロパティ ウィンドウの新しいデコレータを設定します ENT6ENT [入力] フィールドのをクリックします。 これはドメインのプロパティ値が図形のどこで表示されるかが決定されます。 たとえば 内部下左内部下右 を設定します。

      コンパートメント図形の定義

  3. プロパティにデコレータをマップします。

    1. ユース ケースの詳細] ウィンドウを開きます。 これは出力ウィンドウの横にタブにあります。 [入力] ENT1ENT その他のウィンドウ にはメニューのを確認できず ENT3ENT [] をクリックします。

    2. DSL 定義図では図形クラスにユーザーのドメイン クラスを結ぶ線をクリックします。

    3. *** DSL Details *** ではENT3ENT [入力] タブで割り当てられていないデコレータのチェック ボックスをオンにします。 *** Display Property *** にそれが割り当てられる必要なドメインのプロパティを選択します。 たとえば誕生日に BirthDecorator をマップします。

  4. DSL を保存し変換のすべてのテンプレートと入力しキーをクリックします。

  5. サンプル モデルにおいてそれらの値型に選択した場所をクリックできることを確認します。 またユーザーの図形を選択するとプロパティ ウィンドウには新しいプロパティの誕生日と追跡を表示します。

  6. .tt ファイルでは各個人のプロパティを取得するコードを追加します。

ファミリ ツリー ダイアグラム、ツールボックス、およびエクスプローラー

新しいクラスを定義します。

ドメイン モデルのクラスおよび関係を追加できます。 たとえばユーザーが町に置かれていた表す新しいクラスと町を表すように新しいリレーションシップを作成できます。

モデル図で異なる型を別にするには図形の種類や別のジオメトリと色の図形にドメイン クラスを割り当てることができます。

新しいドメイン クラスを追加し表示するには

  1. ドメイン クラスを追加しモデル ルートの子にします。

    1. ユース ケース図で定義 ENT3ENT[入力] ツールをクリックしルートのクラス FamilyTreeModel をクリックし図の空の部分をクリックします。

      新しいドメイン クラスは埋め込みリレーションシップの FamilyTreeModel にその接続が表示されます。

      たとえば町名前を設定します。

      注意

      モデルのルートが 1 文字以上の埋め込みリレーションシップのターゲットである以外のドメイン クラスが埋め込みの対象であるクラスから継承されます。したがって埋め込みリレーションシップのツールを使用してドメイン クラスを作成すると頻繁に便利です。

    2. 新しいクラスの名前 (たとえば DOMAIN プロパティを追加します。

  2. ユーザーと町間の関係の参照を追加します。

    1. [入力] ENT3ENT ツールをクリックしユーザーをクリックし町をクリックします。

      DSL 定義フラグメント: ファミリ ツリー ルート

      注意

      参照の関係がモデル ツリーの 1 の部分から別の型への cref を表します。

  3. モデル図を町を表すために図形を追加します。

    1. ツールボックスから図にドラッグし***** Geometry Shape ***** をよりたとえば TownShape 名前を変更します。

    2. [プロパティ] ウィンドウで純色ジオメトリなど新しい図形の外観のフィールドを設定します。

    3. 町の名前を表示するためにデコレータを追加しそれを NameDecorator の名前を変更します。 プロパティが設定されていて位置。

  4. TownShape に町のドメイン クラスをマップします。

    1. 次に ENT6ENT [入力] ツールをクリックしドメイン TownShape 町のクラスとクラスの図形をクリックします。

    2. 指定するように選択したマップのコネクタ チェック NameDecorator を設定 *** Display Property *** で ENT1ENT [出力] ウィンドウの [ENT0ENT] タブのでをクリックします。

  5. 町ユーザーとの関係を表示するコネクタを生成します。

    1. ツールボックスから図にコネクタをドラッグします。 その名前を変更し表示形式プロパティを設定します。

    2. ユーザーと町間の関係に新しいコネクタのリンクに ENT2ENT [入力] ツールを使用します。

      追加された図形マップを使用したファミリ ツリー定義

  6. 新しい町を行うための要素ツールを作成します。

    1. *** DSL Explorer *** では***** Toolbox Tabs ***** を ENT7ENT を配置する。

    2. <your DSL> を右クリックしを ENT1ENT [] をクリックします。

    3. 新しいツールの ENT7ENT [入力] プロパティの設定し[プロパティ] ENT8ENT 町に設定します。

    4. [入力] ENT2ENT プロパティを設定します。 [入力] ENT6ENT フィールドで選択しアイコン ファイルを ENT4ENT [] をクリックします。

  7. 町ユーザーとの間のリンクはコネクタ ツールを作成します。

    1. <your DSL> を右クリックしを ENT1ENT [] をクリックします。

    2. 新しいツールの名前のプロパティを設定します。

    3. [入力] プロパティの ENT3ENT では個人町の関係の名前を含むビルダーを選択します。

    4. *** Toolbox Icon *** を設定します。

  8. DSL 定義を保存し[ENT0ENT] をクリックするとF5 を押します。

  9. Visual Studio の実験用インスタンスでテストのモデル ファイルを開きます。 町との間の町およびリンクを作成するには新しいツールを使用します。 要素の正しい型の間のリンクを作成できることに注意してください。

  10. 各ユーザーが置かれている町を示したコードを作成します。 テキスト テンプレートはなどのコードを実行できる場所の 1 つです。 たとえば次のコードを含むようにデバッグのソリューションの既存の Sample.tt ファイルを変更できます :

    <#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" debug="true" #>
    <#@ output extension=".txt" #>
    <#@ FamilyTree processor="FamilyTreeDirectiveProcessor" requires="fileName='Sample.ftree'" #>
    
    <#
      foreach (Person person in this.FamilyTreeModel.People)
      {
    #>
        <#= person.Name #><#if (person.Town != null) {#> of <#= person.Town.Name #> <#}#>
    
    <#
          foreach (Person child in person.Children)
      {
    #>
                <#= child.Name #>
    <#
      }
      }
    #>
    

    *.tt ファイルを保存するときユーザーと住宅の一覧を含む従属ファイルを作成します。 詳細については、「ドメイン固有言語からのコード生成」を参照してください。

検証とコマンド

検証制約を追加してこの DSL の詳細を開発できます。 これらの制約はモデルが正しい状態であることを定義できるメソッドに示します。 たとえば子の誕生日が親より後であることを確認するための制約を定義できます。 検証機能によりDSL のユーザーが中断の制約はモデルを保存しようとすると警告が表示されます。 詳細については、「ドメイン固有言語における検証」を参照してください。

またユーザーが起動するメニュー コマンドを定義できます。 コマンドを使用してモデルを変更できます。 またVisual Studio の他のモデルに外部リソースとやり取りできます。 詳細については、「方法: ドメイン固有言語における標準のメニュー コマンドを修正する」を参照してください。

DSL の配置

他のユーザーがドメイン固有言語を使用できるようにするには Visual Studio Extension (VSIX) ファイルを配布します。 これはDSL のソリューションのビルド時に作成されます。

ソリューションの Bin フォルダーに .vsix ファイルを検索します。 ユーザーが操作をインストールするコンピューターにコピーします。 そのコンピューターでVSIX ファイルをダブルをクリックします。 DSL はコンピューターの Visual Studio のすべてのインスタンスで使用できます。

Visual Studio の実験用インスタンスを使用する必要がないようにDSL のコンピューターでのインストールに同じ手順を使用できます。

詳細については、「ドメイン固有言語ソリューションの配置」を参照してください。

古い実験 DSL の削除

これは起動しない実験 DSL を作成する場合はコンピューターから Visual Studio の実験用インスタンスをリセットしてそれらを削除できます。

これはコンピューターからすべての実験 Visual Studio DSL およびそのほかの実験拡張子を削除します。 これらはデバッグ モードで実行された拡張子です。

この手順はVSIX ファイルを実行してインストール Visual Studio の他の拡張機能または DSL は削除されません。

Visual Studio の実験用インスタンスをリセットするには

  1. 次に***** Microsoft Visual Studio 2010 SDK ***** ツール*** Reset the Microsoft Visual Studio 2010 Experimental instance ***[入力] ENT4ENT をクリックし[ENT6ENT] をクリックします。

  2. で使用する Visual Studio の他の実験拡張子や実験 DSL をビルドし直します。

参照

概念

モデル、クラス、およびリレーションシップについて

方法: ドメイン固有言語を定義する

その他の技術情報

Visualizaton and Modeling SDK