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

コマンドラインエクステンションの開発

NDCLI からコマンドを実行するには NDCLI 用のコマンドラインエクステンションが必要です。 モデル検証や生成などの処理ロジックは同じでも、NDCLI からコマンドを通じてそれらの処理を実行する仕組みが異なります。 そのため、Next Design デスクトップ版のエクステンション自体をそのまま共用することはできません。

以下では、コマンドラインエクステンションの開発方法について説明します。

プロジェクトの設定

プロジェクトの種類

  • C# によるクラスライブラリとして開発します。

エクステンションの DLL 名

  • コマンドラインエクステンションのエントリーポイントとなるクラス(後述)が格納されるDLLファイル名は "CliExtension" の文字列を含んだ名前として下さい。
  • 通常、プロジェクト名がDLLファイル名となるため、プロジェクト名に "CliExtension" を含めることをお勧めします。

フレームワークの選択

  • .NET Standard 2.0 を選択します。
     (これにより Linux 環境でも動作させることができます)

パッケージのインストール

  • 参照するパッケージに次のパッケージを追加します。
    • NextDesign.Cli.ExtensionFramework

ビルドの設定

  • Visual Studio のビルド後のイベントに次のコマンドを設定します。
    (これにより依存ライブラリを含む実行時に必要なファイル一式が publish フォルダに出力されます)
dotnet publish "$(ProjectPath)" -c $(ConfigurationName) --no-build 
ヒント

コードの実装

エントリーポイントとなるクラスの実装

  • エントリーポイントとなる ExtensionBase クラスを継承したクラスを定義します。
using NextDesign.Cli.ExtensionFramework;
using DensoCreate.Cli.Framework;

namespace MyExtension.CliExtension
{
public class MyCliExtension : ExtensionBase
{
/// <summary>
/// コンストラクタ
/// </summary>
public MyCliExtension() : base("MyCliExtension")
{
}
}
}

コマンドの実装

  • 実現するコマンドごとに Command クラスを継承したクラスを定義します。
  • 1つのコマンドラインエクステンションに複数のコマンドを定義できます。
  • サブコマンドを追加する場合は SubCommand クラスを継承したクラスを定義します。
注意
  • コマンドラインでコマンドとサブコマンドを指定した場合、コマンドの OnExecute は呼び出しされません。コマンドに引数を指定しても無視され、必須判定もされません。
  • サブコマンドなしでコマンドを指定した場合のみ、コマンドに対する処理が行われます。
using NextDesign.Cli.ExtensionFramework;
using DensoCreate.Cli.Framework;

namespace MyCliExtension
{
/// <summary>
/// MyCommand のコマンド
/// </summary>
public class MyCommand : Command
{
/// <summary>
/// コンストラクタ
/// </summary>
public MyCommand() : base("MyCommand", "MyCommand コマンドの説明です")
{
AddOption<string>(new string[] { "--option", "-o" }, "option の説明です", true);
RegisterHandler(nameof(OnExecute));

// サブコマンドの登録
AddSubCommand<MySubCommand>();
}

/// <summary>
/// ハンドラ実行
/// </summary>
/// <param name="option"></param>
private void OnExecute(string option)
{
Console.WriteLine($"MyCommand が実行されました。 option: {option}");
}
}

/// <summary>
/// SubCommandのサブコマンド
/// </summary>
public class MySubCommand : SubCommand
{
/// <summary>
/// コンストラクタ
/// </summary>
public MySubCommand() : base("MySubCommand", "MySubCommand コマンドの説明です")
{
AddOption<string>(new string[] { "--subOption", "-o" }, "subOption の説明です");
RegisterHandler(nameof(OnExecute));
}

/// <summary>
/// ハンドラ実行
/// </summary>
private void OnExecute(string subOption)
{
Console.WriteLine($"MySubCommand が実行されました。 subOption: {subOption}");
}
}
}

エクステンションの実行環境への配置

ビルド結果として publish フォルダに出力されたファイル一式を、次のいずれかのフォルダに格納します。

  • 自分のみがそのエクステンションを利用する場合

    • Windows版:
      "%HOMEPATH%\AppData\Local\DENSO CREATE\Next Design CLI\extensions\{エクステンションごとのサブフォルダ}\"
    • Linux版:
      "$HOME/.local/share/DENSO CREATE/Next Design CLI/extensions/{エクステンションごとのサブフォルダ}/"
  • そのコンピュータで NDCLI を利用するすべてのユーザーがそのエクステンションを利用する場合

    • {NDCLI のインストール先パス}\extensions\{エクステンションごとのサブフォルダ}