mcpField
D
design-patterns

design-patterns

github.com/marcioaltoe開発056 回インストール今日更新
リポジトリ

design-patterns について

TypeScriptのアーキテクチャを設計・レビューする開発者向けのリファレンススキルです。Gang of Fourの22パターンを、実装例と選択ガイドとともに扱います。

主な機能

  1. 01Gang of Fourの22パターン
  2. 02生成・構造・振る舞いの分類
  3. 03パターン選択ガイド
  4. 04SOLIDクイックリファレンス
  5. 05パターンの適用と誤用の指針

活用シーン

  1. 01密結合したコードを分離する
  2. 02プラグインや拡張システムを設計する
  3. 03依存性注入でテスト容易性を高める
  4. 04プルリクエストでアーキテクチャ上の選択をレビューする

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/marcioaltoe/skills --skill design-patterns

インストール後、Claude Code で/design-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
references/
BEHAVIORAL.md
CREATIONAL.md
STRUCTURAL.md

詳細

デザインパターン

保守性、拡張性、テスト容易性に優れた TypeScript コードベースを構築するための、実証済みのアーキテクチャパターンです。Gang of Four の22パターンすべてを、実用的な実装とともに紹介します。

適用する場面

以下の場合に、これらのパターンを参考にしてください。

  • 繰り返し発生するアーキテクチャ上の問題を解決する
  • 密結合なコードをリファクタリングする
  • プラグイン/拡張システムを構築する
  • 依存性注入によってコードのテスト容易性を高める
  • アーキテクチャ上の懸念がある PR をレビューする
  • 継承とコンポジションのどちらを選ぶか検討する

パターンのカテゴリ

生成パターン

生成ロジックを利用側から隠し、柔軟にオブジェクトを作成します。

パターン意図
Factory Methodオブジェクトの生成をサブクラスに委譲する
Abstract Factory具体的な型に依存せず、関連オブジェクトのファミリーを作成する
Builder複雑なオブジェクトを段階的に構築する
Prototype一から構築する代わりに、既存のオブジェクトを複製する
Singletonグローバルにアクセスできるインスタンスを厳密に1つにする

実装については references/CREATIONAL.md を参照してください。

構造パターン

クラスとオブジェクトを組み合わせて、より大きく柔軟な構造を形成します。

パターン意図
Adapter互換性のないインターフェースを連携させる
Bridge抽象と実装を分離する
Composite個々のオブジェクトとその合成物を統一的に扱う
Decoratorサブクラス化せずに、責務を動的に追加する
Facade統一されたインターフェースで複雑なサブシステムを簡素化する
Flyweight共通の状態を共有し、多数のオブジェクトにおけるメモリ使用量を削減する
Proxy代替オブジェクトを介して、オブジェクトへのアクセスを制御する

実装については references/STRUCTURAL.md を参照してください。

振る舞いパターン

オブジェクト間のアルゴリズム、責務、通信を管理します。

パターン意図
Chain of Responsibilityハンドラーのチェーンに沿ってリクエストを渡す
Commandキューイング/取り消しのために、リクエストをオブジェクトとしてカプセル化する
Iterator内部構造を公開せずにコレクションを走査する
Mediatorオブジェクト間の複雑な通信を一元化する
Mementoオブジェクトの状態を記録し、復元する
Observer状態変更時に依存するオブジェクトへ自動的に通知する
State内部状態の変化に応じて振る舞いを変える
Strategy実行時にアルゴリズムを切り替える
Template Methodアルゴリズムの骨組みを定義し、手順の上書きをサブクラスに任せる
Visitorオブジェクトを変更せずに操作を追加する

実装については references/BEHAVIORAL.md を参照してください。

パターン選択ガイド

問題パターン
オブジェクト生成を分離したいFactory Method, Abstract Factory
任意のフィールドが多い複雑なオブジェクトBuilder
オブジェクト生成にコストがかかり、コピーが必要Prototype
グローバルに共有するリソース(設定、プール)Singleton
互換性のないサードパーティ製インターフェースAdapter
変化の軸が複数あるBridge
ツリー構造(ファイル、UI、組織図)Composite
サブクラス化せずに機能を追加したいDecorator
複雑な API を簡素化したいFacade
類似オブジェクトが数千個あり、メモリを大量に消費するFlyweight
遅延読み込み、アクセス制御、キャッシュProxy
柔軟なリクエスト処理パイプラインChain of Responsibility
元に戻す/やり直し、タスクキュー、マクロCommand
カスタムコレクションの走査Iterator
多対多のオブジェクト間通信Mediator
スナップショット、状態の保存/復元Memento
イベントシステム、リアクティブな更新Observer
オブジェクトの動作が状態に依存するState
切り替え可能なアルゴリズム(ソート、圧縮など)Strategy
固定された手順と可変部分を持つアルゴリズムTemplate Method
異種オブジェクトに対する操作Visitor

ベストプラクティス

実施すること
  • 現在直面している実際の問題を解決するパターンを選びます
  • 継承よりコンポジションを優先します
  • 依存性注入を使ってコンポーネントを疎結合にします
  • パターンの実装はシンプルに保ちます。過剰に作り込まないようにします
  • パターンを選んだ理由を記録します(どのパターンかだけではありません)
  • パターンを選ぶ際はテストのしやすさを考慮します
  • 適切な場合はパターンを組み合わせます(例:Strategy + Factory)
実施しないこと
  • 仮定上の将来のニーズに備えて、先回りしてパターンを適用しないでください
  • 単純な関数やオブジェクトで十分な場合に、パターンを無理に適用しないでください
  • 不要な抽象化レイヤーを作らないでください
  • Singleton を隠れたグローバル変数として使わないでください
  • コンポジションのほうが適している場合に、継承を選ばないでください
  • チームの習熟度を無視しないでください。誰も理解できない「より優れた」パターンより、全員が知っているシンプルなパターンのほうが適しています

SOLID クイックリファレンス

原則概要関連するパターン
Single Responsibility1 つのクラスに、変更する理由は 1 つStrategy, Command, Observer
Open/Closed拡張に対して開き、変更に対して閉じるDecorator, Strategy, Template Method
Liskov Substitutionサブタイプは基底型と置き換え可能でなければならないFactory Method, Abstract Factory
Interface Segregation小さく、目的を絞ったインターフェースを優先するAdapter, Facade
Dependency Inversion具象ではなく、抽象に依存するインターフェース/抽象クラスを使うすべてのパターン

コメント