ガイド

Difyのリスト処理完全ガイド:配列のフィルタリング・ソート・イテレーション連携まで徹底解説

室谷東吾
監修者室谷東吾(@0x__tom

株式会社MYUUU 代表取締役 / 日本最大級AIコミュニティ「.AI」創設者(累計2,000名超)/ セプテーニ・ホールディングス(電通グループ)と資本業務提携 / 著書「お金を使わず、AIを働かせる『Dify』活用」(ぱる出版、3刷)/ Xフォロワー約2万人

テキトー教師
監修者テキトー教師(@tekitoo_T_cher

.AI 認定講師 / 教育×AIの専門家 / 累計300名以上にAI活用を指導 / 「テキトーに学ぶ」がモットーの実践派講師 / Xアカウント

Difyのリスト処理完全ガイド:配列のフィルタリング・ソート・イテレーション連携まで徹底解説

Difyのリスト処理(リスト処理ノード)とは?配列データを扱う基本

DifyのリストOperatorノード(フィルター・ソート・先頭N件)の処理フロー図解

室谷室谷
今回はDifyのリスト処理を深掘りしていきましょう。.AI(ドットエーアイ)のコミュニティでも「配列変数をどう扱えばいいかわからない」という声がけっこう多くて・・・
テキトー教師テキトー教師
ですよね。講座でもワークフローを教えるときに、一番つまずきポイントになるのがここです。

「変数に入ってるはずのデータが使えない」って相談が来るんですが、大抵は配列のまま渡そうとしているパターンなんですよ。
室谷室谷
LLMノードって配列を直接受け取れないんですよね。単一の値しか処理できないから、配列を渡すと「なんか動かない」ってなる。
テキトー教師テキトー教師
そうなんです。たとえばユーザーが複数のファイルをアップロードしたとき、Difyは全部まとめて Array[File] という配列変数に入れるんですが、そのままLLMに渡しても読んでくれない。

ここでリスト処理ノードが活躍するわけです。
室谷室谷
一言で言うと、「配列から必要なものを取り出して、後続ノードが使える形に整える」のがリスト処理ノードの役割ですね。
テキトー教師テキトー教師
整理すると、リスト処理ノードができることは3つです。フィルタリング(条件に合う要素だけを抽出)、ソート(昇順・降順で並び替え)、先頭N件の取得(最初のN件、または最初・最後の1件)。

この3つを組み合わせて配列を整形します。
室谷室谷
対応しているデータ型は Array[String]Array[Number]Array[File]Array[Boolean] の4種類です。公式ドキュメント()にも記載されていますが、特にファイル処理のシーンで使うことが多いですね。

リスト処理ノードの出力変数

テキトー教師テキトー教師
出力変数も覚えておくと便利です。3種類あって、result(フィルター・ソート後の配列全体)、first_record(配列の最初の1件)、last_record(配列の最後の1件)です。
室谷室谷
first_recordlast_record は単一の値として取り出せるので、そのままLLMに渡せるのが便利なんですよね。配列のまま渡すんじゃなくて、1件だけ取り出してから次のノードへ、という流れができる。
テキトー教師テキトー教師
この概念を最初に説明すると、受講生さんが「なるほど、そういう構造なのか」ってすごく腑に落ちる顔をします(笑)。配列のまま使おうとしていたのが、ここで理解が深まるんですよ。

フィルター条件の設定方法

DifyのリストOperatorノード設定画面:フィルター条件「aで始まる」の設定例(DifyのUIより)

室谷室谷
フィルタリングの話をしましょう。配列の中から特定の条件に合う要素だけを取り出す機能です。

文字列なら「aで始まる」「特定の文字を含む」、数値なら「10以上」といった条件が設定できます。
テキトー教師テキトー教師
ファイルの場合はさらに細かくて、ファイルの種類(image、document、audio、video)、拡張子(.pdf、.jpg など)、MIMEタイプ、ファイルサイズ、ファイル名、アップロード方法(ローカルアップロードかURL)で絞り込めます。
室谷室谷
MYUUUで構築したワークフローでも、ユーザーが画像とPDFを混在してアップロードするケースがあって。リスト処理で「type = image」のフィルターをかけてビジョン対応LLMに送り、「type = document」でフィルターして文書抽出ノードに送る、という構成にしています。
テキトー教師テキトー教師
それがまさに公式ドキュメントでも紹介されているベストプラクティスですよね。混在ファイルを種類別に振り分ける「インテリジェントルーター」としての使い方。
室谷室谷
フィルター条件は複数組み合わせることもできます。「画像ファイルで、かつファイルサイズが5MB以下」みたいな複合条件も設定可能です。

以下に代表的なフィルター例をまとめます。

入力配列フィルター条件出力
["apple", "banana", "apricot"]「aで始まる」["apple", "apricot"]
["東京", "大阪", "京都"]「京を含む」["東京", "京都"]
[5, 12, 7, 20]「10以上」[12, 20]
画像+PDFの混在ファイルtype = image画像ファイルのみ
画像+PDFの混在ファイルtype = document文書ファイルのみ
テキトー教師テキトー教師
この表を見ると、文字列・数値・ファイルそれぞれで使い方のイメージが湧きやすいと思います。実際の講座では文字列の例から始めて、ファイルの例に進むと理解しやすいですね。

ソート(並べ替え)の設定方法

DifyのリストOperatorノード設定画面:ASC/DESCのソート設定(DifyのUIより)

室谷室谷
ソートはシンプルです。ASC(昇順)かDESC(降順)を選ぶだけ。

数値なら小さい順・大きい順、文字列ならアルファベット順・逆順で並び替えができます。
テキトー教師テキトー教師
よく使うのが「降順に並べて先頭N件を取る」という組み合わせです。たとえば、数値スコアのリストを降順にソートして上位3件だけ取る、という使い方ができます。
入力配列ソート設定出力
[8, 3, 15]ASC(昇順)[3, 8, 15]
[8, 3, 15]DESC(降順)[15, 8, 3]
["b", "d", "a", "c"]ASC["a", "b", "c", "d"]
["b", "d", "a", "c"]DESC["d", "c", "b", "a"]
室谷室谷
ファイルの場合はファイル名の順やサイズの順でソートもできますね。「最新のファイルを先頭に」とか「サイズの小さい順に処理」といったユースケースで活用できます。
テキトー教師テキトー教師
last_record は「ソート後の最後の1件」を取り出すので、昇順ソートと組み合わせれば「最大値」、降順ソートと組み合わせれば「最小値」を取り出すこともできます。地味だけど便利な使い方ですよね。

先頭N件の取得(トップN)

DifyのリストOperatorノード:トップN=2とDESCソートを組み合わせた設定画面(DifyのUIより)

室谷室谷
先頭N件の取得は1〜20の範囲で設定できます。フィルタリングとソートの後に適用されるので、「条件に合うものを並び替えた上で上位N件だけ使う」という処理ができます。
テキトー教師テキトー教師
このトップN機能、単独でも使えるのがポイントです。フィルターもソートも使わず、「とにかく先頭5件だけ取り出す」という使い方もできます。

大きな配列から一部だけを後続処理に渡したいときに便利ですね。
室谷室谷
たとえばウェブ検索の結果が20件返ってきたとして、全部LLMで処理すると重いし、コストもかかる。上位5件だけ使うことで効率的なワークフローを作れるというのは実務的にも重要な観点です。
テキトー教師テキトー教師
先頭N件を使ったときの出力変数の挙動は次の通りです。
  • result変数: フィルター→ソート→N件取得、の全処理結果(配列)
  • first_record変数: 処理後の配列の最初の1件(単一値)
  • last_record変数: 処理後の配列の最後の1件(単一値)
室谷室谷
first_recordlast_record は単一値なので、LLMや他のノードに直接渡せます。ここが実務で一番使う出力変数ですね。

イテレーション(繰り返し処理)との連携

DifyのイテレーションノードでLLMを使って各要素を処理する設定画面(DifyのUIより)

テキトー教師テキトー教師
リスト処理と切っても切れないのがイテレーションノードとの連携です。リスト処理でフィルタリング・整形した配列を、イテレーションに渡して1件ずつ処理させる、という組み合わせが非常に強力です。
室谷室谷
コードを書かずに「全部のファイルをLLMで処理する」みたいな繰り返し処理ができるのは、Difyの大きな強みですよね。プログラミングで言うfor文を、ドラッグ&ドロップで作れる。
テキトー教師テキトー教師
イテレーションノードの3つの基本要素を整理すると、入力リスト(何を処理するか)、繰り返したい処理(LLMノードや変換処理など)、処理結果のまとめ(新しいリストとして出力)です。
室谷室谷
実際の使用例を出すと、「名前のリスト ["田中", "佐藤", "井上"] に対してLLMで紹介文を1件ずつ生成し、3件分の紹介文リストを作る」という処理ですね。イテレーション内のLLMノードでは {{item}} という変数で各要素を参照できます。
テキトー教師テキトー教師
この {{item}} の使い方を覚えると、ほぼ全てのイテレーション処理ができるようになります。LLMに「{{item}} について〇〇してください」と指示するだけで動くのが直感的で良いですね。

リスト処理 + イテレーションの典型的なフロー

1. ファイルアップロード(Array[File]が作成される)
2. リスト処理ノード(type = document でフィルタリング)
3. イテレーションノード(各文書ファイルを1件ずつ処理)
   └ 文書抽出ノード → LLMノード(要約生成)
4. 変数集約ノード(複数の要約をまとめる)
5. 回答ノード(ユーザーに返却)
室谷室谷
このフローを一度作ると、「AIが複数ドキュメントを全部読んで要約してくれる」みたいなアプリが実現できます。MYUUUのクライアント向けに作ったワークフローでもこのパターンをよく使っています。
テキトー教師テキトー教師
受講生さんが最初にこれを動かせたときの達成感がすごいですよ(笑)。「手動でやってた作業が自動化できた」という感動がひとしおなんですよね。

変数代入ノードでリストに要素を追加する

室谷室谷
リストに要素を追加する処理も覚えておくと便利です。これは「変数代入ノード」を使います。
テキトー教師テキトー教師
変数代入ノードで「操作: append(追加)」を選ぶと、既存の配列変数に新しい要素を追加できます。「上書き(overwrite)」と間違えやすいので注意が必要ですが(笑)。
室谷室谷
チャットフローで会話履歴を配列で管理したいとか、イテレーションの結果を別の配列に順番に追記していく、といった処理で活用できます。変数代入ノードとリスト処理ノードは連携させることが多いですね。
テキトー教師テキトー教師
具体的な手順を書くと、まず会話変数で Array[String] 型の変数を作成し、変数代入ノードで「操作: append」を選び、追加する値を設定するだけです。Dify上の配列操作はこれが基本になります。

リスト処理のユースケース

室谷室谷
実務で使えるユースケースをいくつか整理しておきましょう。

ユースケース1:混在ファイルの自動振り分け

テキトー教師テキトー教師
「ユーザーが画像もPDFも一緒にアップロードした場合、自動で振り分けてそれぞれ適切に処理する」という使い方です。リスト処理ノードを2つ並べるだけで実装できます。
室谷室谷
1つ目は type = image でフィルタリングしてビジョンLLMへ、2つ目は type = document でフィルタリングして文書抽出ノードへ。最後に変数集約ノードで結果をまとめてユーザーに返します。

ユーザーは「何でも一緒にアップロードすればAIが全部処理してくれる」という体験ができる。

ユースケース2:スコアリング結果から上位N件を選ぶ

テキトー教師テキトー教師
「複数の候補をLLMでスコアリングして、上位3件だけを次の処理に回す」という使い方もあります。RAGの精度改善でも使われるパターンです。
室谷室谷
検索でヒットした文書を関連度でスコアリングして、スコアの高い上位N件だけをLLMに渡すことで、コンテキストの無駄を減らしつつ精度を上げる。「情報を絞ってからLLMに渡す」という設計思想は、Difyを使いこなす上でとても重要です。

ユースケース3:営業リストの自動処理

室谷室谷
著書で紹介した「Dify×営業DX」でも配列処理は重要な役割を果たしています。企業リストをDifyに入力して、リスト処理で絞り込み、イテレーションで1社ずつリサーチさせる、という流れです。
テキトー教師テキトー教師
このツイートに書かれているように、Difyだけで営業リスト作成から商談獲得まで完結できるのは、ワークフローの配列処理が使いこなせているからですよね。リスト処理をマスターすることで、Difyでできることの幅が一気に広がります。

よくある質問(FAQ)

室谷室谷
リスト処理で詰まりやすいポイントをQ&Aでまとめておきましょう。
テキトー教師テキトー教師
コミュニティのメンバーさんからよく来る質問を中心に答えます。

Q. プログラミング経験がなくてもリスト処理は使えますか?

テキトー教師テキトー教師
使えます。Difyはコードなしで画面操作だけでリスト処理が設定できます。

「for文を書く」のではなく「イテレーションノードをドラッグする」イメージです。

Q. フィルター条件を複数設定した場合、AND条件ですか?OR条件ですか?

室谷室谷
複数のフィルター条件はAND条件として適用されます。「画像ファイルで、かつサイズが5MB以下」といった複合条件で絞り込めます。

Q. first_record はいつ使いますか?

テキトー教師テキトー教師
「配列の中で最も〇〇なもの1件を取り出してLLMで処理したい」というケースで使います。たとえば「最もスコアが高い文書1件だけを詳しく分析する」といった場面です。

Q. リスト処理でエラーが出た場合、何を確認すべきですか?

室谷室谷
まず入力変数のデータ型を確認してください。リスト処理ノードは Array[String]Array[Number]Array[File]Array[Boolean] の4型しか受け付けません。

String型の変数をそのまま渡すとエラーになります。
テキトー教師テキトー教師
ファイルのtypeフィルターで「Image」(大文字)と書いてしまう人もいますが、正しくは「image」(小文字)です。こういった細かいところで詰まることがありますね。

まとめ:Difyのリスト処理でワークフローの幅が広がる

室谷室谷
今回はDifyのリスト処理について解説しました。配列変数を扱う上で欠かせない機能で、ここを理解すると作れるワークフローのバリエーションが一気に増えます。
テキトー教師テキトー教師
まとめると、リスト処理ノードで覚えるべきポイントは3つです。
  1. フィルタリングで「条件に合う要素だけを取り出す」
  2. ソートで「昇順・降順に並べ替える」
  3. 先頭N件取得で「上位N件に絞る」
室谷室谷
出力変数の first_recordlast_record を使えば、配列から単一値を取り出してLLMに渡せます。イテレーションノードと組み合わせることで、「リストの全要素を1件ずつ自動処理する」という強力な自動化が実現できます。
テキトー教師テキトー教師
Difyのリスト処理ノードの公式ドキュメントはで確認できます。ぜひ実際に触りながら使い方を身につけていってください。
室谷室谷
著書(、ぱる出版)でもワークフロー設計について詳しく解説しています。Difyを実務で使いたい方はぜひ手に取ってみてください。

出典

.AI TIMES一覧に戻る