バックアップを取りたくて、既存のツールは大げさ。そこで Perl でバックアップツールを自作します。最初はファイルを全部コピーするだけの最小版です。そこから、差分だけ処理する、方式を切り替える、tar.gz にまとめる、失敗に気づけるようにする、と回を追って育てていきます。途中で使う設計に、GoF の Template Method と Strategy という名前がつきます。
このページは目次を兼ねた案内板です。通して作るなら「全8回」を順に、特定の困りごとがあるなら「困りごとから探す」から選んでください。
読み方
- 通して読む: 第1回から順に。コードは前の回の続きで、各回の終わりに次の回で直す問題が示されます
- 設計パターンだけ知りたい: 第3回(Template Method)と第4回(Strategy)、第5回でその組み合わせです。前提のコードは第1〜2回にあります
- 動くバックアップだけ欲しい: 第2回の差分バックアップまでで、動くツールとして一区切りです
全8回
- Perl でバックアップツールを自作したい。再帰コピーで動く最小版を作る
- 毎回全ファイルをコピーして遅い。更新時刻の比較で差分だけ処理する
- バックアップの if 文が増えてきた。Template Method で処理の骨格を切り出す
- バックアップ方式を切り替えたい。フルと差分と増分を Strategy で差し替える
- Template Method と Strategy は、どちらがループを持つべきか。2つを組み合わせる
- tar.gz にまとめたい。Engine を触らず圧縮の戦略を足す
- 夜間バッチで失敗に気づけるようにしたい。ログと例外処理を足す
- このバックアップツールのどこが変わりやすく、どこが変わらないのか。設計を振り返る
困りごとから探す
まず動くバックアップが欲しい、遅いのを直したい
条件が増えて、コピー処理の if 文が読みにくい
- 第3回 — 処理の流れを親クラスに固定する Template Method
フル・差分・増分を切り替えたい
圧縮など、新しい方式を足したい
- 第6回 — 全ファイルを tar.gz にまとめる戦略を、既存コードを触らず足す
