カテゴリ: Python 更新日: 2026/01/27

Pythonのシングルトンクラスの作り方!初心者向けデザインパターン入門

Pythonのシングルトンクラスの作り方!デザインパターン入門
Pythonのシングルトンクラスの作り方!デザインパターン入門

先生と生徒の会話形式で理解しよう

生徒

「Pythonで同じ設定クラスを何度も作ってしまうんですが、ひとつだけにできませんか?」

先生

「それならシングルトンという考え方が役に立ちます。常に一つだけ存在するクラスを作る方法です。」

生徒

「クラスなのに一つしか作れないって、どういう仕組みなんですか?」

先生

「Pythonの仕組みを少し工夫すると実現できます。順番に見ていきましょう。」

1. シングルトンとは何か

1. シングルトンとは何か
1. シングルトンとは何か

シングルトンとは「必ず一つしか存在しない」ことを保証する設計の考え方です。このような考え方をまとめたものを「デザインパターン」と呼びます。デザインパターンとは、よくある設計の悩みを解決するための定番の形です。

例えるなら、家の中にある電気のブレーカーのようなものです。部屋ごとに勝手に増えると困りますが、一つだけあれば全体を管理できます。設定情報やログ管理など、全体で共有したいものにシングルトンは向いています。

2. 普通のクラスとの違い

2. 普通のクラスとの違い
2. 普通のクラスとの違い

Pythonでクラスを作ると、通常は何個でも新しいインスタンスを作れます。インスタンスとは、クラスから生まれた実体のことです。同じ設計図から作った別々の箱のようなものと考えると分かりやすいです。

しかし、シングルトンでは箱は一つだけです。何度作ろうとしても、同じ箱が返ってくる仕組みになっています。

3. Pythonで一番シンプルなシングルトンの作り方

3. Pythonで一番シンプルなシングルトンの作り方
3. Pythonで一番シンプルなシングルトンの作り方

初心者向けに分かりやすい方法として、「クラス変数」を使うやり方があります。クラス変数とは、クラス全体で共有される変数です。


class AppConfig:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

config1 = AppConfig()
config2 = AppConfig()

print(config1 is config2)

True

この例では、最初に作られた一つのインスタンスだけが保存され、二回目以降は同じものが返されます。「is」は同じものかどうかを確認するための比較です。

4. __new__メソッドの役割

4. __new__メソッドの役割
4. __new__メソッドの役割

__new__は、インスタンスが作られる直前に呼ばれる特別なメソッドです。まだ箱が作られていない段階で動きます。そのため、「すでに箱があるか」を確認するのに適しています。

難しく感じる場合は、「インスタンスを作る入口を見張っている場所」くらいのイメージで大丈夫です。

5. シングルトンが使われる場面

5. シングルトンが使われる場面
5. シングルトンが使われる場面

シングルトンは、設定情報、ログ出力、アプリ全体の状態管理などでよく使われます。どこからアクセスしても同じ状態を参照できるため、データのずれを防げます。

一方で、何でもシングルトンにすると仕組みが分かりにくくなることもあります。必要な場面だけで使うことが大切です。

6. 初心者がつまずきやすいポイント

6. 初心者がつまずきやすいポイント
6. 初心者がつまずきやすいポイント

シングルトンは便利ですが、「クラスなのに一つだけ」という考え方が最初は混乱しやすいです。無理に覚えようとせず、「全体で共有する特別な箱」と考えると理解しやすくなります。

Pythonのオブジェクト指向プログラミングでは、このような設計の工夫がコードの分かりやすさにつながります。

カテゴリの一覧へ
新着記事
New1
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
New2
Flask
Flaskアプリのセキュリティ対策まとめ!初心者向けに基本をやさしく解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flaskで外部APIと連携する方法!requestsライブラリの使い方を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
Pythonでトランザクション処理を実装する方法を完全解説!commit・rollbackで安全なSQL操作
No.3
Java&Spring記事人気No3
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.4
Java&Spring記事人気No4
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.5
Java&Spring記事人気No5
Flask
Flaskで開発中にデータベースを初期化する方法!初心者でもわかる便利なTips
No.6
Java&Spring記事人気No6
Python
Pythonの文字列から一部を抽出する方法!スライスを使った基本的な切り出し方
No.7
Java&Spring記事人気No7
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド