MPS 言語プラグインの構築
言語セットを作成し、それを対象ユーザーが利用できるようにしたいと考えています。このドキュメントでは、言語セットを、それらが依存するランタイムと一緒に、有効な MPS プラグインにパッケージ化する方法について説明します。
注: MPS に付属の JavaExtensionsSample サンプルプロジェクトには、サンプルの Java 拡張機能をビルドしてプラグインにパッケージ化するための完全に機能的なビルドスクリプトが含まれています。そこからインスピレーションを受けることができます。
出発点
言語の作成が完了したら、いよいよ世界に公開する時です。他のユーザーがダウンロードできるようにサーバーにアップロードできる、使いやすい ZIP ファイルを作成するには、いくつかの手順を踏む必要があります。
簡単に言うと:
ビルドスクリプトを作成する (手動またはウィザード経由)
Ant ビルド xml ファイルを生成する
Ant の実行
生成されたファイルを選んで共有する
それでは、さらに詳しく見ていきましょう。
ビルドスクリプトを作成する
まず最初に、新しく作成したビルドソリューションで新しいビルドスクリプトを作成する必要があります。ウィザードを使用するか、ビルド記述を手動で作成するという 2 つの選択肢があります。
ウィザードを使う
ソリューションの構築ウィザードを使用して、ソリューションを生成できます。

ウィザードは、新しいビルドスクリプトを既存のソリューションの一部にするかどうか、新しいものを作成するかどうかを確認します。

モデルは新しいソリューション内に作成する必要があります。

結果を MPS プラグインとしてパッケージ化するか、スタンドアロン IDE としてパッケージ化するかを指定することもできます。

最後に、ビルドスクリプトに含める言語とソリューションを選択します。

生成されたビルド記述スクリプトは次のようになります。

手動によるアプローチ
プロセスをさらに制御するには、ビルドスクリプトを自分で作成することもできます。まず既存のソリューションを選択するか、新しいソリューションを作成する必要があります。プロジェクトの論理ビューのルートで右クリックし、新しいソリューションを選択します。ソリューションが存在したら、その中に新しいモデルを作成します。モデルには、使用言語として jetbrains.mps.build と jetbrains.mps.build.mps がリストされ、jetbrains.mps.ide.build が Dependency として記載されている必要があります。


ソリューションとモデルを準備したら、ポップアップメニューから新しいビルドプロジェクトを作成できます。

ビルドスクリプトを編集する
いずれにせよビルドスクリプトを作成したら、次はビルドの説明を編集する番です。言語とソリューションを MPS プラグインとしてパッケージ化できるようにするには、最終的に次のようなスクリプトを作成する必要があります。

すべての依存関係のアーティファクトの場所を定義することが重要です。このビルドスクリプトの唯一の依存関係である mps 依存関係では、MPS アプリケーションフォルダーの場所を知る必要があります。現在の MPS インスタンスがデフォルトで使用されているため、MPS の外部からビルドスクリプトを実行するつもりがない限り、デフォルトを使い続けることができます。
ビルド言語機能の詳細については、「ビルド言語」を参照してください。
Ant ビルド xml ファイルを生成する
ビルドスクリプトを用意して、今 Ant の build.xml ファイルを生成することができます。ビルドソリューションを再構築するだけで、次の図に示すように、ビルドスクリプトのプロパティで指定した場所にファイルが生成されます。

生成された build.xml ファイルは次のように開始する必要があります。

生成されたスクリプトの artifacts.mps プロパティに注目してください。コマンドラインからスクリプトを実行するときは、MPS アプリケーションの場所を指すようにする必要があります。
上記のスクリプトでは、マクロ ($mps_home) を介してアーティファクトの場所を設定しているため、代わりにこのプロパティを設定できます (ビルドマシン上の場所がビルドスクリプトで設定されたパスと異なる場合にのみ必要です)。
Ant の実行
ビルドを実行してプラグインを入手する時が来ました。繰り返しになりますが、2 つの選択肢があります - MPS 内に留まるか、コマンドラインを使用するかのいずれかです。
MPS 内から
プロジェクトビューでビルドノードを右クリックし、実行を選択するだけです。

生成されたアーティファクトは、ベースとして指定したフォルダー内のビルドフォルダーに配置されます。
コマンドラインから
コマンドラインで build.xml ファイルがあるフォルダーに移動し、ant を実行する必要があります。ビルドマシン上の MPS アプリケーションの場所がビルドスクリプトで設定されたパスと異なる場合は、コマンドラインで実際の場所を指定する必要があります ( ant -Dartifacts.mps="..." )。上記の例では、$mps_home を使用して MPS アプリケーションを指しているため、代わりにコマンドラインでこのプロパティの値を変更できます (ant -Dmps_home="MPS アプリケーションへのパス " )。
この手順では、スクリプトを MPS から実行するかコマンドラインから実行するかに関係なく、ビルドスクリプトのレイアウトセクションで指定したとおりに、または (表示されているケースのように) MPS プラグインのデフォルトレイアウトを使用して整理された、必要なすべての jar ファイルを含む zip ファイルが生成されます。
生成されたファイルを選んで共有する
ここで、生成されたファイルを MPS ユーザーに配布して、作成したプラグインをインストールしてもらう必要があります。
プラグインは手動でインストールすることも、MPS プラグインマネージャーを使用してインストールすることもできます。手動でインストールする場合は、ダウンロードしたプラグインの zip ファイルを MPS プラグインフォルダーに解凍する必要があります。
Windows と Linux : 通常、USER_HOME/MPS_version/config/plugins または MPS_HOME/plugins
MacOS : 〜 /Library/Application Support/MPS_version/ または MPS_HOME/plugins
再起動後、インポートされた言語は MPS で利用可能になります。
プラグイン内のモジュールの可視性を制御する
デフォルトでは、MPS は言語プラグインから提供されるすべてのモジュールがエンドユーザーに表示されることを前提としています。しかし、これは常に最適な戦略とは限りません。言語の数が増え、プラグインの複雑さが増すにつれて、言語設計者が特定のモジュールをエンドユーザーから非表示にしたい場合があります。これらのモジュールは引き続き存在し、動作しますが、インポートするモジュールを選択する際のダイアログには表示されません。これは、無関係な言語やソリューションが大量に表示されてエンドユーザーが混乱したり圧倒されたりしないようにするために役立ちます。
プラグインは、com.intellij.mps.LanguageLibrary 拡張ポイントを使用して、プラグインが提供するモジュールについて MPS に通知します。その拡張ポイントへの拡張では、オプションの Hide="true" 属性を提供できます。これにより、プラグインのすべてのモジュールがフィルタリングの対象となる可能性があります。フィルタリングを有効にするには、com.intellij.mps.VisibleModuleMask とそれが定義する拡張ポイントを使用してパターンを指定する必要があります。
関連ページ:
ビルド言語
MPS ビルド言語とは何ですか? :ビルド言語は、宣言的な方法でビルドを定義するための拡張可能なビルド自動化 DSL です。Ant に生成されるため、Ant の実行力を活用しながら、ソースコードをクリーンに保ち、不要な詳細や煩雑な記述を排除します。MPS 言語のスタックとして構成され、最下層に ANT を配置することで、ビルド手順の各部分を異なる抽象度で表現できます。言語の慣例に従えば、複雑なアーティファクト(MPS プラグインなど)のビルドも 1 行のコードで指定できますが、同時に、ファイル管理...
言語のためのスタンドアロン IDE を構築する
導入:スタンドアロン IDE とは、特定の業務目的に必要な要素のみを含む、機能を絞り込んだ IDE のことです。スタンドアロン IDE は、エンドユーザーに DSL を配布する便利な方法を提供します。ユーザーは、専用 IDE の快適な環境で、言語設計者が用意した IDE サポート、リファクタリング、コード分析などの機能をすべて利用して言語を使用できます。言語設計に関連する煩雑な機能や不要な言語はすべて排除されています。言語の設計が完了したら、MPS は、これらのドメイン固有言語を使用するために...