MPS 2024.1 ヘルプ

MPS 言語プラグインの構築

言語セットを作成し、それを対象ユーザーが利用できるようにしたいと考えています。このドキュメントでは、言語セットを、それらが依存するランタイムと一緒に、有効な MPS プラグインにパッケージ化する方法について説明します。

注: MPS に付属の JavaExtensionsSample サンプルプロジェクトには、サンプルの Java 拡張機能をビルドしてプラグインにパッケージ化するための完全に機能的なビルドスクリプトが含まれています。そこからインスピレーションを受けることができます。

出発点

あなたの言語を構築したと思い、今それは世界と共有する時です。他の人がつかむためにサーバーにアップロードすることができる良い zip ファイルを得るために従う必要があるいくつかのステップがあります。

簡単に言うと:

  • ビルドスクリプトを作成する (手動またはウィザードを介して)

  • Ant ビルド xml ファイルを生成する

  • Ant の実行

  • 生成されたファイルを選んで共有する

それでは、さらに詳しく見ていきましょう。

ビルドスクリプトを作成する

まず最初に、新しく作成したビルドソリューションで新しいビルドスクリプトを作成する必要があります。ウィザードを使用するか、ビルド記述を手動で作成するという 2 つの選択肢があります。

ウィザードを使う

ソリューションの構築ウィザードを使用して、ソリューションを生成できます。

build1.png

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

build2.png

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

build3.png

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

build5.png

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

build6.png

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

build7.png

手動によるアプローチ

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

build12.png
build13.png

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

build14.png

ビルドスクリプトを編集する

どちらの方法でもビルドスクリプトを作成しました。今度はビルドの説明を編集します。あなたの言語とソリューションを MPS プラグインとしてパッケージ化することができるようにするためには、次のようなスクリプトを早急に入手してください。

build7.png

すべての依存関係のアーティファクトの場所を定義することが重要です。このビルドスクリプトの唯一の依存関係である mps 依存関係では、MPS アプリケーションフォルダーの場所を知る必要があります。現在の MPS インスタンスがデフォルトで使用されているため、MPS の外部からビルドスクリプトを実行するつもりがない限り、デフォルトを使い続けることができます。

ビルド言語機能の詳細については、「ビルド言語」を参照してください。

Ant ビルド xml ファイルを生成する

ビルドスクリプトを用意して、今 Ant の build.xml ファイルを生成することができます。ビルドソリューションを再構築するだけで、次の図に示すように、ビルドスクリプトのプロパティで指定した場所にファイルが生成されます。

build11.png

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

build10.png

生成されたスクリプトの artifacts.mps プロパティに注目してください。コマンドラインからスクリプトを実行するときは、MPS アプリケーションの場所を指すようにする必要があります。

上記のスクリプトでは、マクロ ($mps_home) を介してアーティファクトの場所を設定しているため、代わりにこのプロパティを設定できます (ビルドマシン上の場所がビルドスクリプトで設定されたパスと異なる場合にのみ必要です)。

Ant の実行

ビルドを実行してプラグインを入手する時が来ました。繰り返しになりますが、2 つの選択肢があります - MPS 内に留まるか、コマンドラインを使用するかのいずれかです。

MPS 内から

プロジェクトビューでビルドノードを右クリックし、実行を選択するだけです。

build9.png

生成されたアーティファクトは、ベースとして指定したフォルダー内のビルドフォルダーに配置されます。

コマンドラインから

コマンドラインで 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 とそれが定義する拡張ポイントを使用してパターンを指定する必要があります。