Featured image of post 【目次】Perl/Mooでテキスト処理パイプライン(全6回)

【目次】Perl/Mooでテキスト処理パイプライン(全6回)

Perl と Moo でテキスト処理パイプラインを作りながら、Chain of Responsibility と Decorator を学ぶ全6回の連載。目次を兼ねた案内板で、読む順と各回の内容をまとめています。

Unix の cat | grep | sort | uniq のように、小さな処理を繋いで大きな処理にする。この連載では、その仕組みを Perl と Moo のオブジェクト指向で作ります。1つ目のフィルターから始めて、機能を重ねる、組み立てを楽にする、集計する、実際のログを解析する、外から部品を足せるようにする、と回を追って広げていきます。途中で使う設計に、GoF の Chain of Responsibility と Decorator という名前がつきます。

このページは目次を兼ねた案内板です。通して作るなら「全6回」を順に、特定の困りごとがあるなら「困りごとから探す」から選んでください。

対象読者

「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方を想定しています。

読み方

  • 通して読む: 第1回から順に。コードは前の回の続きで、各回の終わりに次の回で直す問題が示されます
  • ログ解析の実例だけ見たい: 第5回から読めます。使う部品は前の回で作ったものなので、分からなければ戻ってください
  • 部品を後から足せる作りにしたい: 第6回が単独でも要点をつかめます

全6回

  1. cat | grep を Perl で再現したい。正規表現フィルターを連鎖できる形で作る【Moo】
  2. ソートと重複排除を足したいが、既存のフィルターは触りたくない。基底クラスで重ねる【Decorator】
  3. フィルターを逆順に作る手間をなくしたい。メソッドチェーンで組み立てるビルダー【Moo】
  4. パイプラインの最後に行数と統計を出したい。集約処理のフィルターを足す【Moo】
  5. アクセスログから Top 10 の URL を出したい。作ったフィルターを組み合わせる【Perl】
  6. フィルターを足すたびに本体を直したくない。プラグインで外から読み込む【OCP】

困りごとから探す

処理を繋いで、1つずつ差し替えられるようにしたい

  • 第1回 — 次のフィルターへ処理を渡す、連鎖の最小形
  • 第2回 — 基底クラスを置いて、ソートや重複排除を重ねる

組み立てるコードが読みにくい

  • 第3回 — 実行順と逆に書く必要をなくし、メソッドチェーンで組む

行を絞るだけでなく、集計もしたい

  • 第4回 — 行数と統計を出し、集計に混ざる値を取り除く

実際のログを解析したい

  • 第5回 — Apache のアクセスログから、URL・ステータス・IP 別に集計する

本体を変えずに機能を足せるようにしたい

  • 第6回 — 自作のフィルターを外から読み込むプラグイン機構

関連シリーズ

他のデザインパターンシリーズも参考にどうぞ。

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。