シングルトンパターン

クラスのインスタンスが 1 つだけ存在することを保証するデザインパターン

設計パターン設計

シングルトンパターンとは

シングルトンパターンは、クラスのインスタンスが 1 つだけ存在することを保証し、グローバルなアクセスポイントを提供するデザインパターンである。GoF デザインパターンの生成パターンに分類される。

TypeScript での実装

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

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

この記事は役に立ちましたか?

関連用語

関連する記事