構文リファレンス

Workflow の定義を行うファイルの仕様について記載します。

ファイルのルートには以下のような構文を記述します。

  • meta … Workflow のメタ情報

  • args … Workflow の引数

  • steps … Workflow の各ステップ。上から順に実行されます。

meta:
description: 説明文

args:
  target:
    type: str
    # defaultは未実装
    # default: 100
    description: データの説明

steps:
  ...

meta

Workflow のメタ情報を記述します。
この Workflow の内容を簡潔に説明するために記述します。

引数

説明

description

string
Workflow の説明文を記述します

meta:
  description: 説明文

注釈

このフィールドは必須ではありませんが、入力を推奨します。

args

ワークフロー実行時に渡す引数の定義を記述します。
ここで定義された引数は、ワークフローの実行時にリクエストボディのargsで渡すことができます。
渡された引数は、ワークフローのsteps内で ${args.XXXXX} の形参照することができます。

引数

説明

type

引数の型を指定します。型は以下のいずれかを指定できます。
・string
・number
・boolean
・object
・array
・null

description

引数の説明を記述します。

args:
  target:
    type: string
    description: データの説明
steps:
  done:
    return: ${args.target}

steps

ワークフローの各ステップを記述します。

steps:
  a: #ステップ名
    assign:
    target: ${"sample message"}
  b: #ステップ名
    return: ${target}

注釈

ステップ名は、ワークフロー内で一意である必要があります。 また、returnとendはステップ名として使用できません。

変数への値の代入(assign step)や、return句、値の参照、 式内関数 などで式を利用できます。

${args.XXXX}
${userName + "さん"}
${math.abs(-2)}

現時点で、式の解釈、値の型は、構文解析と処理に esprima に依存しているのでそれに準じます。

assign

指定された値を変数に代入するステップです。
例では、 target"sample message"my_list["zero", "one", "two"] を代入しています。

引数

説明

assign

代入する変数名とその値のリストを指定します。

steps:
  step:
    assign:
      target: ${"sample message"}
      my_list: ["zero","one","two"] #複数可

call

外部関数などを呼び出すステップです。

引数

説明

call

呼び出す関数名を指定します。 callリファレンス を参照してください。

args

関数に渡す引数を指定します。 引数名に関しても上記リファレンスを参照してください。

result

関数の戻り値を格納する変数名を指定します。

steps:
  step:
    call: http.get #関数名
    args:
      url: ${"https://httpbin.org/get"} #引数
    result: response

switch

条件分岐を行うステップです。

引数

説明

switch

条件分岐の条件と、それに対するステップのリスト

condition

条件分岐の条件を記述します

steps

条件分岐の条件が真の場合に実行するステップのリスト

next

条件分岐の条件が真の場合に次に実行するステップの名前

return

条件分岐の条件が真の場合にワークフローを終了し結果として返す値

複数のconditionが真だった場合、最初に見つかったものが実行されます steps, next , return のどれか一方を指定することができます。

steps:
  default:
    assign:
      result: null
  step:
    switch:
      - condition: ${false} #条件式
        steps:
          a: #ステップ名
            assign:
              result: ${"invisible message"}
      - condition: ${true} #条件式
        steps:
          b: #ステップ名
            assign:
              result: ${"visible message"}
done:
  return: ${result}

for

指定されたステップを繰り返し実行します。

引数

説明

in

要素を繰り返す対象の配列

as

要素を格納する変数名

steps

繰り返し実行するステップのリスト

steps:
  default:
    assign:
      target: 0
step:
  for:
    in: [1, 2, 3] #ループ対象
    as: i #ループ変数
    steps:
      a:
        assign:
          target: ${target+1}
done:
  return: ${target}

parallel

並行処理は、分岐と繰り返しの 2 つの形式があります。

parallel branch

指定されたステップを並行して実行します。

引数

説明

shared

共有する変数名のリスト。各ステップで共有され結果を書き込むのに使用します。

concurrencyLimit

並行処理の最大数

branches

各ブランチのステップのリスト

step:
  parallel:
    shared: [user, notification]
    concurrencyLimit: 2
    branches:
      - getUser:
          steps:
            getUserCall:
              call: http.get
              args:
                url: ${"https://example.com/users/" + args.userId}
            result: user
      - getNotification:
          steps:
            getNotificationCall:
              call: http.get
              args:
                url: ${"https://example.com/notification/" + args.notificationId}
              result: notification

parallel iteration

まとまった量のデータを分散して処理するステップです。

引数

説明

shared

共有する変数名のリスト。各ステップで共有され結果を書き込むのに使用します。

concurrencyLimit

並行処理の最大数

in

要素を繰り返す対象の配列

as

要素を格納する変数名

steps

各分岐イテレーションで実行するステップのリスト

step:
  parallel:
    shared: [response]
    concurrencyLimit: 2
    in: [1, 2, 3, 4]
    as: i
    steps:
      a:
        call: http.get
        args:
          url: ${"https://httpbin.org/get"}
        result: response

try-except

実行中にエラーが起きた場合、そのエラーを処理するフローを記述できます。

引数

説明

try

実行中にエラーが発生しうる Step です。 call や steps などを記述できます

except

try でエラーが発生した場合の処理を記述します。 as でエラーを格納する変数名を指定できます。steps でエラーが発生した場合の処理を記述します。

try 節で囲まれていない箇所でエラーが発生した場合、Workflow は停止します。

steps:
  tryStep:
    try:
      assign:
        result: ${debug.throw('error!!')}
    except:
      assign:
        result: ${"error"}
  done:
    return: ${result}