Avatar

設計パターンを疑え

名前の嘘を暴き、意図で設計を語る

  1. Home
  2. About
  3. お仕事のご依頼
  4. Archives
  5. Search
  6. Links
  7. プライバシーポリシー
  8. お問い合わせ
    1. ダークモード

アーカイブ

2026 583
2025 87
2024 1
2023 1
2022 1
さらに見る

タグ

Perl Moo Design-Pattern Refactoring Life Social Code-Detective Design-Patterns Series-Toc Web Movabletype Mojolicious Favorites Yapc Ai Game Git Perl-Advent-Calendar-2025 Perl-Entrance Python
Featured image of post 入力欄に細工した文字列を1つ渡すだけで、全員のパスワードが出る。文字列結合のSQLを攻撃してみる【SQLインジェクション】

入力欄に細工した文字列を1つ渡すだけで、全員のパスワードが出る。文字列結合のSQLを攻撃してみる【SQLインジェクション】

値を文字列結合で埋め込んだ WHERE 句に、シングルクォートを含む入力を渡すと、条件が常に真になって全ユーザーの行が返る。手元の SQLite で攻撃を再現し、なぜ起きるのかを確かめます。

20, 2026
読了時間: 3分
Featured image of post WHERE、ORDER BY、LIMITと足すたびにコンストラクタの引数が増え、7個で使えなくなる【Telescoping Constructor】

WHERE、ORDER BY、LIMITと足すたびにコンストラクタの引数が増え、7個で使えなくなる【Telescoping Constructor】

Query クラスに WHERE・ORDER BY・LIMIT を足すたびに、コンストラクタの引数が1つずつ増えて7個になる。どれが必須か分からず、次の句を足す余地もない状態を、実際のコードで確かめます。

20, 2026
読了時間: 4分
Featured image of post SQLは文字列をつなげば作れる。PerlとMooで SELECT 1本を返すだけのクラスから始める【文字列結合】

SQLは文字列をつなげば作れる。PerlとMooで SELECT 1本を返すだけのクラスから始める【文字列結合】

テーブル名を受け取って「SELECT * FROM users」を返すだけの Query クラスを Perl と Moo で作り、SQLite で動かします。全8回で SQL クエリビルダーに育てる出発点で、この素朴な文字列結合が次回から問題を起こします。

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

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

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

19, 2026
読了時間: 3分
Featured image of post フィルターの順番や閾値を変えるたびにコードを直している。JSONの設定でパイプラインを組み立てる【完成】

フィルターの順番や閾値を変えるたびにコードを直している。JSONの設定でパイプラインを組み立てる【完成】

シリーズの最終回。pipeline.json に Decorator の並びと引数を書き、PipelineBuilder で読み込んで積み上げます。新しい機能はクラスを1つ作って JSON に1要素足すだけで、既存コードは変えずに済む(開放閉鎖原則)ことを確かめます。

19, 2026
読了時間: 3分
Featured image of post 404が続いても、ログを読み返すまで気づけない。流しながら警告を出すDecoratorを重ねる【アラート通知】

404が続いても、ログを読み返すまで気づけない。流しながら警告を出すDecoratorを重ねる【アラート通知】

404 Not Found が指定回数以上連続したら STDERR に警告を出す AlertDecorator を作ります。連続回数を状態として持ち、ログはそのまま次へ流す、副作用を持つ Decorator の書き方を確かめます。

19, 2026
読了時間: 3分
Featured image of post 集計を足すために、動いているフィルターを書き換えたくない。通過させながら数えるDecoratorを重ねる【統計集計】

集計を足すために、動いているフィルターを書き換えたくない。通過させながら数えるDecoratorを重ねる【統計集計】

総リクエスト数・ステータスコード別の件数・総転送サイズを集計したい。ログを除外せずに通過させながら数える StatsAggregatorDecorator を作り、既存のクラスを変えずに機能を足せることを確かめます。

19, 2026
読了時間: 3分
Featured image of post 組み合わせごとのクラスをやめ、フィルターを包んで重ねる。Role と around で作る【Decorator】

組み合わせごとのクラスをやめ、フィルターを包んで重ねる。Role と around で作る【Decorator】

継承で増え続けたフィルタークラスを、包んで重ねる形に組み替える。Moo::Role で next_log を共通の契約にし、中身を委譲する LogDecorator と around 修飾子で、IP と 404 のフィルターを自由に組み合わせます(Decorator)。

19, 2026
読了時間: 4分
Featured image of post 「404だけ、IPとも組み合わせて」でクラスが掛け算に増える。継承で機能を足す限界【クラス爆発】

「404だけ、IPとも組み合わせて」でクラスが掛け算に増える。継承で機能を足す限界【クラス爆発】

IP フィルターに 404 検出を組み合わせようとすると、IPAndStatusFilteredLogParser のような組み合わせごとのクラスが必要になる。条件が増えるたびにクラス数が掛け算で増え、親の修正が全サブクラスに響きかねない問題を、実際のコードで確かめます。

19, 2026
読了時間: 3分
Featured image of post IPで絞るだけなら、継承でクラスを1つ足せば済む。この素直な手が次回の行き詰まりを生む【継承】

IPで絞るだけなら、継承でクラスを1つ足せば済む。この素直な手が次回の行き詰まりを生む【継承】

特定の IP アドレスからのアクセスだけを抽出したい。LogParser を継承して next_log をオーバーライドし、条件に合う行まで読み飛ばす IPFilteredLogParser を作ります。次回、この継承が行き詰まります。

19, 2026
読了時間: 3分
Featured image of post ログが文字列のままでは、200以外の行を探すのも面倒。名前付きキャプチャでハッシュにする【LogParser】

ログが文字列のままでは、200以外の行を探すのも面倒。名前付きキャプチャでハッシュにする【LogParser】

アクセスログを文字列のまま扱うと、「ステータスコードが200以外の行」を探す処理も書きにくい。Combined Log Format を名前付きキャプチャでパースし、ハッシュリファレンスで返す LogParser クラスを作ります。

19, 2026
読了時間: 3分
Featured image of post Perl入学式の open と while を、Moo のクラスに包む。ログ解析パイプラインの土台を作る【LogReader】

Perl入学式の open と while を、Moo のクラスに包む。ログ解析パイプラインの土台を作る【LogReader】

Perl 入学式で習った open と while を Moo のクラスに包み、アクセスログを1行ずつ返す LogReader クラスを作ります。全8回で組み上げるログ解析パイプラインの土台です。

19, 2026
読了時間: 3分
Featured image of post コピペで増えたスクレイパーを、継承で1つの設計にまとめる全10回【目次】

コピペで増えたスクレイパーを、継承で1つの設計にまとめる全10回【目次】

サイトを足すたびにコピペで増えていく Web スクレイパーを、Perl と Moo の継承で1つの設計にまとめていく全10回の案内板です。関数化・基底クラス・オーバーライド・フックメソッドと順に積み上げ、最後にその設計が Template Method パターンだったことを確かめます。

19, 2026
読了時間: 3分
Featured image of post 流れは親が握り、違いだけを子が書く。この設計の名前とStrategyとの違い【Template Method】

流れは親が握り、違いだけを子が書く。この設計の名前とStrategyとの違い【Template Method】

ここまで作ってきたスクレイパーの設計は、GoF の Template Method パターンだった。定義と実装を対応させ、Hollywood Principle(呼ぶのは親の側)、Strategy パターンとの使い分け、Factory Method との関係を Perl と Moo のコードで整理します。

19, 2026
読了時間: 6分
Featured image of post 3サイト分のスクレイパーを一括で動かす。次の変更が1か所で済むかを確かめる【継承による設計】

3サイト分のスクレイパーを一括で動かす。次の変更が1か所で済むかを確かめる【継承による設計】

ニュース・天気予報・商品情報の3つのスクレイパーを、1本のスクリプトから一括で実行する。サイトの追加、ログの追加、タイムアウトの設定といった変更がそれぞれどこを直せば済むのかを表にし、コピペ版との処理の流れの違いを振り返ります。

19, 2026
読了時間: 6分
1 … 26 27 28 … 103
© 2000 - 2026 設計パターンを疑え
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。