ワークフローテンプレート
ワークフローテンプレートでは、ワークフローのステップ構成を一度定義し、名前を指定して複数回ディスパッチできます。同じ複数ステップの処理を異なるペイロードで実行する場合に便利です。
テンプレートの定義
Queuety::define_workflow()でテンプレートを作成し、登録します。
PHP
use Queuety\Queuety;
use Queuety\Enums\Priority;
$builder = Queuety::define_workflow( 'onboarding' )
->on_queue( 'pipelines' )
->with_priority( Priority::Normal )
->max_attempts( 5 )
->then( CreateAccountHandler::class )
->then( SendWelcomeEmailHandler::class )
->then( NotifyAdminHandler::class );
Queuety::register_workflow_template( $builder );
たとえばプラグインの初期化フックなどで、早めにテンプレートを登録します。
PHP
add_action( 'init', function () {
$builder = Queuety::define_workflow( 'onboarding' )
->then( CreateAccountHandler::class )
->then( SendWelcomeEmailHandler::class )
->then( NotifyAdminHandler::class );
Queuety::register_workflow_template( $builder );
} );
テンプレートの実行
Queuety::run_workflow()を使い、登録済みテンプレートを名前でディスパッチします。
PHP
$workflow_id = Queuety::run_workflow( 'onboarding', [ 'email' => 'user@example.com' ] );
2つ目の引数は、ビルダーの->dispatch()と同様に初期ペイロード/状態です。返される整数はワークフローIDです。
テンプレートが登録されていない場合は、RuntimeExceptionがスローされます。
登録済みテンプレートの一覧表示
テンプレートレジストリにアクセスします。
PHP
$registry = Queuety::workflow_templates();
$template = $registry->get( 'onboarding' ); // WorkflowTemplate or null
完全な例
PHP
// Register templates on init.
add_action( 'init', function () {
// User onboarding pipeline
$onboarding = Queuety::define_workflow( 'onboarding' )
->on_queue( 'users' )
->then( CreateAccountHandler::class )
->then( SetupDefaultsHandler::class )
->then( SendWelcomeEmailHandler::class );
Queuety::register_workflow_template( $onboarding );
// Content generation pipeline
$content = Queuety::define_workflow( 'generate_content' )
->on_queue( 'llm' )
->max_attempts( 5 )
->then( BuildPromptHandler::class )
->then( CallLLMHandler::class )
->then( ReviewOutputHandler::class )
->then( PublishHandler::class );
Queuety::register_workflow_template( $content );
} );
// Dispatch them anywhere in your application.
$wf1 = Queuety::run_workflow( 'onboarding', [ 'email' => 'alice@example.com' ] );
$wf2 = Queuety::run_workflow( 'generate_content', [ 'topic' => 'WordPress performance' ] );
テンプレートとインラインワークフローの比較
| インラインワークフロー | テンプレート | |
|---|---|---|
| 定義 | ディスパッチ時 | 登録時に一度だけ |
| ディスパッチ | Queuety::workflow('name')->then(...)->dispatch() |
Queuety::run_workflow('name', $payload) |
| 再利用 | 毎回チェーンを構築 | 一度登録して何度もディスパッチ |
| 適した用途 | 単発または動的に構成するワークフロー | 標準化された反復可能な処理 |