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 天気 API 連携の完成版を読み返す。使っていたのは Adapter と Facade、それと SOLID の関係

天気 API 連携の完成版を読み返す。使っていたのは Adapter と Facade、それと SOLID の関係

8回かけて作った天気アグリゲーターの完成コードを通して読み、各パートが Adapter と Facade のどちらにあたるかを整理する。SOLID 原則との対応も確かめる。

30, 2026
読了時間: 9分
Featured image of post 全部の API が失敗したら呼び出し側は undef だらけになる。Try::Tiny と【Null Object】で止まらない設計にする

全部の API が失敗したら呼び出し側は undef だらけになる。Try::Tiny と【Null Object】で止まらない設計にする

ネットワークエラーやレート制限で全 API が落ちても、undef チェックを呼び出し側に強いることなく、デフォルトの天気データを返して動き続ける。Try::Tiny の例外処理と Null Object を組み合わせる。

30, 2026
読了時間: 8分
Featured image of post 同じ都市の天気を何度も API に問い合わせている。Cache::LRU と TTL で呼び出しを減らす

同じ都市の天気を何度も API に問い合わせている。Cache::LRU と TTL で呼び出しを減らす

ページ内で同じ都市を何度も取得して、API の上限や遅延に響く問題を、キャッシュで減らす。まず自前で実装し、期限切れの TTL を足してから、Cache::LRU に置き換える。

30, 2026
読了時間: 8分
Featured image of post API が落ちても天気を返したい。複数の Adapter をまとめて窓口を1つにする【Facade】

API が落ちても天気を返したい。複数の Adapter をまとめて窓口を1つにする【Facade】

複数の Adapter の管理と、1つ目が失敗したら次を試すフォールバックを Facade にまとめる。呼び出し側は窓口を1回呼ぶだけで済む。Perl と Moo で実装して動きを確かめる。

30, 2026
読了時間: 9分
Featured image of post Adapter で揃えたのに、呼び出し側のコードがまだ長い。何が残っているのかを整理する

Adapter で揃えたのに、呼び出し側のコードがまだ長い。何が残っているのかを整理する

Adapter を作っても、どの API を使うか、失敗したら次へ回すか、といった処理は呼び出し側に残る。Web アプリと CLI の両方に同じコードが散らばる様子から、次の設計の必要性を確かめる。

30, 2026
読了時間: 5分
Featured image of post API ごとに返す形が違って呼び出し側が分岐する。共通の窓口に揃える【Adapter】

API ごとに返す形が違って呼び出し側が分岐する。共通の窓口に揃える【Adapter】

OpenWeatherMap と WeatherStack で違うレスポンスの形を、Adapter で同じメソッドに揃える。呼び出し側は API の違いを気にせず使える。Perl と Moo の Role で実装します。

30, 2026
読了時間: 7分
Featured image of post 2つ目の天気 API を足したら if 文だらけになった。何が破綻するのかを確かめる

2つ目の天気 API を足したら if 文だらけになった。何が破綻するのかを確かめる

WeatherStack を足すと、API ごとにレスポンスの形が違うため if-elsif の分岐と同じ処理の重複が増える。3つ目、4つ目を足す前に、どこで破綻が始まるのかを具体的に見る。

30, 2026
読了時間: 6分
Featured image of post Perl で外部の天気 API を呼びたい。HTTP::Tiny と JSON::PP で最初の1本を動かす

Perl で外部の天気 API を呼びたい。HTTP::Tiny と JSON::PP で最初の1本を動かす

標準モジュールの HTTP::Tiny と JSON::PP だけで、天気 API にリクエストを送り、返ってきた JSON を読み取って表示する。API キーなしで動くモックデータで試せる。

30, 2026
読了時間: 6分
Featured image of post 【目次】Perlで作るファイルバックアップツール(全8回)

【目次】Perlで作るファイルバックアップツール(全8回)

Perl でバックアップツールを作りながら Template Method と Strategy を学ぶ全8回の連載。目次を兼ねた案内板で、読む順と各回の内容をまとめています。

30, 2026
読了時間: 2分
Featured image of post このバックアップツールのどこが変わりやすく、どこが変わらないのか。設計を振り返る

このバックアップツールのどこが変わりやすく、どこが変わらないのか。設計を振り返る

Template Method に固定した流れと、Strategy で差し替えた部分を整理して振り返る。クラウド保存・暗号化・失敗時の通知を足すなら、どこに切れ目を入れるかも考える。

30, 2026
読了時間: 3分
Featured image of post 夜間バッチで失敗に気づけるようにしたい。ログと例外処理を足す

夜間バッチで失敗に気づけるようにしたい。ログと例外処理を足す

コピーが途中で失敗しても後から追えるように、ロガーと例外処理を Engine と Strategy に組み込む。一過性のエラー向けに、Sub::Retry で再試行する書き方も紹介する。

30, 2026
読了時間: 2分
Featured image of post tar.gz にまとめたい。Engine を触らず圧縮の戦略を足す

tar.gz にまとめたい。Engine を触らず圧縮の戦略を足す

全ファイルを 1 つの tar.gz にまとめる圧縮戦略を足す。Engine にも他の戦略にも手を入れず、新しいファイルを置くだけで済むことを確かめる。

30, 2026
読了時間: 3分
Featured image of post Template Method と Strategy は、どちらがループを持つべきか。2つを組み合わせる

Template Method と Strategy は、どちらがループを持つべきか。2つを組み合わせる

骨格の Engine と、差し替える Strategy を組み合わせる。ファイルを巡回するのがどちらかで迷う点を、全ファイルをまとめて扱う戦略も作れる側に決め、差分バックアップで動かす。

30, 2026
読了時間: 3分
Featured image of post バックアップ方式を切り替えたい。フルと差分と増分を Strategy で差し替える

バックアップ方式を切り替えたい。フルと差分と増分を Strategy で差し替える

フル・差分・増分の 3 つを、同じ呼び出し方で入れ替えられる戦略クラスとして作る【Strategy】。10,000 ファイルで 2 回目以降の速度を比べ、呼び出し側を変えずに切り替えられることを確かめる。

30, 2026
読了時間: 3分
Featured image of post バックアップの if 文が増えてきた。Template Method で処理の骨格を切り出す

バックアップの if 文が増えてきた。Template Method で処理の骨格を切り出す

コピーするかの判断と巡回が 1 つのループに混ざってきたので、準備・スキャン・同期・検証の流れを親クラスに固定し、中身を子クラスで差し替えられる形にする【Template Method】。

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