シングルトンパターン

クラスのインスタンスが 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 クライアントの再利用 ✅ モジュールスコープ
設定の一元管理 ✅ モジュールスコープ
ビジネスロジック ❌ 依存性注入
テストが必要なコード ❌ 依存性注入

基礎から学ぶなら関連書籍が手がかりになる。

関連用語