コマンドを登録するプラグインを作成する
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
プラグインを使ってContent Hub CLIで使うコマンドを登録できます。この例では、echoというコマンドを作成し、それを登録するプラグインを作成します。echoコマンドは、引数として渡される文字列値を出力します。
このウォークスルーでは、以下の方法を説明します:
- プロジェクトを作成しましょう。
- プラグインを作成します。
- コマンドを作成して登録します。
!注以下の例は.NET CLIを使用していますが、お好みの統合開発環境(IDE)でも同様の結果が得られます。
プロジェクトを作成してください
プロジェクトを作成するには:
-
クラスライブラリを作成するには、以下のコマンドを実行します:
mkdir Walkthrough
cd Walkthrough
dotnet new classlib --framework net6.0
-
コア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
-
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); } }
-
または、引数とオプション用の別クラスを使うこともできます。以下のコードに示されています。
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); } }
-
以下のコードに示されているように、同じクラス内でオプションとコマンド処理を指定します。
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); }); } } -
プラグインクラスとコマンドを接続するには、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