MPS 2026.1 ヘルプ

ビルド言語

MPS ビルド言語とは何ですか?

ビルド言語は、宣言的な方法でビルドを定義するための拡張可能なビルド自動化 DSL です。Ant(英語) に生成されるため、Ant の実行力を活用しながら、ソースコードをクリーンに保ち、不要な詳細や煩雑な記述を排除します。MPS 言語のスタックとして構成され、最下層に ANT を配置することで、ビルド手順の各部分を異なる抽象度で表現できます。言語の慣例に従えば、複雑なアーティファクト(MPS プラグインなど)のビルドも 1 行のコードで指定できますが、同時に、ファイル管理やマニフェストプロパティなどの詳細をカスタマイズすることも可能です。

多くのビルド自動化ツールと同様に、プロジェクト定義がスクリプトの中核です。さらに、他のほとんどのツールとは異なり、ビルド言語では出力ディレクトリのレイアウトを完全に制御できます。期待されるビルド結果は、ビルドスクリプト内で個別に定義され、(サードパーティの)プラグインの一部として定義されるわけではありません。すべてのビルドスクリプトは 3 つの部分で構成されています。最初の部分は依存関係で、すでにビルドされている必須のものです。たとえば、ライブラリやサードパーティの言語を考えてみてください。次はプロジェクト構造です。リポジトリにあるすべてのものとビルドされるもの、および必要なビルドパラメーターの宣言が含まれています。ここで項目を宣言しても、必要でない限り、つまりスクリプトの最後の部分である出力レイアウトから参照されない限り、ビルドはトリガーされないことに注意してください。出力は、プレーンなフォルダーとコピーされたファイルのセットのように単純なものから、パッケージ化されたプラグインや MPS 言語などの圧縮されたアーティファクトを含むはるかに複雑なものまであります。例: Java ソースから jar ファイルを作成するには、プロジェクト構造で Java モジュールを宣言し、出力レイアウトでそのモジュールへの参照を含む対応する jar ファイルを宣言する必要があります。

MPS のおかげで、ビルド言語は簡潔なテキスト表記と、補完機能やリアルタイム検証機能を含む優れた編集体験を提供します。拡張言語(他のビルドツールの用語に倣うならプラグイン)は、この言語の上にさらに抽象化を追加します。私たちの経験では、新しい拡張言語を作成する方が、Maven や Gradle のプラグインを開発するよりもはるかに簡単です。

スクリプト構造を構築する

以下に、IntelliJ IDEA 用のプラグインをビルドするビルドスクリプトの例を示します。

samplesScript.png

よく見てみましょう。スクリプトのヘッダーは、一般的なスクリプト情報で構成されています。スクリプトの名前(スクリーンショットでは複雑)、スクリプトが生成されるファイル(build.xml)、スクリプトのベースディレクトリ(スクリーンショットでは次のように表示されます)。スクリプトの場所 ../../ およびフルパスを基準にしています)。

スクリプトの本体は、以下のセクションで構成されています。

  • use plugins には、スクリプトで使用されるプラグインの一覧が含まれています。ビルド言語のプラグインは、Gradle のプラグインと似ています。これらは言語の拡張機能であり、Java コードのコンパイル、単体テストの実行、モジュールのパッケージ化など、便利なタスクを多数提供します。スクリーンショットでは、javamps の 2 つのプラグインが使用されています。これは、スクリプトが java と mps のコードをビルドできることを意味します。

  • マクロセクションでは、プロジェクトで使用されるパスマクロと変数(idea_home と plugins_home)を、スクリプトの実行中にオーバーライドできるデフォルト値とともに定義します。

  • dependencies は、他のビルドスクリプトに対するスクリプトの依存関係を定義します。スクリプトが別のビルドスクリプトで定義されているものを参照する場合、dependencies セクションにそのスクリプトをリストする必要があります。推移的な依存関係は明示的にリストする必要はありません。BuildA が BuildB に依存し、BuildB が BuildC に依存している場合、BuildA は BuildC を直接リストすることなく BuildB を介して BuildC にアクセスできます。ジェネレーターは、このような推移的なケースに対して ${artifacts.BuildC} Ant プロパティを出力します。これらのプロパティは、Gradle や Maven などの外部ビルドツールによって提供できます。スクリーンショットのサンプルスクリプトは、IDEAmpsPlugin という 2 つのスクリプトに依存しています。これらは MPS によって提供されるため、これらを使用するには、アーティファクトの場所、つまり Ant が作業結果を見つけることができる場所を指定する必要があります (この例では、idea_home は Intellij IDEA jar の場所を指し、plugins_home は IDEA 用プラグインの場所を指す必要があります)。同じ MPS プロジェクト内のビルドスクリプトに依存することもできます。その場合、アーティファクトの場所を指定する必要はなく、必要なスクリプトは現在のスクリプトの直前にビルドされることが前提となります (そのためには、ターゲット buildDependents が用意されています)。

  • プロジェクト構造セクションには、プロジェクトの説明(含まれるモジュール、ソースコードの場所、モジュールのクラスパスなど)が記載されています。スクリーンショットに示されているサンプルプロジェクトは、Complex という名前の単一の Idea プラグインと、MPS モジュールのグループで構成されています。

  • デフォルトのレイアウトは、プロジェクトをディストリビューションにパッケージ化する方法を定義します。スクリーンショットのサンプルプロジェクトは、Complex.zip という名前の zip ファイルにパッケージ化されています。

  • 追加要素とは、プロジェクトに関連するその他の事項を定義するもので、たとえば、各種設定や実行する統合テストなどが含まれます。

マクロ

マクロには 2 種類あります。

  • フォルダー - ファイルシステム内の物理フォルダーを表します。空のままにすると(デフォルト)、値は MPS で定義された同じ名前のパス変数から取得しようとします。

  • Var- 値を表すカスタム変数

変数は、いくつかの方法で初期化できます。

  • 以前のマクロへの参照

  • date - 日付値。Java の日付フォーマット規則に従うパターンパラメーターを指定する必要があります。たとえば、yyyy-MM-dd の場合、ビルドスクリプトが実行されたときの日付値がマクロに挿入されます。

  • プロパティファイルからロード - 指定されたプロパティファイルから指定されたプロパティ値を読み取ります

  • load file - 指定されたファイルをプロパティにロードします

  • テキスト - プレーンテキスト値、潜在的に ${macro_ref} シンボルに包まれた他のマクロに埋め込まれた参照を持ちます。

組み込みプラグイン

ビルド言語はいくつかの組み込みプラグインを提供します。

Java プラグイン

Java プラグインは、Java コードのコンパイルとパッケージ化の機能を追加します。ソースコードは、Java モジュールと Java ライブラリとして表現されます。

Java モジュールは、そのコンテンツ (ソースフォルダーの場所) と、他のモジュール、ライブラリ、jar への依存関係を定義します。コンテンツセクションでは、java モジュールには次のものを含めることができます。

  • フォルダー – ディスク上のソースフォルダーへのパス。

  • リソース – リソースのファイルセット。リソースフォルダーへのパスとセレクターのリスト(includeexcludeincludes)で構成されます。

  • コンテンツルート – 複数のコンテンツフォルダーを持つルート。

依存関係セクションでは、java モジュールには次のものを含めることができます。

  • classpath – クラスパスを持つ任意の xml。

  • 外部 jar – 他のビルドスクリプトレイアウトからの jar ファイル。

  • フォルダー内の外部 jar – 他のビルドスクリプトレイアウトからフォルダー内の名前で参照される jar ファイル。

  • jar – ローカル jar へのパス。

  • library – java ライブラリへの参照。

  • module – java モジュールへの参照。

各 Java モジュールは、ソースモジュールの依存関係に従って他のターゲットに依存する独自の Ant ターゲットに生成されます。循環モジュール依存関係をコンパイルするために、2 段階のコンパイルが実行されます。

  1. 「サイクル」ターゲットは、サイクル内のすべてのモジュールをまとめてコンパイルします。

  2. サイクル内の各モジュールは、クラスパス内の "cycle" ターゲットのコンパイル結果でコンパイルされます。

Java ライブラリは jar(パスまたは他のプロジェクトレイアウトへの参照として指定される)とクラスフォルダーで構成されています。利用可能な要素は以下のとおりです。

  • classes フォルダー – クラスを含むフォルダー。

  • 外部 jar – 他のビルドスクリプトレイアウトからの jar ファイル。

  • 外部 jar ファイル – 他のビルドスクリプトレイアウトのフォルダーにある jar ファイルのコレクション。

  • jar – ローカル jar へのパス。

  • jars – jar とセレクターのリスト(includeexcludeincludes)を含むローカルフォルダーへのパス。

Java モジュールのコンパイル設定は、java オプションで指定します。ビルドスクリプトには複数の java オプションを指定できますが、デフォルトとして指定できるのはそのうちの 1 つだけです。各モジュールは、コンパイルに使用する独自の java オプションを指定できます。

Java options definition
  • デバッグ情報の生成 - ant タスクの「コンパイル」の「デバッグ」属性を設定します

  • 警告を生成しない - 「compile」ant タスクの「nowwarn」属性を設定します

  • fork - 並列コンパイルを可能にするために、「compile」ant タスクの fork 属性を設定します。

  • コンパイラー - 利用可能なコンパイラーのリストからコンパイルに使用するコンパイラーを選択します

  • java 準拠レベル - ant タスクの「コンパイル」および ant タスクの「生成」および「作成」のソースおよびバイトコードレベルを設定します

  • java コンパイラーオプション - ant タスクの「compile」タスクの「compileearg」要素を設定します。スペースで区切られた有効な「compileearg」値が必要です。「encoding」属性が存在しない場合、「-encoding」は「utf8」に設定されます。

  • ジェネレーター jvm オプション - 「generate」ant タスクの「jvmarg/arg」要素を設定します

  • リソースのコピー - コンパイル前にリソースファイルのコピーを作成します。source_gen にあるすべての非 Java ファイルがコピーされます。java オプション / リソースパターンが指定されている場合を除きます。これは、たとえば、jetbrains.mps.lang.resources 言語を使用して定義されたアイコンに必要です。

  • リソースパターン - ファイルがリソースを考慮するためのファイルマスク。

Java ターゲット

Java プラグインは以下のターゲットを追加します。

  • compileJava は、プロジェクト内のすべての Java モジュールをコンパイルします。

  • 追加のリソース処理のための processResources 拡張ポイント。

  • クラスは、プロジェクト内のすべてのコンパイルとリソース処理を行います。これは、ターゲットの compileJavaprocessResources に依存します。

  • 単体テストを実行するためのテスト拡張ポイントターゲット。

  • check は、プロジェクトの正確性のすべてのテストとチェックを行います。ターゲットテストによって異なります。

MPS プラグイン

MPS プラグインを使用すると、スクリプトのビルド言語で mps モジュールをビルドできます。MPS プラグインを使用するには、jetbrains.mps.build.mps 言語を使用言語に追加する必要があります。

MPS モジュールとグループ

MPS プラグインはプロジェクト構造にモジュールを追加することを可能にします。スクリーンショットには、ビルドスクリプトで宣言された言語の例があります。

sampleLanguage.png

ビルドスクリプトで指定されているモジュールに関する情報は多数あり、そのほとんどはインスペクタツールウィンドウに表示されます。具体的には、UUID完全修飾名、記述子ファイルへのフルパス依存関係ランタイム (言語の場合)、その他のメタデータなどです。これらの情報はモジュールをパッケージ化するために必要です。そのため、このモジュールに変更があった場合 (たとえば、依存関係が追加された場合) は、ビルドスクリプトも変更する必要があります。もちろん、これを簡単に行うためのツールは多数存在します。スクリプトで mps モジュールを記述および管理する一般的なプロセスは次のとおりです。

  1. スクリプトにモジュールを追加します。1 つは、追加するモジュールのタイプ (ソリューション、言語、開発キット) とモジュール記述子ファイルへのパスを指定します。次に、インテンション「ファイルから必要な情報をロード」を使用して、そのファイルを読み取り、残りのモジュール仕様を自動的に入力できます。

    loadRequired.png
  2. モジュールに加えられた変更を反映しています。モデルチェッカーを使用してモデルをビルドスクリプトでチェックし、モデルがモジュールファイルと一致しているかどうかを確認できます。モデルチェッカーは、スクリプト内のすべての問題を表示し、クイックフィックスを実行ボタンを使用して修正できるようにします。モデルチェッカーの代わりに、同じ「ファイルから必要な情報をロードする」インテンションを使用して、各モジュールを個別に修正することができます。

    modelChecker.png

ビルドスクリプトでの MPS モジュール宣言について覚えておくべきもう 1 つのことは、MPS にロードされているモジュールに依存していないということです。すべての情報はディスク上のモジュール記述子ファイルから取得されますが、モジュール自体はビルドスクリプトからは使用できない可能性があります。

ビルドスクリプトを構造化するために、MPS モジュールを mps グループに追加できます。 MPS グループは、名前付きのモジュールセットであり、外部から参照できます。たとえば、モジュールグループを 1 つのユニットとして IDEA プラグインに追加できます。

モジュールリソース

モジュールが必要とするリソース(イメージ、アイコン、その他のリソース)は、リソースコンテンツルートを使用して指定する必要があります。

Resources.png
MPS モジュールの生成とコンパイルは内部でどのように機能するのか

前述のとおり、モジュールに関する多くの情報がビルドスクリプトに抽出され、そこに保存されます。そのため、モジュールの依存関係が変更されるたびに、ユーザーはスクリプトを更新する必要があります。ソリューションの場合、再エクスポートされた依存関係と再エクスポートされていない依存関係の両方がスクリプトに抽出されます。言語の場合、依存関係に加えて、ランタイムソリューションと拡張言語も抽出されます。

ビルドスクリプトを使用したモジュールの「ビルド」は、このモジュールの生成とモジュールソースのコンパイルの 2 つの部分で構成されます。生成は、ソースコードをバージョン管理システムに保存し、モデルとの同期を保つプロジェクトのオプションのステップです。生成では、ビルドスクリプト内のすべてのモジュールを生成する 1 つのターゲットが作成されます。モジュールは「チャンク」(一緒に生成できるモジュールのグループ)に分割され、生成タスクはチャンクを 1 つずつ生成します。例: 言語とその言語で記述されたソリューションは一緒に生成できないため、別々のチャンクに分割されます。生成タスクには、生成するチャンクのリストとは別に、ロードするアイデアプラグインのリストと、生成に必要な他のビルドスクリプトのモジュールのリストが提供されます。このプラグインとモジュールのリストは依存関係から計算されるため、生成を成功させるにはそれらが正確であることが非常に重要です。これは、MPS からモジュールを生成する場合とビルドスクリプトからモジュールを生成する場合の大きな違いです。一方、MPS からモジュールを生成する場合、ジェネレーターにはプロジェクト内のすべてのモジュールがロードされ、使用可能になります。ビルドスクリプトからモジュールを生成する場合、ジェネレーターにはモジュールの依存関係で明示的に指定されたもののみが含まれます。ビルドスクリプトは、モジュールの依存関係が正しいかどうかを検証する手段として使用できます。

モジュールのコンパイルは少し異なります。MPS モジュールごとに java モジュールが生成されるため、最終的に各 MPS モジュールは通常の Ant javac タスク(または Java オプションで選択されている場合は同様の他のタスク)によってコンパイルされます。

そのため、生成してコンパイルするために、モジュールの依存関係が収集され、生成されたビルド xml ファイルに埋め込まれます。使用されている言語と devkits はモジュール記述子ファイルからビルドスクリプトを生成する間に集められます。その他の情報はビルドスクリプトノード内に格納されています。下の図では、「myproject」というプロジェクトのモジュール構造が示されています。このプロジェクトは、「mylibrary」というサードパーティの MPS ライブラリを使用しています。

normal-module-structure.png

矢印はモジュール間の依存システムを示しています。紫色の矢印はビルドスクリプトに抽出される依存関係を示し、青い矢印はどの依存関係が抽出されないかを示します。私のプロジェクトからモジュールをコンパイルして生成するために、mylibrary の中の「青い矢印」の知識が必要とされないことは容易に観察されることができます。つまり、私のライブラリの実際のモジュールファイルは、myproject ビルドスクリプトの生成中にも存在しないかもしれません。ジェネレーターが必要とするすべての情報はビルドスクリプトに含まれています。これは非常に便利です。ビルドの生成中にライブラリ全体をダウンロードしてその完全な場所を指定する必要がないため、生成プロセスではプロジェクトの依存関係からすべてのモジュール記述子をロードしないため時間とメモリを節約できます。

ソースとテスト

MPS ソリューションにテストモデル、すなわちステレオタイプ "@tests" のモデルが含まれている場合、それらはデフォルトではコンパイルされないフォルダー "tests_gen" に生成されます。テストをコンパイルするには、ソリューションにテストモデルがあることをビルドスクリプトで指定する必要があります。これはインスペクタで手動で行われます。解決策に利用可能な 3 つのオプションがあります: "with sources"(デフォルト)、"with testing" そして "with sources and tests"。

withTests.png
MPS の設定

mps 設定を使用すると、ビルドスクリプトの MPS 固有のパラメーターを変更できます。「追加の側面」セクションのビルドスクリプトには、mps 設定のインスタンスが 1 つしか存在できません。変更できるパラメーター:

  • bootstrap – このフラグを「true」に設定すると、スクリプト内のモジュール間にブートストラップの依存関係が存在することを示します。通常、フラグは false に設定されます。詳細については、ブートストラップ依存関係の問題の除去を参照してください。

  • テスト生成 – true に設定されている場合、ビルドスクリプトはモジュールの生成と、生成されたファイルとディスク上のファイルの違いをテストします。除外セクションでファイルを diff から除外できます。

  • generation max heap size in mb – 世代および世代テストの最大ヒープサイズ。

テストモジュール生成

生成されたソースファイルをバージョン管理下に置いているプロジェクトでは、ビルドスクリプトを使用して、これらの生成されたファイルが最新であることを確認できます。mps 設定テスト生成を true に設定すると、生成されたビルドスクリプトのテストターゲットに gentest タスクの呼び出しが表示されます。generate タスクと同様に、gentest は スクリプト内のモジュール、他のビルドスクリプトからの依存関係、および必要な idea プラグインをロードします。gentest タスクは、各モジュールに対して「%MODULE_NAME%.Test.Generating」と「%MODULE_NAME%.Test.Diffing」の 2 つのテストを呼び出します。Test.Generating は、モジュールの生成中にエラーが発生した場合に失敗し、Test.Diffing は、生成されたファイルがディスク上のファイル (バージョン管理からチェックアウトされたもの) と異なる場合に失敗します。テスト結果と統計は、TeamCity ビルドサーバーでサポートされている XML ファイルにフォーマットされます。

IDEA プラグイン

アイデアプラグインの構築では、MPS モジュールを含む IntelliJ IDEA または MPS のプラグインを定義します。スクリーンショットでは、そのようなプラグインの例を見ることができます。

blxx1.png

プラグイン宣言の最初のセクションには、プラグインの名前と説明、フォルダー名、プラグインベンダー、その他のメタデータなど、プラグインを説明するさまざまな情報が含まれます。ここで重要な文字列は、キーワード idea plugin の後に続く plugin id です。これは、他のすべてのプラグインの中で、そのプラグインを一意に識別するものです。plugin.xml ファイルの構築方法には 3 つのオプションがあります。ビルドスクリプトの idea plugin セクションに含まれる情報のみを使用するか、提供された plugin.xml ファイルの内容で情報を補強するか、カスタム plugin.xml ファイルのみを使用するかのいずれかです。

blxx2.png

アイデアプラグインの中の次のセクションは実際のプラグインコンテンツです - プラグインに含まれるモジュールまたはモジュールグループのセットです。

最後のセクションは他のプラグインへのプラグインの依存関係について書かれています。ルールは、"pluginB" にある "moduleB" に依存する "pluginA" にある "moduleA" がある場合、"pluginB" に対する "pluginA" の依存関係があるはずです。そのような問題を識別して報告する型システムチェックが存在します。

プラグインのレイアウトは最後に指定されています。プラグインをパッケージ化する方法は 2 つ考えられます。

  • 自動パッケージ化 - 提供されているすべての言語とソリューションは、プラグインのルートディレクトリの「languages」フォルダーに配置されます。

  • 手動パッケージ - 開発者はプラグイン全体のレイアウトを手動で定義する必要があります

blxx3.png
MPS のターゲット

MPS プラグインは以下のターゲットを提供します。

  • generate- プロジェクト構造に含まれる mps モジュールを生成します。

  • cleanSources- 生成されたコードをクリーンアップします(ブートストラップ依存関係のないモジュールのみ)。記事ブートストラップ依存関係の問題の除去で、ブートストラップの依存関係の詳細を参照してください。

  • describe-mps-tasks - generatecopyModels などの mps タスクを宣言するユーティリティターゲット。

  • makeDependents- このスクリプトの依存関係(存在する場合)を一時的に閉じるための生成ターゲットを呼び出してから、アセンブルを呼び出してまとめます。各スクリプトは、すべての依存関係が構築された後にのみ実行されることが保証されています。

モジュールテストプラグイン

jetbrains.mps.build.mps.tests 言語によって提供されるモジュールテストプラグインは、ビルドスクリプトに MPS ソリューション内の NodeTestCase および EditorTestCase を実行する機能を追加します。テストは、すべてのモジュールがコンパイルされ、ディストリビューションパッケージにまとめられた後に実行されます。つまり、パッケージ化されたコードに対して実行されるため、実際のコードの使用環境を忠実に再現した環境で実行されます。

テストモジュール構成

テストを含むソリューション / モジュールグループは、テストモジュール構成にグループ化されます。これは、同じ環境で一緒に実行されるテストを含むソリューションのグループです。必要なすべての依存関係 (つまり、モジュールとプラグイン) がその環境にロードされます。スクリーンショットでは、execution という名前のテストモジュール構成が表示されています。この構成には、jetbrains.mps.execution.impl.tests ソリューションと debugger-tests モジュールグループが含まれています。

blxx5.png

テストモジュール構成にソリューションを含めるための前提条件があります。解決策は、テストを含むものとして指定する必要があります(インスペクタで「テスト付き」または「ソースとテスト付き」を選択することによって)。モジュールグループには、テストを含むモジュールを少なくとも 1 つ含める必要があります。

テスト結果と統計は、xml ファイル(TeamCity でサポートされています)にフォーマットされています。

テストモジュールの実行構成構築は、MPS ant テスト実行中にロードされるべきである追加のアイデアプラグインを指定する可能性をサポートします。MPS ant テストの実行に必要なプラグインは、自動的に計算できないことがあります。テストが利用可能な特定のプラグインを必要とし、その情報が MPS ビルド言語エンジンによってテストを含むモジュールから推論できないというシナリオがあります。そのような場合、必要なプラグインは手動で指定できます。

他にもいくつかのオプションが利用可能です。

  • 失敗の停止 - 最初のテストが失敗したときにテストの実行を停止します。

  • compress args - JAVA_TOOL_OPTIONS 環境変数を使用して Windows 上のコマンドラインのサイズ制限を回避するには、true に設定します。

  • jvm 引数 - 追加の jvm 引数を指定します。

blxx4.png

MPS ランナープラグイン

Jetbrains.mps.build.mps.runner によって提供される MPS-runner プラグインは、新しいビルドスクリプトエントリを有効にし、ソリューションからコードを実行します。Java コードを保持するソリューションを指定すると、ビルドスクリプトはビルドプロセスの一部としてそのコードを実行できるようになります。

Runner.png

プロジェクトの「サンドボックス」ソリューションにある Java クラスを呼び出す最小限のビルドスクリプトは、次のようになります。

Runner1.png

ソリューション命令からコードを実行すると、コードを実行する MPS インスタンスで選択したプラグインを有効にできます。対応するプラグインは、その依存関係とともに有効になります。

RunnerWithPlugins.png

リポジトリを管理する

MPS ant タスクは、いくつかの新しいタグ(modulemodulesallmpsmodules)を使用して、リポジトリの内容を完全に制御します。

Migrate.png

生成ゴールとしての言語を構築する

ビルド言語を生成対象として使用できるようになりました。これにより、MPS のビルド言語を拡張したり、代替言語を作成したりすることが可能になります。ガイドラインを示す例として、シンプルなテスト言語 jetbrains.mps.build.tests.hl が提供されています。

使い方

以下の記事では、言語プラグインを構築する方法について説明します。

MPS を使ったビルドの話題に関する記事:

2026 年 5 月 06 日

関連ページ:

ブートストラップ依存関係の問題の除去

定義::いつでもそれ自体を使用する言語または、ある言語を使用するソリューションであり、その言語が機能するために同じソリューションを必要とする(つまり、間接的または直接的に依存している)ソリューション。ブートストラップ依存関係の問題があります。なぜこれが問題なのですか:ビルドスクリプトを使用してプロジェクト全体をゼロから再構築することはできません、生成されたアーティファクトを VCS リポジトリに保持する必要があります、このブートストラップ依存関係サークルは、プロジェクトが完全に一から再構築され...

MPS 言語プラグインの構築

言語セットを作成し、それを対象ユーザーが利用できるようにしたいと考えています。このドキュメントでは、言語セットを、それらが依存するランタイムと一緒に、有効な MPS プラグインにパッケージ化する方法について説明します。注: MPS に付属の JavaExtensionsSample サンプルプロジェクトには、サンプルの Java 拡張機能をビルドしてプラグインにパッケージ化するための完全に機能的なビルドスクリプトが含まれています。そこからインスピレーションを受けることができます。出発点:言語の...

パターン

パターン言語:パターン言語の目的はただ一つ、モデル構造のパターンを定義することです。これらのパターンは、一致させたいノードの視覚的な表現となります。パターンがノードに一致するのは、ノードのプロパティ値がパターンで指定された値と等しく、ノードの参照がパターン内の参照と同じターゲットを指し、対応する子ノードがパターンの適切な子ノードと一致する場合です。また、パターンにはノード、参照、プロパティの変数を含めることができます。これらの変数は、任意のノード / 参照 / プロパティに一致します。それに加...