Unix の cat | grep | sort | uniq のように、小さな処理を繋いで大きな処理にする。この連載では、その仕組みを Perl と Moo のオブジェクト指向で作ります。1つ目のフィルターから始めて、機能を重ねる、組み立てを楽にする、集計する、実際のログを解析する、外から部品を足せるようにする、と回を追って広げていきます。途中で使う設計に、GoF の Chain of Responsibility と Decorator という名前がつきます。
このページは目次を兼ねた案内板です。通して作るなら「全6回」を順に、特定の困りごとがあるなら「困りごとから探す」から選んでください。
対象読者
「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方を想定しています。
読み方
- 通して読む: 第1回から順に。コードは前の回の続きで、各回の終わりに次の回で直す問題が示されます
- ログ解析の実例だけ見たい: 第5回から読めます。使う部品は前の回で作ったものなので、分からなければ戻ってください
- 部品を後から足せる作りにしたい: 第6回が単独でも要点をつかめます
全6回
- cat | grep を Perl で再現したい。正規表現フィルターを連鎖できる形で作る【Moo】
- ソートと重複排除を足したいが、既存のフィルターは触りたくない。基底クラスで重ねる【Decorator】
- フィルターを逆順に作る手間をなくしたい。メソッドチェーンで組み立てるビルダー【Moo】
- パイプラインの最後に行数と統計を出したい。集約処理のフィルターを足す【Moo】
- アクセスログから Top 10 の URL を出したい。作ったフィルターを組み合わせる【Perl】
- フィルターを足すたびに本体を直したくない。プラグインで外から読み込む【OCP】
困りごとから探す
処理を繋いで、1つずつ差し替えられるようにしたい
組み立てるコードが読みにくい
- 第3回 — 実行順と逆に書く必要をなくし、メソッドチェーンで組む
行を絞るだけでなく、集計もしたい
- 第4回 — 行数と統計を出し、集計に混ざる値を取り除く
実際のログを解析したい
- 第5回 — Apache のアクセスログから、URL・ステータス・IP 別に集計する
本体を変えずに機能を足せるようにしたい
- 第6回 — 自作のフィルターを外から読み込むプラグイン機構
関連シリーズ
他のデザインパターンシリーズも参考にどうぞ。
