メインコンテンツまでスキップ

【機能紹介】拡張コンテンツ:ScriptEditorで手軽に自動化

· 約10分
村上 雅哉

Next Design カスタマーサクセスチームの村上です。

7月26日に拡張コンテンツのScriptEditorの正式版をリリースしました。 ScriptEditorは、Next Design 上で動作するスクリプトを記述、実行できる拡張コンテンツです。 スクリプトの開発というと難しいイメージがある方もいるかもしれませんが、ScriptEditor が様々な機能でスクリプト開発を支援してくれます。 そのため、ScriptEditorは、本格的なエクステンションを開発される方だけでなく、日々のちょっとした面倒な作業を自動化したい方にもピッタリの拡張コンテンツです。 Next Design には、標準のスクリプト実行機能が搭載されていますが、今回リリースした ScriptEditor は、標準のスクリプト実行機能と比べて便利な機能が多くあります。 そこで、この記事ではこれまでスクリプトを開発したことがない方に向けてScriptEditorの良さをご紹介いたします。

想定読者
  • スクリプト開発をしたことがない方
  • 既にスクリプトを開発したことがあり、スクリプト開発を効率化したい方
  • Next Design を利用中、手作業が面倒で自動化、効率化したい作業がある方

ScriptEditor とは

ScriptEditorとは、Next Design 上で動作するスクリプトを記述、実行できる拡張コンテンツです。 ScriptEditorには、以下のような機能があり、スクリプトが簡単に手軽に開発できます。

  • スクリプトを記述する際にインテリセンス機能により利用できるAPIが一覧表示され、スクリプト記述を効率化できます。
  • 記述したAPIにマウスオーバーすると、ツールチップでAPIのヘルプが確認できます。
  • スクリプトにエラーがあればリアルタイムで警告表示します。
  • スクリプトファイルの管理機能により、複数スクリプトの編集やメンバ間でのスクリプト共有が簡単にできます。

ScriptEditorを使用したスクリプト作成の実例

それでは、実際にScriptEditorを使ってスクリプトを作成してみましょう。 今回は、設計を担当するモデルの総数と設計完了した数を取得するスクリプトを作成します。 計測対象として公開している拡張コンテンツのBasicSampleを使用します。(BasicSampleの詳細はこちらを参照ください。) BasicSampleのメタモデルを編集し、関数クラスに進捗フィールドを追加します。進捗フィールドには、未着手/作業中/完了のように進捗状態を入力できるようにします。 このプロジェクトに対して、関数モデルの総数と、進捗フィールドの値が「完了」のモデル数を取得し、進捗を測ります。

はじめに

これからスクリプトを作成します。はじめに現在開いているプロジェクトからすべてのモデルを取得します。次の1行のコードで取得できます。

var allmodels = CurrentProject.GetAllChildren();

インテリセンス機能でAPIが一覧表示され、スクリプト記述を効率化

上記のコードですべてのモデルを取得したので、続きを作成していきます。 関数を表すクラスは"SoftwareFunction"です。クラス名をキーにモデルを取得するI/Fがないかインテリセンスで探しましょう。 FindXXXのようなI/FがないかAPIを見ていくと、FindChildrenByClassメソッドが使えそうです。

FindChildrenByClassメソッドのAPI仕様を確認してみましょう。API仕様は、Next Designの製品サイトで公開されています。

説明欄に「指定されたクラスのインスタンスを検索します。」とあるので"SoftwareFunction"を指定します。また、第二引き数で再帰的に検索するかを指定するとなっているので、tureを指定します。

var functions = CurrentProject.FindChildrenByClass("SoftwareFunction",true);

これで関数の全モデル一覧が取得でき、総数はCountで取得できます。 このようにスクリプトを記述する際にインテリセンス機能により利用できるAPIが一覧表示され、スクリプト記述を効率化できます。

記述したAPIにマウスオーバーすると、ツールチップでAPIのヘルプが確認

次に取得した関数のリストから進捗フィールドが"完了"なモデルを探しましょう。

関数の全モデル一覧から関数のモデルを一つ取り出し、フィールドの値を取得するGetXXXのようなI/Fを探します。GetFieldXXXのメソッドがありますが、今回は文字列操作で"完了"かを判定することを想定してGetFieldStringメソッドを使用します。

APIの説明を確認したいときは、確認したいAPIにマウスオーバーすれば、ツールチップでAPIのヘルプが確認できます。 例えば、GetFieldStringメソッドならこのように表示されます。

ツールチップで簡単にAPIのヘルプが確認できるので便利です。

スクリプトにエラーがあればリアルタイムで警告表示

GetFieldStringメソッドでフィールドの値がstringで取得できるので、Containsメソッドで"完了"を含むモデルの数をカウントします。

var completeFunctionNum = 0;
foreach(IModel function in functions)
{
bool ret = function.GetFieldString("進捗").Contains("完了");
if(ret)
{
completeFunctionNum++;
}
}

スクリプト中にエラーがあると、ScriptEditorがリアルタイムに警告表示で知らせてくれます。以下の画像ではスペルミスを警告しています。

このようにリアルタイムに警告表示をされるため、すぐに間違いに気づきスクリプトを修正することができます。

スクリプトファイルの管理機能により、複数スクリプトの編集やメンバ間で簡単にスクリプトを共有

これで定義が必要な関数の総数と定義済の数が取得できました。結果はアウトプットウィンドウに出力します。 完成したスクリプトは以下になります。

var allmodels = CurrentProject.GetAllChildren();

var functions = CurrentProject.FindChildrenByClass("SoftwareFunction",true);

var completeFunctionNum = 0;
foreach(IModel function in functions)
{
bool ret = function.GetFieldString("進捗").Contains("完了");
if(ret)
{
completeFunctionNum++;
}
}

Output.WriteLine("sample",completeFunctionNum.ToString() + "/" + functions.Count.ToString());

完成したスクリプトはスクリプトファイルの管理機能によって、ファイルに保存できるので簡単にメンバ間で共有できます。 また、保存したスクリプトファイルを階層化して管理できるので複数スクリプトの管理、編集も簡単にできます。

まとめ

ScriptEditorを使って、進捗計測のスクリプトを作成できました。 このようにScriptEditorを使用することでちょっとしたスクリプトを簡単に作れるため、日々の開発の効率化に非常にお勧めです。これまで敷居が高いをスクリプト作成を敬遠していた方も是非、お試しください。

また、計測対象のモデルをNext Design上で選択したモデル以下にしたり、フィールドの値を自動で設定するなど、よくある処理をサンプルコード付きで紹介しているHowToコンテンツをこちらで公開しています。 スクリプトを作成する際に、是非参考にしてください。