カテゴリ: 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
Flask
Flaskでマイグレーション管理を始めよう!Flask-Migrateの使い方と手順
New2
Django
Djangoの逆引きURL(reverse)とは?初心者でもわかるURLルーティング入門
New3
Flask
Flaskアプリのメモリ使用量を最適化!初心者でもできる軽量化の裏技集
New4
Flask
FlaskでリダイレクトやURL生成を行う方法!便利な関数の使い方を解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.2
Java&Spring記事人気No2
Python
PythonでSQLデータベースのパフォーマンスを向上させる方法|初心者でもわかる高速化の基本
No.3
Java&Spring記事人気No3
Flask
FlaskのBlueprintとは?機能ごとに分割して管理する基本設計を学ぼう
No.4
Java&Spring記事人気No4
Python
Pythonのリストを分割する方法を完全ガイド!初心者でもわかるスライス・split・itertoolsの使い方
No.5
Java&Spring記事人気No5
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
No.6
Java&Spring記事人気No6
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.7
Java&Spring記事人気No7
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.8
Java&Spring記事人気No8
Django
Django settings.py の役割とよく使う設定を完全解説!初心者でもわかる基本と考え方