Featured image of post 継承でフィルターを足すとクラスが掛け算に増える。Perlのログ解析ツールをDecoratorで組み替える全8回【目次】

継承でフィルターを足すとクラスが掛け算に増える。Perlのログ解析ツールをDecoratorで組み替える全8回【目次】

Perl と Moo でアクセスログ解析ツールを作りながら、継承でフィルターを足すとクラスが掛け算に増える問題に当たり、包んで重ねる Decorator パターンで組み替える全8回の連載の目次です。困りごとからも選べます。

Perl と Moo で、Web サーバーのアクセスログを解析するツールを作る全8回の連載です。1行ずつ読む、パースする、IP で絞る、404 も拾う。継承で機能を足していくと、組み合わせごとにクラスが増えて行き詰まります。そこで、機能を包んで重ねる Decorator パターンに組み替え、集計・アラート・設定ファイルからの組み立てまで仕上げます。

各回は前の回のコードに手を足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。

どこから読むか

  • 第1回 — 最初から順に作るなら。open と while を Moo のクラスに包むところから始まる。前提は Moo のクラス定義の基礎
  • 第4回 — 継承で機能を足すと何が困るのかを先に見たいなら。第3回までのクラスを使うが、話の筋は1回で追える
  • 第5回 — Decorator パターンの組み立て方だけ知りたいなら。Role と around で包んで重ねる。第2回の LogParser が前提

困りごとから探す

ログを読み込んで、項目ごとに扱える形にしたい

  • 第1回 — open と while をクラスに包み、1行ずつ返す
  • 第2回 — 文字列のログを名前付きキャプチャでハッシュにする

組み合わせごとにクラスが増えていく

  • 第3回 — 継承で IP フィルターを1つ足す。ここが出発点
  • 第4回 — IP と 404 の組み合わせごとにサブクラスが要る
  • 第5回 — 包んで重ねる形に組み替えて、組み合わせを自由にする

既存のクラスに触らずに機能を足したい

  • 第6回 — ログを流しながら件数や転送サイズを集計する
  • 第7回 — 404 が続いたら警告を出す

構成を変えるたびにコードを直している

  • 第8回 — JSON の設定ファイルからパイプラインを組み立てる

全話一覧

  1. ログを1行ずつ読み込んでみよう(LogReader)
  2. 正規表現でログをパースしよう(LogParser)
  3. IPアドレスでフィルタリングしよう(継承)
  4. 404エラーを検出しよう(継承の限界)
  5. Decoratorパターンで柔軟に機能追加しよう
  6. 統計集計Decoratorを追加しよう
  7. アラート通知Decoratorを追加しよう
  8. 設定ファイルでパイプラインを組み立てよう(完成)

前提知識

  • Perl の基本文法(open、while、正規表現、ハッシュリファレンス)。サブルーチンシグネチャは use experimental qw(signatures) で有効にして使う
  • Moo によるクラス定義の基礎(has、extends、with)
  • このシリーズは「Mooで覚えるオブジェクト指向プログラミング」シリーズの続編です。Moo が初めてなら、先にこちらを読むとスムーズに進みます
comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。