Documentation Index
Fetch the complete documentation index at: https://docs.jinba.io/llms.txt
Use this file to discover all available pages before exploring further.
Jinba Flowの各ステップは、実行のタイミングと方法を制御する高度なオプションで設定できます。これらのオプションにより、条件分岐、ループ、複雑な依存関係を持つ洗練されたワークフローを作成できます。
ステップの依存関係(needs)
needsオプションは、現在のステップが実行される前に完了する必要があるステップを指定します。これにより実行順序が作成され、必要なときにデータが利用可能になります。
基本的な使い方
- id: analyze_data
tool: PYTHON_SANDBOX_RUN
needs:
- fetch_data
- validate_input
input:
- name: code
value: "process({{steps.fetch_data.result}})"
重要なポイント
- 実行順序:
needsを持つステップは、指定されたすべての依存関係が完了するまで待機します
- 並列実行: 依存関係のないステップは自動的に並列で実行されます
- 失敗の処理: 依存先が失敗またはスキップされた場合、依存するステップもスキップされます
- ダイヤモンドパターン: 複雑な依存関係グラフがサポートされています(A→B, A→C, B→D, C→D)
例:マルチブランチワークフロー
- id: input_data
tool: INPUT_JSON
input:
- name: value
value: "[1, 2, 3, 4, 5]"
- id: process_even
tool: PYTHON_SANDBOX_RUN
needs:
- input_data
input:
- name: code
value: |
data = {{steps.input_data.result}}
result = [x for x in data if x % 2 == 0]
- id: process_odd
tool: PYTHON_SANDBOX_RUN
needs:
- input_data
input:
- name: code
value: |
data = {{steps.input_data.result}}
result = [x for x in data if x % 2 != 0]
- id: combine_results
tool: PYTHON_SANDBOX_RUN
needs:
- process_even
- process_odd
input:
- name: code
value: |
even = {{steps.process_even.result}}
odd = {{steps.process_odd.result}}
result = {"even": even, "odd": odd}
条件付き実行(when)
whenオプションを使用すると、指定した条件がtrueの場合にのみステップを実行できます。これにより、前のステップの結果に基づいた動的なワークフロー動作が可能になります。
基本構文
- id: conditional_step
tool: TOOL_NAME
when: "<条件式>"
input:
- name: param
value: "value"
条件式
条件は以下をサポートします:
- 文字列比較:
"{{steps.check.result.status}}" == "success"
- 数値比較:
{{steps.count.result}} > 5
- ブール値評価:
{{steps.validate.result.isValid}} == true
例:条件分岐
- id: check_type
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |
result = {"type": "premium"}
- id: premium_processing
tool: PYTHON_SANDBOX_RUN
when: "'{{steps.check_type.result.type}}' == 'premium'"
needs:
- check_type
input:
- name: code
value: |
result = "プレミアムユーザーを処理中..."
- id: standard_processing
tool: PYTHON_SANDBOX_RUN
when: "'{{steps.check_type.result.type}}' == 'standard'"
needs:
- check_type
input:
- name: code
value: |
result = "スタンダードユーザーを処理中..."
重要な注意事項
- 条件はステップ実行前に評価されます
- 条件がfalseの場合、ステップのステータスは
skippedになります
- スキップされたステップに依存するステップも同様にスキップされます
- 文字列比較ではテンプレート変数をシングルクォートで囲んでください
ループ実行(forEach)
forEachオプションは、コレクション内の各アイテムに対してステップを複数回実行します。これはデータリストのバッチ処理に便利です。
基本構文
- id: process_items
tool: TOOL_NAME
forEach: "{{steps.get_list.result}}"
input:
- name: item
value: "{{item}}"
動作の仕組み
forEachの値がリスト/配列として評価されます
- リスト内の各アイテムに対してステップが1回ずつ実行されます
- ステップ内では、
{{item}}が現在のアイテムを参照します
- 結果は配列として収集されます
例:複数アイテムの処理
- id: get_users
tool: INPUT_JSON
input:
- name: value
value: |
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"},
{"id": 3, "name": "Charlie"}
]
- id: greet_users
tool: PYTHON_SANDBOX_RUN
forEach: "{{steps.get_users.result}}"
needs:
- get_users
input:
- name: code
value: |
user = {{item}}
result = f"こんにちは、{user['name']}さん!"
- id: combine_greetings
tool: PYTHON_SANDBOX_RUN
needs:
- greet_users
input:
- name: code
value: |
greetings = {{steps.greet_users.result}}
result = "\n".join([g['result'] for g in greetings])
アイテムプロパティへのアクセス
forEach: "{{steps.items.result}}"
input:
- name: id
value: "{{item.id}}"
- name: name
value: "{{item.name}}"
forEachとインデックス
現在のアイテムのインデックスが必要な場合は、入力でJinja2ループを使用できます:
- id: process_with_index
tool: PYTHON_SANDBOX_RUN
input:
- name: code
value: |
items = {{steps.get_items.result}}
results = []
{%- for item in items %}
results.append({"index": {{loop.index}}, "value": "{{item}}"})
{%- endfor %}
result = results
オプションの組み合わせ
needs、when、forEachを1つのステップで組み合わせることができます:
- id: process_active_items
tool: PYTHON_SANDBOX_RUN
needs:
- get_items
- check_enabled
when: "{{steps.check_enabled.result.active}} == true"
forEach: "{{steps.get_items.result}}"
input:
- name: code
value: |
item = {{item}}
result = f"処理完了: {item}"
評価順序:
- すべての
needs依存関係が完了するまで待機
when条件がtrueかどうかを確認
- trueの場合、
forEachループを実行(forEachがない場合は単一実行)
ベストプラクティス
依存関係
- 可能な限り依存チェーンを浅くする
- 並列実行を使用してパフォーマンスを向上させる
- ステップに明確な名前を付けて依存関係を読みやすくする
- 意味のある条件式を使用する
- すべての可能な結果(成功、失敗、エッジケース)を考慮する
- さまざまな入力値で条件をテストする
ループ
- 長い実行時間を避けるためにループ回数を制限する
- 空の配列を適切に処理する
- 大規模なデータセットのメモリ使用量を考慮する
関連ドキュメント