【パイプアンドフィルタ】

パイプ&フィルタ とは?

最終更新:
💡 データを流れ作業で加工する「工場の製造ライン」

データを処理する部品(フィルタ)を、出力を次の入力へ渡す接続(パイプ)でつなぐ設計パターン。処理を分けて組み合わせられるが、接続するデータの形式や処理順序をそろえる必要がある。

📌 このページのポイント
処理する部品を、データの受け渡しでつなぐ ETLを段階に分ける例 🗃️ 取り出す Extract 🧹 整える Transform 🗄️ 保存する Load 矢印の接続:出力を次の入力へ 各段階の形式と、処理する順序を合わせる Unix系シェルの例 grep ERROR access.log | sort | uniq -c 抽出 → 並べ替え → 同じ行の件数 分割だけで並列化・高速化が保証されるわけではない
上はETLをパイプ&フィルタで構成する例で、矢印は出力から入力への受け渡し。下はテキストログ中のERRORを含む行を取り出し、同じ行を隣接させて件数を数える例。再試行や重複への対応は別途設計する。
ひよこ ひよこ
パイプって、水道のパイプのこと?
ペンギン先生 ペンギン先生
データの通り道を表す名前だよ。ある処理の出力を、次の処理の入力へつなぐ。Unix系のシェルなら、縦棒の「|」でコマンドの標準出力を次のコマンドの標準入力につなげるのが身近な例だね。
ひよこ ひよこ
フィルタは何をするの?
ペンギン先生 ペンギン先生
一つの役割に分けた処理を担当するよ。たとえばログからERRORを含む行を抽出する、行を並べ替える、同じ行の件数を数える、といった部品をつなげる。不要なものを除く処理だけがフィルタではないんだ。
ひよこ ひよこ
部品なら自由に順番を変えられる?
ペンギン先生 ペンギン先生
入力と出力の形式が合い、順序を変えても目的に合う結果になるか確認するよ。たとえばuniq -cは隣り合う同じ行を数えるので、離れた同じ行もまとめたいなら先にsortする。部品が独立していても、順序が無関係とは限らないんだ。
ひよこ ひよこ
全部同時に動かせば速くなる?
ペンギン先生 ペンギン先生
前の結果が必要な同じデータの処理順序は守るよ。異なるデータを別の段階で処理したり、遅い段階の実行数を増やしたりできる場合はある。ただし、処理の性質や状態の持ち方に左右され、分割しただけで並列化や高速化が保証されるわけではないんだ。
ひよこ ひよこ
どんな処理に応用できるの?
ペンギン先生 ペンギン先生
取り出す・整える・保存するというETLや、ログ処理などを段階に分ける設計に使えるよ。途中で失敗したときの扱いも必要だね。再試行で同じデータが届いても重複して保存しないようにするなど、処理全体の動作も確認するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「パイプ&フィルタ」って出てきたら「小さな処理を、データの受け渡しでつなぐ設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Pipe and Filter」 = データの通り道と処理する部品
💬 Pipeはデータを渡す接続、Filterはデータを加工する部品を表すよ。ここでのFilterは不要なデータを取り除くだけでなく、変換や集計などを担当することもあるんだ。

参考資料

← 用語集にもどる