シングルトンパターン
クラスのインスタンスが 1 つだけ存在することを保証するデザインパターン
設計パターン設計
シングルトンパターンとは
シングルトンパターンは、クラスのインスタンスが 1 つだけ存在することを保証し、グローバルなアクセスポイントを提供するデザインパターンである。GoF デザインパターンの生成パターンに分類される。
TypeScript での実装
class DatabaseClient {
private static instance: DatabaseClient;
private constructor() { /* 初期化 */ }
static getInstance(): DatabaseClient {
if (!DatabaseClient.instance) {
DatabaseClient.instance = new DatabaseClient();
}
return DatabaseClient.instance;
}
}
const db1 = DatabaseClient.getInstance();
const db2 = DatabaseClient.getInstance();
db1 === db2; // true (同じインスタンス)
モジュールスコープのシングルトン (推奨)
// TypeScript ではモジュールがシングルトンとして機能
// db.ts
export const db = new DynamoDBClient({});
// どこから import しても同じインスタンス
// handler.ts
import { db } from './db';
ES Modules は 1 回だけ評価されるため、export const がシングルトンになる。クラスベースのシングルトンは不要。
シングルトンの問題点
| 問題 | 説明 |
|---|---|
| テスト困難 | グローバル状態でテストが干渉 |
| 隠れた依存 | どこからでもアクセスできる |
| 並行処理 | マルチスレッドで競合の可能性 |
| 密結合 | 具体的な実装に依存 |
いつシングルトンを使うか
| ケース | 推奨 |
|---|---|
| DB クライアントの再利用 | ✅ モジュールスコープ |
| 設定の一元管理 | ✅ モジュールスコープ |
| ビジネスロジック | ❌ 依存性注入 |
| テストが必要なコード | ❌ 依存性注入 |
基礎から学ぶなら関連書籍が手がかりになる。