# セレクター

> 位置、範囲、ランダムなサンプル、ルール、名前を使って、リストから 1 つの項目や一部の項目を選びます。選んだ項目と残りを 2 つの出力に分けて送ります。無料です。

Source: https://nodaro.ai/ja/docs/nodes/automate/selector

**セレクター**（Selector）ノードは、リストから 1 つの項目、または複数の項目を選び出します。位置、範囲、ランダム、フィールドに対するルール、名前のいずれかで選び方を指定します。セレクターは、選んだ項目を**選択済み**出力に、それ以外のすべての項目を**残り**出力に送ります。すぐに実行され、モデルを呼び出さず、クレジットもかかりません。

- Found in: Automate › Lists & Batching
- Output: text
- API type: `selector`

## 使いどころ
- 同じ選択を複数のノードに渡すとき。複数の接続に同じ設定をする代わりに、セレクターを 1 つ使います。
- リストからランダムに項目を選び、後でシードを使って同じ選択を再現したいとき。
- `hero` という名前のキャラクターや、スコアが 15 以上のすべての項目など、フィールドが特定の値を持つ項目を選びたいとき。
- 選ばなかった項目を、**残り**を通して別の場所に送りたいとき。
- 別のノードから届く数値を使って、短いリストを循環させたいとき。

## クイックスタート
### ノードを追加する
キャンバス上で Tab を押し、**自動化 › リストとバッチ処理 › セレクター**を選びます。

### リストを接続する
リストを**リスト**入力に接続します。たとえば、[**リスト**（List）](https://nodaro.ai/docs/nodes/automate/list)、[**テキストを分割**（Split Text）](https://nodaro.ai/docs/nodes/automate/split-text)、[**リストをフィルター**（Filter List）](https://nodaro.ai/docs/nodes/automate/filter-list)、または出力をリストに設定した[**フィールドを抽出**（Extract Field）](https://nodaro.ai/docs/nodes/automate/extract-field)ノードから接続します。

### モードを選ぶ
設定パネルを開き、**モード**を選んで、そのモードのフィールドを入力します。各モードについては、以下で説明します。

### 出力を接続して実行する
**選択済み**を次のノードに接続します。ほかの項目も必要な場合は、**残り**を別の分岐に接続します。実行後は、パネルの**前回の実行**に、「選択 2 件 · 残り 3 件」のように件数が表示されます。

Workflow: セレクターが 10 個のプロンプトのリストからランダムに 3 つを選び、画像生成が、選ばれたプロンプトごとに 1 回ずつ実行されます。

- リスト → セレクター (リスト)
- セレクター → 画像生成 (選択済み · 個別)

## 入力と出力
| 入力／出力 | 受け取るもの／送るもの | 説明 |
| --- | --- | --- |
| **リスト** | テキスト、画像、動画、オーディオ、JSON の項目のリスト | 選ぶ元になるリストです。複数のノードを接続した場合は、接続した順番にリストがつなげられます。 |
| **選択済み** | リスト | モードが選んだ項目です。1 つの項目を選ぶモードでは、項目が 1 つのリストが送られます。 |
| **残り** | リスト | 選ばれなかったすべての項目を、元の順番で並べたものです。 |

**選択済み**と**残り**を合わせると、常にすべての入力項目がそろい、両方に入る項目はありません。セレクターは値ではなく位置で分けるので、重複した項目も正しい側に振り分けられます。たとえば、`a, b, a, c` に対して 2〜3 の範囲を指定すると、**選択済み**は `b, a`、**残り**は `a, c` になります。

## モード
| モード | フィールド | 選ぶ数 | 例 |
| --- | --- | --- | --- |
| **項目（単一のインデックス）** | **インデックス** | 1 個 | `a, b, c, d` でインデックスを `last-1` にすると、`c` が選ばれます。 |
| **範囲（開始／終了／ステップ）** | **開始**、**終了**、**ステップ** | 複数 | `a, b, c, d, e` で `2` から `4` までにすると、`b, c, d` が選ばれます。 |
| **リスト（カンマ区切りの式）** | **式** | 複数 | `a, b, c, d, e` で式を `1, 3, 5` にすると、`a, c, e` が選ばれます。 |
| **ランダム（シード指定）** | **シード（任意）**、**個数** | **個数**で指定した数 | `a, b, c, d` でシードを `42`、個数を 2 にすると、常に同じ 2 つの項目が選ばれます。 |
| **剰余（インデックスで循環）** | **除数** | 1 個 | `a, b, c` で除数を `5` にすると、`c` が選ばれます。 |
| **条件（フィルター）** | **フィールド**、**演算子**、**値**、**一致する項目**、**大文字と小文字を区別** | 1 個、または一致したすべて | `score` フィールドを持つ項目で、`score` が `15` 以上、**一致する項目**を**すべて**にすると、スコアが 15 以上のすべての項目が選ばれます。 |
| **名前付きキー（検索）** | **フィールド**、**値** | 0 個か 1 個 | `name` フィールドを持つキャラクターで、`name` = `hero` とすると、hero が選ばれます。 |

### 項目
**インデックス**は 1 から数えます。`3` のような数値を書くか、`last`、`last-1`、`last-2` などで末尾から数えます。リストの末尾を超えるインデックスでは、最も近い有効な項目が使われます。読み取れないインデックスでは最初の項目が使われ、ノードに「Invalid index expression — used first item」という警告が表示されます。

### 範囲
**開始**と**終了**はどちらも範囲に含まれ、1 から数えます。**ステップ**を負の値にすると、逆向きに進みます。たとえば、`last` から `1` までステップ `-1` にすると、リスト全体が逆順になります。ステップ `0` は `1` として扱われます。前向きに進む範囲に負のステップを指定した場合や、後ろ向きに進む範囲に正のステップを指定した場合は、何も選ばれません。

### リスト
**式**では、単一の位置と範囲をカンマで区切って組み合わせます。たとえば、`1, 3..5, last` のように書きます。位置は書いた順番のまま保たれ、2 回書いた位置は 2 回選ばれます。ほかにも、`1..5`、1 つおきに項目を選ぶ `1..10:2`、最後の項目以外をすべて選ぶ `1..last-1` などの例があります。読み取れない部分があると、ノードはすべての項目を選びます。

### ランダム
**個数**は抽出する項目の数で、デフォルトは 1 です。同じ項目が 2 回以上選ばれることはなく、リストより大きい個数を指定すると、リスト全体が選ばれます。**シード**を指定すると、同じシードと同じリストからは、常に同じ項目が選ばれます。シードを指定しない場合は、実行のたびに抽出し直します。

### 剰余
剰余は、**除数**をリストの長さで割った余りを使って、1 つの項目を選びます。余りは、0 から数えた位置です。たとえば、3 項目のリストで除数を `5` にすると、余りは 2 になり、3 番目の項目が選ばれます。別のノードから届く、変化する数値を使って、短いリストを循環させるときに使います。除数が数値でない場合は、最初の項目が使われ、警告が表示されます。

### 条件
条件は、**フィールド**がテストに合格した項目を残します。項目全体をテストするには、**フィールド**を空欄にします。**演算子**は、**等しい**、**等しくない**、**より大きい**、**より小さい**、**以上**、**以下**、**含む**、**含まない**、**で始まる**、**で終わる**、**正規表現に一致**、**存在する**、**存在しない**のいずれかです。**一致する項目**を**最初**にすると、セレクターは最初に一致した項目だけを選びます。**すべて**にすると、一致したすべての項目を選びます。何にも一致しないルールでは、すべての項目が**残り**に送られます。

### 名前付きキー
名前付きキーは、名前で検索するための、条件の簡略版です。**フィールド**が**値**と等しい最初の項目を選びます。一致するものがない場合、**選択済み**は空になり、すべての項目が**残り**に送られます。

## 別のノードの値を使う
4 つのフィールドでは、`{CharacterName}` のように、別のノードのラベルを波かっこで囲んで指定できます。セレクターの実行時に、波かっこの部分がそのノードの値に置き換わります。

| フィールド | モード | 主な用途 |
| --- | --- | --- |
| **除数** | 剰余 | 別のノードの数値を使って、リストを循環させます。 |
| **値** | 条件 | 各項目を、別のノードの出力と比べます。 |
| **値** | 名前付きキー | `{CharacterName}` など、別のノードが指定した名前の項目を検索します。 |
| **シード** | ランダム | `{Project}` など、別のノードの値によって、ランダムな選択が決まるようにします。 |

それ以外のフィールドは、入力したとおりに読み取られます。詳しくは[プロンプト変数](https://nodaro.ai/docs/concepts/prompt-variables)を読んでください。

## 設定が間違っている場合
セレクターが、設定を理由にワークフローを止めることはありません。問題ごとに、安全な結果が決まっています。

| 状況 | 結果 |
| --- | --- |
| リストが接続されていない、またはリストが空 | **選択済み**と**残り**は、どちらも空になります。ノードはエラーなしで完了します。 |
| 読み取れないインデックス | 最初の項目。ノードに警告が表示されます。 |
| 末尾を超えるインデックス | 最も近い有効な項目。 |
| 数値でない除数 | 最初の項目。ノードに警告が表示されます。 |
| リストより大きい個数 | リスト全体。 |
| 何にも一致しない条件、または名前付きキー | **選択済み**は空になり、**残り**にすべての項目が入ります。 |

ノードが失敗するのは、予期しないエラーが起きたときだけです。その場合は、エラーメッセージが表示されます。

## セレクターと接続の設定の使い分け
どの接続でも、**項目**モードや、**個別**と**一括**の範囲タブとリストタブを使って、項目を選べます。接続の設定とセレクターは、同じ位置のルールを使います。

| 接続の設定を使う場合 | セレクターノードを使う場合 |
| --- | --- |
| 1 つの次のノードに、位置、範囲、リストによる簡単な選択が必要なとき | 同じ選択を、複数の次のノードに渡すとき |
| 選択をキャンバス上に表示したくないとき | ラベル付きのノードとして表示するほど、選択が重要なとき |
| 項目、範囲、リストで十分なとき | ランダム、剰余、条件、名前付きキーが必要なとき |
| 出力が 1 つで十分なとき | ほかの項目も**残り**で受け取りたいとき |

すべての接続モードについては、[リストとバッチ処理](https://nodaro.ai/docs/concepts/lists-and-batching)を読んでください。

## クレジット
セレクターは、どのエディションでも無料です。

## ヒント
- **選んだ項目ごとに次のノードを実行する**：**選択済み**は常にリストを送ります。選んだ項目ごとに次のノードを 1 回ずつ実行するには、**選択済み**からの接続を**個別**にします。
- **件数を確認する**：**前回の実行**には、**選択済み**と**残り**に送られた項目の数が表示されます。ルールを試すには、これが最も手早い方法です。
- **多くを残すならフィルター、1 つを選ぶならセレクター**：複数の条件に一致するすべての項目を残すには、[リストをフィルター](https://nodaro.ai/docs/nodes/automate/filter-list)を使います。1 つの項目や一部分を選ぶには、セレクターを使います。

## Frequently asked questions

### セレクターノードと、接続の「項目」モードの違いは何ですか？

接続の「項目」、範囲、リストによる選択は、1 つの次のノード向けの手早い選択で、キャンバス上には表示されません。セレクターノードは、選択をラベル付きのノードとして表示し、複数のノードに渡せます。また、選ばれなかった項目を「残り」出力に送り、ランダム、剰余、条件、名前付きキーのモードも使えます。

### ランダムな選択を、まったく同じように再現できますか？

はい。「シード」を入力すると、同じシードと同じリストからは、常に同じ項目が選ばれます。実行のたびに新しくランダムに選ぶには、シードを空欄にします。

### セレクターの設定が間違っていると、どうなりますか？

ワークフローは止まらずに続きます。無効なインデックスでは最初の項目が使われ、警告が表示されます。末尾を超えるインデックスでは最も近い項目が使われ、何にも一致しないルールでは、すべての項目が「残り」に送られます。

### セレクターノードにクレジットはかかりますか？

いいえ。セレクターは、どのエディションでも無料です。すぐに実行され、モデルを呼び出すことはありません。

### 選んだ項目ごとに、次のノードを 1 回ずつ実行するには、どうすればよいですか？

「選択済み」出力からの接続を「個別」にします。すると、次のノードは選ばれた項目ごとに 1 回ずつ実行されます。
