# サブワークフロー

> ワークフロー全体を、種類付きの入力と出力を持つ 1 つのノードとして別のワークフローに入れます。その場で新しく作ることも既存のワークフローを再利用することもでき、最大 5 階層まで入れ子にできます。

Source: https://nodaro.ai/ja/docs/nodes/automate/sub-workflow

**サブワークフロー**（Sub-Workflow）ノードは、ワークフロー全体を 1 つのノードとして別のワークフローの中に入れます。外から見ると、入力、出力、ステータスを持つほかのノードと変わりません。展開アイコンをクリックすると、内側のワークフローをその場で編集でき、エディター上部のパンくずリストに現在の場所が表示されます。1 つのパイプラインを多くのワークフローで再利用したり、大きなワークフローを読みやすく保ったりするのに使います。

- Found in: Automate › Workflows
- Output: data
- API type: `sub-workflow`

## 使いどころ
- 同じ動画合成のパイプラインを、複数のコンテンツ用ワークフローで使うとき。
- [**背景を削除**（Remove Background）](https://nodaro.ai/docs/nodes/image/remove-background)の後に[**画像をアップスケール**（Upscale Image）](https://nodaro.ai/docs/nodes/image/upscale-image)を行うような処理の流れを、再利用できる 1 つのノードにしたいとき。
- ワークフローが大きくなり、モジュールに分けたいとき。
- 映像作品のシーンごとに、画像、アニメーション、音声、リップシンクを 1 つのノードにまとめたいとき。

## クイックスタート
### ノードを追加する
キャンバスで Tab を押し、**自動化 › ワークフロー › サブワークフロー**を選びます。

### 内側のワークフローを作成するか選ぶ
一から作る場合は、ワークフローを保存してから、設定パネルで**空のサブワークフローを作成**をクリックします。Nodaro が、[**サブワークフロー入力**（Sub-Workflow Input）](https://nodaro.ai/docs/nodes/automate/sub-workflow-input)と[**サブワークフロー出力**（Sub-Workflow Output）](https://nodaro.ai/docs/nodes/automate/sub-workflow-output)を 1 つずつ持つ子ワークフローを作成し、編集できる状態で開きます。すでにあるワークフローを再利用する場合は、代わりに**ワークフロー**でそのワークフローを選び、次に**ルート**を選びます。

### 内側のワークフローを組み立てる、または確認する
子ワークフローの中で、サブワークフロー入力とサブワークフロー出力の間にノードを接続し、それぞれのコネクタを設定します。戻るには、パンくずリストで親ワークフローの名前をクリックします。

### 接続して実行する
ルートのコネクタが、サブワークフローノードの入力と出力として表示されます。ほかのノードと同じように接続します。たとえば、[**画像アップロード**（Upload Image）](https://nodaro.ai/docs/nodes/image/upload-image)を入力に接続し、出力を[**動画生成**（Generate Video）](https://nodaro.ai/docs/nodes/video/generate-video)に接続します。**実行**をクリックします。

Workflow: 親ワークフローでは、アップロードと動画の間にある 1 つのサブワークフローノードが、クリーンアップのパイプライン全体を表しています。

- 画像アップロード → サブワークフロー (商品写真)
- サブワークフロー → 動画生成 (きれいな写真)

Workflow: サブワークフローの中では、入力コネクタが「背景を削除」と「画像をアップスケール」に値を渡し、出力コネクタがきれいな写真を返します。

- サブワークフロー入力 → 背景を削除
- 背景を削除 → 画像をアップスケール
- 画像をアップスケール → サブワークフロー出力

## 入力と出力
ノードの入力と出力は、選んだルートによって決まります。ルートの[サブワークフロー入力](https://nodaro.ai/docs/nodes/automate/sub-workflow-input)の各コネクタが入力になり、[サブワークフロー出力](https://nodaro.ai/docs/nodes/automate/sub-workflow-output)の各コネクタが出力になります。各コネクタは、種類（テキスト、画像、動画、オーディオ、指定なし）に応じて色分けされています。

ルートとは、同じルート ID で組み合わされた、1 つのサブワークフロー入力と 1 つのサブワークフロー出力のことです。1 つのワークフローに複数のルートを持たせることができ、各ルートはワークフロー内の別々の経路になります。

## 設定
| 設定 | 説明 |
| --- | --- |
| **ラベル** | このワークフローでのノードの名前です。 |
| **空のサブワークフローを作成** | 入力ノードと出力ノードを 1 つずつ持つ新しい子ワークフローを、このワークフローの配下に作成し、編集できる状態で開きます。親ワークフローを保存するまでは、無効になっています。 |
| **ワークフロー** | 既存のワークフローを再利用します。一覧には、ルートが 1 つ以上あるすべてのワークフローが、ルートの数とともに表示されます。ほかのノードに属する子ワークフローは表示されません。 |
| **すべてのプロジェクト** | デフォルトではオフで、一覧には現在のプロジェクトだけが表示されます。オンにすると、すべてのプロジェクトのワークフローが表示されます。 |
| **ルート** | ワークフローに複数のルートがある場合に、使うルートを選びます。各ルートには、入力と出力の数が表示されます。 |
| **インターフェース** | 選んだルートの入力と出力です。内側のワークフローを変更した後は、**更新**で読み込み直します。 |
| **ワークフローを表示** | ページから離れずに、内側のワークフローを読み取り専用のビューアーで開きます。 |
| **ワークフローを開く** | ノードの展開アイコンと同じように、内側のワークフローを編集できる状態で開きます。 |
| **表示モード** | キャンバス上でのノードの見た目です。**コネクタ**では、入力、出力、ステータス、結果のプレビューが表示されます。 |

## 内側のワークフローをその場で編集する
ノードにある、**参照先のワークフローを編集**というラベルの展開アイコンをクリックするか、設定パネルで**ワークフローを開く**をクリックします。エディターに内側のワークフローが開き、上部のパンくずリストに、**ローンチ動画 › きれいな商品写真**のようなパスが表示されます。パンくずリストのどの部分をクリックしても、その階層に移動できます。最初のワークフローに戻ると、パンくずリストは消えます。

現在のワークフローに未保存の変更がある場合、エディターは内側のワークフローを開く前に、変更を保存するか破棄するかを確認します。

## 呼び出し可能なワークフローのルール
サブワークフロー入力ノードやサブワークフロー出力ノードを含むワークフローを保存すると、Nodaro は次の 3 つのルールを確認します。

- すべてのサブワークフロー入力に、同じルート ID を持つサブワークフロー出力があること。
- すべてのサブワークフロー出力に、コネクタが 1 つ以上あること。
- 2 つのサブワークフロー入力ノード、または 2 つのサブワークフロー出力ノードが、同じルート ID を共有していないこと。

ルールに違反する保存は拒否され、問題点がそれぞれ一覧で表示されます。

## 実行のしくみ
- **実行されるのはルートだけ**：ルートのサブワークフロー入力より下流に接続されたノードが実行されます。内側のワークフローにあるそれ以外のノードは実行されません。
- **最大 5 階層**：サブワークフローの中にサブワークフローを入れられます。入れ子は 5 階層までです。
- **ループは禁止**：ワークフローは、直接にもほかのワークフローを通じても、同じルートで自分自身を呼び出すことはできません。ただし、同じワークフローを別のルートで呼び出すことはできます。

## クレジット
サブワークフローノードは無料です。その中で実行される各ノードには、通常の料金がかかります。

## ヒント
- **入れ子は浅く保つ**：上限は 5 階層です。深く入れ子にしたワークフローは、デバッグが難しくなります。
- **使い回さないモジュールは空から作る**：**空のサブワークフローを作成**で作った子ワークフローは、その親ワークフロー専用のままで、プロジェクトのワークフロー一覧を散らかしません。
- **共有する部品には既存のワークフローを選ぶ**：通常のワークフローは一覧に残り、どの親ワークフローからも再利用できます。
- **変更後は更新する**：内側のワークフローでコネクタを追加、削除したり、種類を変えたりしたら、親ワークフローで**更新**をクリックします。
- **役割がわかる名前を付ける**：「きれいな商品写真」のようなラベルにすると、親ワークフローでのノードの役割が伝わります。
- **共有の代わりに公開する**：パイプラインを、バージョン管理されたノードとしてほかの人に提供するには、[**コンポーネント**（Component）](https://nodaro.ai/docs/nodes/automate/component)として公開します。

## Frequently asked questions

### ワークフローをサブワークフローとして使えるようにするにはどうすればよいですか？

そのワークフローにサブワークフロー入力とサブワークフロー出力を追加し、同じルートで組み合わせて、それぞれにコネクタを設定します。組み合わせが 1 つ以上あるワークフローは、サブワークフローノードの「ワークフロー」の一覧に表示されます。

### 「空のサブワークフローを作成」と、既存のワークフローを選ぶことの違いは何ですか？

「空のサブワークフローを作成」は、このノードに属する新しい子ワークフローを作ります。子ワークフローはプロジェクトのワークフロー一覧には表示されず、このノードからしか開けません。既存のワークフローは通常のワークフローのままで、ほかのどのワークフローからも再利用できます。

### サブワークフローは何階層まで入れ子にできますか？

最大 5 階層です。ワークフローは、直接にもほかのワークフローを通じても、同じルートで自分自身を呼び出すことはできません。ただし、別のルートであれば自分自身を呼び出せます。

### サブワークフローには、追加のクレジットがかかりますか？

いいえ。サブワークフローノード自体は無料です。料金がかかるのは中で実行されるノードの分だけで、料金は通常どおりです。また、実行されるのは、選んだルートがたどり着くノードだけです。

### 内側のワークフローを変更したのに、ノードに古いコネクタが表示されるのはなぜですか？

ノードが、ルートの入力と出力のコピーを保持しているためです。設定パネルの「インターフェース」の横にある「更新」をクリックすると、新しいコネクタが読み込まれます。
