概要
Jinba Flowの各ステップは、実行のタイミングと方法を制御する高度なオプションで設定できます。これらのオプションにより、条件分岐、ループ、複雑な依存関係を持つ洗練されたワークフローを作成できます。ステップの依存関係(needs)
needsオプションは、現在のステップが実行される前に完了する必要があるステップを指定します。これにより実行順序が作成され、必要なときにデータが利用可能になります。
基本的な使い方
重要なポイント
- 実行順序:
needsを持つステップは、指定されたすべての依存関係が完了するまで待機します - 並列実行: 依存関係のないステップは自動的に並列で実行されます
- 失敗の処理: 依存先が失敗またはスキップされた場合、依存するステップもスキップされます
- ダイヤモンドパターン: 複雑な依存関係グラフがサポートされています(A→B, A→C, B→D, C→D)
例:マルチブランチワークフロー
条件付き実行(when)
whenオプションを使用すると、指定した条件がtrueの場合にのみステップを実行できます。これにより、前のステップの結果に基づいた動的なワークフロー動作が可能になります。
基本構文
条件式
条件は以下をサポートします:- 文字列比較:
"{{steps.check.result.status}}" == "success" - 数値比較:
{{steps.count.result}} > 5 - ブール値評価:
{{steps.validate.result.isValid}} == true
例:条件分岐
重要な注意事項
- 条件はステップ実行前に評価されます
- 条件がfalseの場合、ステップのステータスは
skippedになります - スキップされたステップに依存するステップも同様にスキップされます
- 文字列比較ではテンプレート変数をシングルクォートで囲んでください
ループ実行(forEach)
forEachオプションは、コレクション内の各アイテムに対してステップを複数回実行します。これはデータリストのバッチ処理に便利です。
基本構文
動作の仕組み
forEachの値がリスト/配列として評価されます- リスト内の各アイテムに対してステップが1回ずつ実行されます
- ステップ内では、
{{item}}が現在のアイテムを参照します - 結果は配列として収集されます
例:複数アイテムの処理
アイテムプロパティへのアクセス
forEachとインデックス
現在のアイテムのインデックスが必要な場合は、入力でJinja2ループを使用できます:オプションの組み合わせ
needs、when、forEachを1つのステップで組み合わせることができます:
- すべての
needs依存関係が完了するまで待機 when条件がtrueかどうかを確認- trueの場合、
forEachループを実行(forEachがない場合は単一実行)
ベストプラクティス
依存関係
- 可能な限り依存チェーンを浅くする
- 並列実行を使用してパフォーマンスを向上させる
- ステップに明確な名前を付けて依存関係を読みやすくする
条件
- 意味のある条件式を使用する
- すべての可能な結果(成功、失敗、エッジケース)を考慮する
- さまざまな入力値で条件をテストする
ループ
- 長い実行時間を避けるためにループ回数を制限する
- 空の配列を適切に処理する
- 大規模なデータセットのメモリ使用量を考慮する
関連ドキュメント
- YAMLコーディングパネル - 完全なYAML構文リファレンス
- 変数とテンプレート - 変数プレースホルダーとJinja2テンプレート
- デバッグ - ワークフロー実行のデバッグ