デコレータ
既存の関数やクラスに機能を追加するデザインパターンで、元のコードを変更せずに拡張する
デコレータとは
デコレータ (Decorator) は、既存の関数やクラスに機能を追加するデザインパターンで、元のコードを変更せずに拡張する。GoF デザインパターンの 1 つで、Python の @decorator、TypeScript の Stage 3 Decorators が言語レベルでサポートする。
関数デコレータ (高階関数)
関数デコレータ (高階関数) のコード例を示す。
// ログを追加するデコレータ
function withLogging<T extends (...args: any[]) => any>(fn: T): T {
return ((...args: any[]) => {
console.log(`Calling ${fn.name} with`, args);
const result = fn(...args);
console.log(`Result:`, result);
return result;
}) as T;
}
const add = (a: number, b: number) => a + b;
const loggedAdd = withLogging(add);
loggedAdd(1, 2); // Calling add with [1, 2] → Result: 3
TypeScript Decorators (Stage 3)
TypeScript Decorators (Stage 3) のコード例を示す。
function log(target: any, context: ClassMethodDecoratorContext) {
return function (...args: any[]) {
console.log(`${String(context.name)} called`);
return target.apply(this, args);
};
}
class OrderService {
@log
createOrder(data: any) { /* ... */ }
}
デコレータ vs 継承
デコレータと継承の違いを以下にまとめる。
| 観点 | デコレータ | 継承 |
|---|---|---|
| 結合度 | 低い | 高い |
| 組み合わせ | 自由に組み合わせ可能 | 単一継承の制約 |
| 実行時の変更 | 可能 | 不可 |
Python のデコレータ
Python のデコレータのコード例を示す。
import functools
def retry(max_attempts=3):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
for i in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception:
if i == max_attempts - 1:
raise
return wrapper
return decorator
@retry(max_attempts=3)
def call_api():
...
実用的なデコレータ
実用的なデコレータを以下にまとめる。
| デコレータ | 用途 |
|---|---|
| withLogging | ログの追加 |
| withRetry | リトライの追加 |
| withCache | キャッシュの追加 |
| withAuth | 認証チェック |
| withValidation | 入力検証 |
詳しくは関連書籍を参照。
この記事は役に立ちましたか?
関連用語
ミドルウェア
リクエストとレスポンスの間に挟まる処理層で、認証 / ログ / エラーハンドリングを横断的に適用する
高階関数
関数を引数に取る、または関数を返す関数で、関数型プログラミングの基本概念
デザインパターン
ソフトウェア設計で繰り返し現れる問題に対する再利用可能な解決策のカタログ
Decorator パターン実装
既存オブジェクトの振る舞いを動的に拡張し、継承を使わずに機能を追加するデザインパターン
関数型プログラミング
副作用を避け、純粋関数と不変データを中心にプログラムを構築するパラダイム
TypeScript
JavaScript に静的型付けを追加した言語で、大規模開発の安全性と生産性を向上させる
関連する記事
Python 本の選び方 - 独学の最初の 1 冊から実務品質まで
Python 本の選び方を「動機」から逆算して整理。プログラミング未経験の最初の 1 冊、業務自動化に直結する本、型ヒントとコード品質で実務水準へ進む本まで、2026 年 8 月時点の定番を独学ルートに沿って解説します。
データベース本ガイド - SQL から設計まで学べる技術書の選び方
データベースの基礎から設計、パフォーマンスチューニングまで学べる技術書の選び方と学習順序を紹介します。
Web デザイン本ガイド - HTML/CSS、Figma、Photoshop を学ぶ順番
Web デザインを独学する本の選び方を「コーディング、ツール、デザイン原則」の 3 本柱で整理。HTML/CSS の入門書、Figma と Photoshop の教本、レイアウトと配色の定番書を、2026 年 8 月時点の収載書から学ぶ順番つきで解説します。