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 の実行機能を活用しながら、ソースをクリーンで無駄のない詳細情報から解放します。一番下に ANT がある MPS 言語のスタックとして編成されているため、ビルド手順の各部分を異なる抽象化レベルで表現することができます。(MPS プラグインのような)複雑なアーティファクトを構築することは、言語の慣習に従えば、たった 1 行のコードで指定できますが、同時...
言語のためのスタンドアロン IDE を構築する
導入:スタンドアロン IDE という用語は、特定のビジネス目的に必要なアーティファクトのみを含む、IDE の簡略版を指します。スタンドアロン IDE はエンドユーザーに DSL を配布する便利な方法を提供します。エンドユーザーは、IDE 設計者が用意した IDE サポート、リファクタリング、コード分析を含む言語を、専用の IDE で快適に使用できます。気になる言語設計関連の機能や不要な言語はすべて削除されます。言語を設計したら、MPS を使用すると、これらのドメイン固有の言語を使用するために必...