Perl と Moo で、Web サーバーのアクセスログを解析するツールを作る全8回の連載です。1行ずつ読む、パースする、IP で絞る、404 も拾う。継承で機能を足していくと、組み合わせごとにクラスが増えて行き詰まります。そこで、機能を包んで重ねる Decorator パターンに組み替え、集計・アラート・設定ファイルからの組み立てまで仕上げます。
各回は前の回のコードに手を足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。
どこから読むか
- 第1回 — 最初から順に作るなら。open と while を Moo のクラスに包むところから始まる。前提は Moo のクラス定義の基礎
- 第4回 — 継承で機能を足すと何が困るのかを先に見たいなら。第3回までのクラスを使うが、話の筋は1回で追える
- 第5回 — Decorator パターンの組み立て方だけ知りたいなら。Role と around で包んで重ねる。第2回の LogParser が前提
困りごとから探す
ログを読み込んで、項目ごとに扱える形にしたい
組み合わせごとにクラスが増えていく
既存のクラスに触らずに機能を足したい
構成を変えるたびにコードを直している
- 第8回 — JSON の設定ファイルからパイプラインを組み立てる
全話一覧
- ログを1行ずつ読み込んでみよう(LogReader)
- 正規表現でログをパースしよう(LogParser)
- IPアドレスでフィルタリングしよう(継承)
- 404エラーを検出しよう(継承の限界)
- Decoratorパターンで柔軟に機能追加しよう
- 統計集計Decoratorを追加しよう
- アラート通知Decoratorを追加しよう
- 設定ファイルでパイプラインを組み立てよう(完成)
前提知識
- Perl の基本文法(open、while、正規表現、ハッシュリファレンス)。サブルーチンシグネチャは
use experimental qw(signatures)で有効にして使う - Moo によるクラス定義の基礎(has、extends、with)
- このシリーズは「Mooで覚えるオブジェクト指向プログラミング」シリーズの続編です。Moo が初めてなら、先にこちらを読むとスムーズに進みます
