メインコンテンツまでスキップ
バージョン: 2.0

Durable Workflow 2.0 クイックスタート

始める前に​

目的: PHP、Python、Rust のいずれかでサービスモードのワークフローを実行し、完了した永続結果を読み取ります。

所要時間: ランタイムの準備後、約 15 分です。

完了の目印: 選んだ SDK が Worker とワークフローを開始し、ワークフロー ID、status=completed、Hello, <language>! を出力します。

必要なもの:

  • curl とターミナル
  • ローカルのセルフホスト経路には Docker、または準備済みの Durable Workflow Cloud 名前空間
  • PHP 8.1+ と Composer、Python 3.10+、Rust 1.86+ のいずれかのツールチェーン

サービスモードに Laravel は不要です。Laravel 組み込みモードは、このガイドの最後で説明します。

1. サービスモードのランタイムを選ぶ​

ランタイム適している場合次の手順
Durable Workflow Cloudランタイム、永続ストレージ、Managed Waterline の運用を Durable Workflow に任せたい。実行可能な Cloud の最初のワークフローに従います。PHP、Python、Rust の完全なソースを準備済みの認証情報へ接続し、completed の結果を得ます。Server や独立した Waterline サービスを実行する必要はありません。
セルフホスト Serverランタイムを自分で運用したい、または公開済み製品だけでこのローカル例を試したい。以下の Docker と curl の手順へ進みます。運用 UI が必要な場合だけ、Waterline を別途デプロイします。

以下の完全なソースは、アカウントや製品のソース取得なしで試せるローカル Server を使います。Cloud も同じ SDK と Worker モデルです。ローカル開発用の接続を、Cloud マネージドランタイムの接続情報に置き換えてください。

2. ローカル Server を起動する​

Cloud を選んだ場合は、この手順を省略します。セルフホストでは、固定バージョンの設定を開いて実行します。製品のソースをマウントせず、SQLite と開発用トークンを使う Server が起動します。

固定バージョンの Server イメージを起動する
export DW_SERVER_IMAGE=durableworkflow/server:2.5.13
export DW_AUTH_TOKEN=dev-token

docker volume create durable-workflow-quickstart

docker run --rm \
-v durable-workflow-quickstart:/app/database \
-e DW_AUTH_DRIVER=token \
-e DW_AUTH_TOKEN="$DW_AUTH_TOKEN" \
"$DW_SERVER_IMAGE" server-bootstrap

docker rm -f durable-workflow-server >/dev/null 2>&1 || true
docker run -d --name durable-workflow-server \
-p 8080:8080 \
-v durable-workflow-quickstart:/app/database \
-e DW_AUTH_DRIVER=token \
-e DW_AUTH_TOKEN="$DW_AUTH_TOKEN" \
"$DW_SERVER_IMAGE"

until curl -sf http://localhost:8080/api/ready >/dev/null; do sleep 1; done
curl -H "Authorization: Bearer $DW_AUTH_TOKEN" \
http://localhost:8080/api/cluster/info

期待する結果: readiness リクエストが成功し、クラスタ情報がローカルの独立 Server を示します。一つの言語の手順を終えるまで、そのまま実行してください。

3. 一つの言語を選ぶ​

三つの公式 SDK は同等に利用できます。選んだタブだけを表示するので、一つの手順に集中できます。

必要な環境:PHP 8.1 以降と Composer。この手順は、フレームワークに依存しない durable-workflow/sdk パッケージを使います。

  1. SDK をインストールします。
mkdir durable-workflow-php-quickstart
cd durable-workflow-php-quickstart
composer require durable-workflow/sdk:2.2.6
  1. Worker とクライアントを追加します。 完全なソースを開き、二つのファイルを新しいプロジェクトへコピーします。
そのまま実行できる PHP の完全なソース

Worker は、専用のタスクキューにワークフロー型とアクティビティ型を一つずつ登録します。

cat > worker.php <<'PHP'
<?php

declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

use DurableWorkflow\Client;
use DurableWorkflow\Worker;
use DurableWorkflow\Worker\ActivityContext;
use DurableWorkflow\Worker\WorkflowContext;

$client = new Client('http://localhost:8080', token: 'dev-token');
$worker = new Worker($client, 'quickstart-php');

$worker->registerActivity(
'quickstart.greet',
static fn (ActivityContext $context, string $name): string => "Hello, {$name}!",
);

$worker->registerWorkflow(
'quickstart.greeter',
static function (WorkflowContext $context, string $name): array {
$greeting = $context->activity('quickstart.greet', [$name]);

return ['greeting' => $greeting, 'language' => 'php'];
},
);

$worker->run();
PHP

クライアントと結果の読み取り​

クライアントは一意の名前のワークフローを開始し、選んだ実行の完了を待って、Server に保存された永続的な終端状態を読み取ります。

cat > start.php <<'PHP'
<?php

declare(strict_types=1);

require __DIR__.'/vendor/autoload.php';

use DurableWorkflow\Client;

$client = new Client('http://localhost:8080', token: 'dev-token');
$workflowId = 'quickstart-php-greeter-'.bin2hex(random_bytes(4));
$handle = $client->startWorkflow(
workflowType: 'quickstart.greeter',
workflowId: $workflowId,
taskQueue: 'quickstart-php',
input: ['PHP'],
);

$result = $handle->result(timeoutSeconds: 30);
$execution = $handle->describeSelectedRun();

echo "workflow_id={$execution->workflowId}\n";
echo "status={$execution->status}\n";
echo 'result='.json_encode($result, JSON_THROW_ON_ERROR)."\n";
PHP
  1. Worker とクライアントを実行します。
php worker.php > quickstart-worker.log 2>&1 &
export QUICKSTART_WORKER_PID=$!
trap 'kill "$QUICKSTART_WORKER_PID" 2>/dev/null || true' EXIT

php start.php

kill "$QUICKSTART_WORKER_PID" 2>/dev/null || true
trap - EXIT

期待する結果: status=completed と、"greeting":"Hello, PHP!" を含む結果です。Laravel を使わず、独立した PHP Worker を実行して、永続結果を確認できました。

次は PHP SDK ガイドへ進んでください。

4. ローカル Server を片付ける​

Cloud 利用者には、削除するローカル Server はありません。セルフホストの例を終えたら、次を実行します。

docker rm -f durable-workflow-server
docker volume rm durable-workflow-quickstart

別の経路:Laravel 組み込みモード​

Laravel 組み込みモードは、ワークフローの状態、キュー実行、設定、運用ツールを既存の Laravel インフラ内に置くための、公式 PHP デプロイモードです。durable-workflow/workflow をインストールします。独立した Server や durable-workflow/sdk は使いません。

公開済みパッケージで、新しい組み込みアプリを準備します。

composer create-project laravel/laravel durable-workflow-laravel-quickstart
cd durable-workflow-laravel-quickstart
composer require durable-workflow/workflow:2.5.4
php artisan migrate
php artisan queue:work

同じ Laravel アプリ内に運用 UI を追加したい場合は、検証済みの Waterline 組み込み Composer パッケージを追加します。

composer require durable-workflow/waterline:2.3.1
php artisan waterline:install

この Composer パッケージは、組み込みモード用のインストール方法です。独立したセルフホスト Waterline サービスのインストール方法とは異なります。Laravel 組み込みモードでは、Server やサービスモード SDK は不要です。

組み込みモードのインストールで、sync 以外の Laravel キューを設定し、ワークフローを定義して開始してください。デプロイモードは、この経路とサービスモードを比較しています。

次のステップ​

Laravel 組み込みモードのタイマー、シグナル、クエリ、アクティビティ、子ワークフローなどは、別の組み込みドキュメントを参照してください。

リリース検証には専用のガイドがあります。プラットフォーム適合性テストには、適合性検証に使う正確な製品マトリクス、公開ソースチェック、完全な実行記録、実時間の基準、片付け、機械可読のクイックスタート契約が含まれます。