1. Cloud development

コマンドを登録するプラグインを作成する

日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

プラグインを使ってContent Hub CLIで使うコマンドを登録できます。この例では、echoというコマンドを作成し、それを登録するプラグインを作成します。echoコマンドは、引数として渡される文字列値を出力します。

このウォークスルーでは、以下の方法を説明します:

!注以下の例は.NET CLIを使用していますが、お好みの統合開発環境(IDE)でも同様の結果が得られます。

プロジェクトを作成してください

プロジェクトを作成するには:

  1. クラスライブラリを作成するには、以下のコマンドを実行します:

    mkdir Walkthrough

    cd Walkthrough

    dotnet new classlib --framework net6.0

  2. コアCLI機能への参照を追加するには、以下のコマンドを実行します:

    dotnet add package Sitecore.CH.Cli.Core --source https://nuget.sitecore.com/resources/v3/index.json

Sitecore.CH.Cli.Coreプラグインインフラストラクチャへのアクセス、ファイルシステムアクセス、設定管理、コンソール出力に関する便利なユーティリティを提供します。また、Web Client SDKへの依存関係も追加します。

プラグインを作成する

アプリケーションを起動する際、CLIはSitecore.CH.Cli.Core.Abstractions.Infrastructure.IPluginから継承する型を探すプラグインの検索パスをスキャンします。

プラグインを作成するには:

  • ファイル名をClass1.csPlugin.csに変更し、以下のコードを追加します

    using Sitecore.CH.Cli.Core.Abstractions.Infrastructure;

    namespace Walkthrough { public class WalkthroughPlugin : IPlugin { public void ConfigureServices(IServiceCollection services) { }

    public void RegisterCommands(ICommandRegistry registry) { } } }

このクラスには以下のメソッドが含まれています:

  • ConfigureServices - 依存注入のために共有サービスコレクションにカスタムサービスを登録できます。コマンドハンドラはこれらのサービスをコンストラクタで解決できます。詳細は依存 注入 - .NET を参照してください。
  • RegisterCommands - このプラグインの一部として提供される新しいコマンドを登録し、CLIを通じて利用可能にします。

コマンドを作成して登録する

この例では、echoというコマンドを作成します。これを行うために使える方法は2つあります:

  • コマンド宣言とコマンドハンドリングを別々に使用してください。これはコマンドハンドラ実装のより良く、より簡単なユニットテストを可能にするため、好ましいアプローチです。
  • 同じクラス内でオプションとコマンド処理を指定してください

コマンドを作成・登録するには:

ベース構造体に渡されるecho値は、後でコマンドが利用可能になる名前です。

引数は関数に渡されます。 IHostは、以前に登録されたサービスを解決するサービスプロバイダーへの参照を含みます。ベース構造体に渡されるecho値は、後でコマンドが利用可能になる名前です。

新しいコマンドは既存のグループに追加することも、それ専用に作成された新しいグループにも追加できます。標準として利用可能なコマンドグループはいくつかあります。以下のようなものがあります:

  • delivery 
  • serialization 
  • tenant
  1. EchoCommand.csというファイルを作成し、以下のコードに示されるように、別のコマンド宣言とコマンド処理を追加します。

    using System.CommandLine; using System.CommandLine.Invocation; using Sitecore.ContentHub.Cli.Shared.Abstractions.Commands; using Sitecore.ContentHub.Cli.Shared.Abstractions.Rendering;

    namespace Walkthrough;

    public class EchoCommand : BaseCommand { public EchoCommand() : base("echo", "Echo a value") { // Options AddOption(new Option (new {"--value", "-v"}, "Value to echo") { IsRequired = true }); } }

    public class EchoCommandHandler : BaseCommandHandler { // Inject services from service provider public EchoCommandHandler(IOutputRenderer renderer) : base(renderer) { }

    public string Value { get; set; }

    // Command handling public override Task InvokeDefaultAsync(InvocationContext context) { Renderer.WriteLine(Value);

    // Return exit code to indicate success or failure return Task.FromResult(0); } }

  2. または、引数とオプション用の別クラスを使うこともできます。以下のコードに示されています。

    using System; using System.CommandLine; using System.CommandLine.Invocation; using System.Threading.Tasks; using Microsoft.Extensions.Options; using Sitecore.CH.Cli.Core.Abstractions.Commands; using Sitecore.CH.Cli.Core.Abstractions.Rendering; using Stylelabs.M.Sdk.WebClient;

    namespace Walkthrough;

    public class EchoCommandParameters { public string Value { get; set; } }

    public class EchoCommand : BaseCommand { public EchoCommand() : base("echo", "Echo a value") { // Options AddOption(new Option (new {"--value", "-v"}, "Value to echo") { IsRequired = true }); } }

    public class EchoCommandHandler : BaseCommandHandler { // Inject services from service provider public EchoCommandHandler( Lazy client, IOutputRenderer renderer, IOptions parameters) : base(client, renderer) { Parameters = parameters.Value; }

    public EchoCommandParameters Parameters { get; }

    // Command handling public override Task InvokeAsync(InvocationContext context) { Renderer.WriteLine(Parameters.Value);

    // Return exit code to indicate success or failure return Task.FromResult(0); } }

  3. 以下のコードに示されているように、同じクラス内でオプションとコマンド処理を指定します。

    using System.CommandLine; using System.CommandLine.NamingConventionBinder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Sitecore.ContentHub.Cli.Shared.Abstractions.Commands; using Sitecore.ContentHub.Cli.Shared.Abstractions.Rendering;

    namespace Walkthrough { public class EchoCommand : BaseCommand { public EchoCommand() : base("echo", "Echo a value") { // Options AddOption(new Option (new {"--value", "-v"}, "Value to echo") { IsRequired = true });

    Handler = CommandHandler.Create , IHost ((value, host) = { host.Services.GetService ().WriteLine(value); }); } }

  4. プラグインクラスとコマンドを接続するには、RegisterCommandsメソッドを更新するPlugin.csファイルを次のように修正してください:

    public class WalkthroughPlugin : IPlugin { ...

    public void RegisterCommands(ICommandRegistry registry) { // register the command to an existing command group registry.RegisterCommand("walkthrough", new EchoCommand());

    // register a new command group and its commands registry.RegisterCommandGroup( "walkthrough", new List { new EchoCommand() }, "Walkthrough plugin for demonstration purposes only"); }

    ... }

コンパイルされて 検出可能なプラグイン検索パスにコピーされると、walkthroughコマンドグループとechoコマンドがCLIに含まれています。これで複数のコマンドを実行して、すべてが正しく設定されているか確認できます。

以下のコマンドはwalkthroughコマンドグループから始まり、新しいechoコマンドが追加されたことを検証します。

ch-cli walkthrough --help

echoコマンドは次のように実行できます:

ch-cli walkthrough echo --value Hello

この記事を改善するための提案がある場合は、 お知らせください!