構文リファレンス
Workflow の定義を行うファイルの仕様について記載します。
ファイルのルートには以下のような構文を記述します。
meta … Workflow のメタ情報
args … Workflow の引数
steps … Workflow の各ステップ。上から順に実行されます。
meta:
description: 説明文
args:
target:
type: str
# defaultは未実装
# default: 100
description: データの説明
steps:
...
meta
Workflow のメタ情報を記述します。
この Workflow の内容を簡潔に説明するために記述します。
引数 |
説明 |
---|---|
|
|
meta:
description: 説明文
注釈
このフィールドは必須ではありませんが、入力を推奨します。
args
ワークフロー実行時に渡す引数の定義を記述します。
ここで定義された引数は、ワークフローの実行時にリクエストボディのargsで渡すことができます。
渡された引数は、ワークフローのsteps内で ${args.XXXXX}
の形参照することができます。
引数 |
説明 |
---|---|
type |
引数の型を指定します。型は以下のいずれかを指定できます。 |
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"]
を代入しています。
引数 |
説明 |
---|---|
|
代入する変数名とその値のリストを指定します。 |
steps:
step:
assign:
target: ${"sample message"}
my_list: ["zero","one","two"] #複数可
call
外部関数などを呼び出すステップです。
引数 |
説明 |
---|---|
|
呼び出す関数名を指定します。 callリファレンス を参照してください。 |
|
関数に渡す引数を指定します。 引数名に関しても上記リファレンスを参照してください。 |
|
関数の戻り値を格納する変数名を指定します。 |
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}