パイプとフィルタ
データの流れに対する一連の処理を、独立した小さな処理(フィルタ)に分け、それらをパイプでつないで段階的に処理するアーキテクチャパターン。処理の追加や削除、並べ替えがしやすい。
イマシルちゃんの解説
工場のベルトコンベアを想像してみて。
材料が流れてきて、「切る」「色を塗る」「箱に詰める」って、それぞれの係が順番に仕事をするよね。
パイプとフィルタは、データをそんなふうに流して処理する作り方なんだ。
係(フィルタ)を足したり、入れ替えたりするのも簡単なんだよ!
より深い解説
定義
パイプとフィルタは、POSAで紹介されたアーキテクチャパターンの1つで、データストリーム(データの流れ)を処理するシステムの構造を定める。処理を段階ごとに独立したフィルタに分け、フィルタの出力を次のフィルタの入力へパイプでつなぐ。
構成要素
| 要素 | 役割 |
|---|---|
| データソース | 処理するデータを供給する |
| フィルタ | データを受け取り、変換、選別、加工などを1つ行って、次へ渡す |
| パイプ | フィルタとフィルタをつなぎ、データを受け渡す |
| データシンク | 最終的な結果を受け取る |
利点と欠点
| 利点 | 欠点 |
|---|---|
| フィルタを追加・削除・入れ替えするだけで、処理の流れを変えられる | フィルタ間でデータの形式をそろえる必要がある |
| フィルタを別のシステムでも再利用できる | 全体で共有する状態を扱いにくい |
| 独立したフィルタを並行して動かせる | データの受渡しの手間がかかる |
例
- UNIXのシェル:
cat access.log | grep 404 | sort | uniq -cのように、コマンド(フィルタ)を「|」(パイプ)でつないで処理する - コンパイラ:字句解析、構文解析、意味解析、コード生成と、段階的に処理する
- データの加工処理:取込み、変換、集計を段階に分けて行う処理(ETLなど)
POSAのほかのパターンとの見分け方
「データストリームに対する一連の処理」「段階的に実施する」「追加又は削除できるように分割」といった言葉があれば、パイプとフィルタである。