1. プラグイン

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

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

このページの翻訳は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クライアントSDKへの依存関係も追加されます。

プラグインを作成する

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

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

  • ファイルClass1.csの名前をPlugin.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 <EchoCommandHandler> 
    {
      public EchoCommand() : base("echo", "Echo a value")
      {
        // Options
        AddOption(new Option <string> (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 <int> InvokeDefaultAsync(InvocationContext context)
      {
        Renderer.WriteLine(Value);
    
        // Return exit code to indicate success or failure
        return Task.FromResult(0);
      }
    }
  2. または、次のコードに示すように、引数とオプションに別のクラスを使用します。

    using System.CommandLine;
    using System.CommandLine.Invocation;
    using Microsoft.Extensions.Options;
    using Sitecore.ContentHub.Cli.Shared.Abstractions.Commands;
    using Sitecore.ContentHub.Cli.Shared.Abstractions.Rendering;
    
    namespace Walkthrough;
    
    public class EchoCommandParameters
    {
      public string Value { get; set; }
    }
    
    public class EchoCommand : BaseCommand <EchoCommandHandler> 
    {
      public EchoCommand() : base("echo", "Echo a value")
      {
        // Options
        AddOption(new Option <string> (new[] {"--value", "-v"}, "Value to echo")
        {
          IsRequired = true
        });
      }
    }
    
    public class EchoCommandHandler : BaseCommandHandler <EchoCommandParameters> 
    {
      // Inject services from service provider
      public EchoCommandHandler(
        IOutputRenderer renderer, 
        IOptions <EchoCommandParameters> parameters) : base(renderer, parameters)
      {
      }
    
      // Command handling
      public override Task <int> InvokeDefaultAsync(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 <string> (new[] {"--value", "-v"}, "Value to echo")
            {
              IsRequired = true
            });
    
            Handler = CommandHandler.Create <string>, IHost ((value, host) = 
            {
              host.Services.GetService <IOutputRenderer> ().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 <Command> { new EchoCommand() }, "Walkthrough plugin for demonstration purposes only");
      }
    
      ...
    }

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

次のコマンドは、walkthroughコマンド グループから開始し、新しいechoコマンドが追加されたことを確認します。

ch-cli walkthrough --help

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

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