Skip to content

設定

defineTsumugi

ts
const tsumugi = defineTsumugi({
  performers,
  flows,
  schedules,
  runs,
  bindings,
  auth,
  ui,
  retention,
  metrics,
  onFailure,
});

型引数の指定は不要です。bindingごとのpayloadの型もEnvもperformersから推論されます。

名前必須内容
performersperformerのモジュール, ペイロードと必須キーの型の導出に利用
flowsFlow名と定義の対応。指定するとRUNのbindingが必要
schedules定期実行の定義。指定するとSCHEDULERのbindingが必要
runsRunの上限と保持期間の設定
bindingsbinding単位の分割数、流量制御、保持期間
auth認証ミドルウェア。未設定の場合はAPIもダッシュボードも無効
uitsumugi/uiui()。未指定の場合はバンドルに含まれない
retention一覧の保持設定
metricsAnalytics Engineの読み取り設定。未設定の場合はメトリクスが無効
onFailure失敗したジョブを知らせるbinding名。未設定の場合は通知しない

戻り値

名前内容
fetch queue scheduledExportedHandler, そのままdefault exportへ置く
jobs(env)型付きの投入用オブジェクト, JobQueue<M>を返す
enqueue(env, input)オブジェクト形の型付き投入, 1件投入してジョブIDを返す
enqueueMany(env, inputs)同じ形で複数件を投入する
shardFor(env, binding, partitionKey?)投入先のDurable Objectのstub
start(env, flow, input, options?)Runを開始してrunIdを返す
runFor(env, runId)Run Durable Objectのstub
runClasswranglerに登録するRun Durable Objectのクラス
schedulerClasswranglerに登録するScheduler Durable Objectのクラス

startrunForrunClassflowsの指定に関わらず提供されます。
flowsに無いFlow名をstartへ渡した場合と、RUNのbindingが無い状態でrunForを呼び出した場合は例外が発生します。

投入の3経路の違いはジョブの投入を参照してください。

auth

同梱の認証は3つです。任意のHonoミドルウェアも指定できます。

関数内容
bearerAuthトークン1つでの認証
cloudflareAccessCloudflare AccessのJWTを検証する
unsafeNoAuth認証を行わず開放する

未設定の場合はREST APIもダッシュボードも無効で、fetchはすべて404を返します。
unsafeNoAuthを指定した場合の影響はダッシュボードと認証を参照してください。

metrics

Analytics Engineに書いた値をダッシュボードから参照する場合に指定します。

ts
const tsumugi = defineTsumugi<Env>({
  performers,
  auth: bearerAuth((env: Env) => env.TSUMUGI_TOKEN),
  metrics: (env: Env) =>
    env.CF_ACCOUNT_ID && env.CF_API_TOKEN
      ? { accountId: env.CF_ACCOUNT_ID, apiToken: env.CF_API_TOKEN, dataset: 'tsumugi_jobs' }
      : undefined,
});

apiTokenにはAccount Analyticsの読み取り権限が必要です。secretとして設定してください。
datasetはwranglerのanalytics_engine_datasetsに書いた名前と揃えます。

指定しない場合、メトリクスのタブとAPIは無効です。

onFailure

失敗したジョブを知らせるperformerのbinding名を指定します。

ts
const tsumugi = defineTsumugi({
  performers,
  onFailure: 'NotifyFailure',
});

指定できるのはFailureNoticeを受け取れるperformerのみです。
通知される条件とFailureNoticeの内容は失敗の通知を参照してください。

RunSettings

runsに指定する値です。

名前既定内容
maxNodes100001つのRunに含められるノード数の上限。超過するとRunが失敗する
maxDepth3subflowの入れ子の上限。超過するとRunが失敗する
sweepAfterMs5分終了したRunを保持する時間
failedRetentionMs7日失敗したRunを保持する時間。再開の対象となる期間

BindingConfig

bindingsの各値です。

名前既定内容
shards1分割数。2以上にするとpartitionKeyが必須になる
policy下記流量制御とエージング
sweepAfterMs5分COMPLETEDCANCELLEDを保持する時間
failedRetentionMs7日FAILEDSTALLEDを保持する時間。リトライを受け付ける期間

Policy

名前既定内容
pausedfalse投入の一時停止。実行中のジョブの監視とエージングは継続する
concurrency100同時実行数の上限
perKeyConcurrency1concurrencyKey単位の上限
ratenull{ tokens, intervalMs }, intervalMsあたりtokens件まで実行する
perKeyRatenull{ tokens, intervalMs }, キーごとにintervalMsあたりtokens件まで実行
agingIntervalMs60000この間隔だけ待つごとに実効優先度が1上がる
reaperGraceMs30000timeoutMsの経過後さらにこの時間結果が報告されなければ無応答として扱う

EnqueueInput

名前既定内容
binding投入先のbinding名
payloadperformerへ渡す値
priority0数値の優先度。大きいほど先に投入される
maxAttempts3試行回数の上限
backoff指数fixedexponential
timeoutMs60000結果を待つ時間の上限
delayMs実行開始の遅延
runAt絶対時刻での予約。delayMsとは排他
expiresInMs投入時刻からの相対の期限
expiresAt絶対時刻での期限。expiresInMsより優先
guaranteeat-least-onceat-least-onceat-most-once
concurrencyKeyキー単位の直列化
uniqueKey重複排除
uniqueForMs24時間uniqueKeyの予約を保持する期間
partitionKey分割時の投入先の決定に使う

backoffの既定値

ts
{ kind: 'exponential', baseMs: 1_000, factor: 2, maxMs: 3_600_000, jitter: true }

この形を受け取るのはトップレベルのenqueuecreateClientです。
defineTsumugienqueuebindingごとにpayloadと必須キーが決まる型を受け取ります。

SweepOptions

retentionに指定する値です。
cronトリガーを設定すると、終了したジョブを一覧から削除します。

名前既定内容
olderThanMs7日終了したジョブを一覧に残す時間
limit10001回で削除する件数の上限

Runは対象に含みません。Runの保持期間はrunsで指定可能です。

wranglerのbinding

binding種類必須用途
JOB_SHARDDurable Objectジョブの状態管理と実行順序の決定
RUNDurable ObjectRunの実行。flowsを使う場合
SCHEDULERDurable Object定期実行の発火。schedulesを使う場合
TSUMUGI_DBD1一覧と検索に使用するテーブル
TSUMUGI_QUEUEQueuesperformerの実行
TSUMUGI_METRICSAnalytics Engine時系列メトリクス

TSUMUGI_METRICSが無い場合はメトリクスが記録されないだけで、動作に影響はありません。
それ以外のbindingが不足している場合、REST APIは503になり、応答に不足の一覧が含まれます。

remote()を置いたperformerにはservice bindingが必要です。
名前は固定ではなく、performersのキーがそのまま使われます。

jsonc
"services": [
  { "binding": "MAIL", "service": "my-mailer", "entrypoint": "SendMail" },
]

投入のみを行うWorkerに必要なbindingはJOB_SHARDだけです。

サブパス

import元内容
tsumugidefineTsumugi enqueue bearerAuth TsumugiJobShardなど本体
tsumugi/performerPerformer
tsumugi/clientcreateClientと関連する型。Durable Object実装を含まない
tsumugi/uiui()。ダッシュボードのHTML
tsumugi/types型のみ。ランタイムコードを含まない
tsumugi/testingrunPerformer createTestContext simulateFlowなど

公開しているnpmパッケージはtsumugiのみです。
performerだけを持つWorkerがDurable Objectの実装をバンドルしないよう、サブパスで分割しています。

セットアップ用のCLIはnpx tsumugiで実行します。コマンドの一覧はCLIを参照してください。