← Notes 一覧へ戻る

Tech

Singleton Pattern(シングルトンパターン)とは

Singleton Pattern の基本的な考え方を、Ruby のコード例を交えて紹介します。

Singleton Pattern(シングルトンパターン)とは#

Singleton Pattern(シングルトンパターン)は、そのクラスのインスタンスを1つに限定し、どこから取得しても同じインスタンスを利用する設計パターンです。

どこから取得しても同じインスタンスが返るので、例えばアプリ全体で1つだけあればいい設定などで使用します。

参考例#

例えば、普通のクラスでは次のようになります。

class AppConfig
end

a = AppConfig.new
b = AppConfig.new

a.equal?(b)
# => false

ab は別のインスタンスです。

もし AppConfigSingleton だとすると、次のようになります。

require "singleton"

class AppConfig
  include Singleton
end

a = AppConfig.instance
b = AppConfig.instance

a.equal?(b)
# => true

今度は ab が同じインスタンスになります。

どういう時に使うのか#

例としてよく出るのは、次のようなものです。

  • 設定管理
  • Logger
  • キャッシュ管理

注意点#

「どこからでも同じオブジェクトにアクセスできる」という性質は、実質的にグローバル変数に近くなりやすいです。

その結果、依存関係がわかりにくくなったり、どこから変更されたのか追いづらくなったりといった問題が起こりやすいため、積極的に使うものではありません。

なぜこのような記事を書いたのか#

概念は何となくわかるし、見かけたことも触ったこともあるけど、そういうものに名前がついていると知らずに使っている設計パターンがたくさんあることに気づきました。

それなら、一つずつ記事に残して整理していこうと思ったのがきっかけです。

エンジニア界隈では「こんなの当たり前だろ」って感じかもしれないですが、自分は経験があっても知識として整理できていないことがまだまだあります。

今までの開発経験を振り返りつつ、こうした知識をこのサイトの記事としてアウトプットしていけたらいいな、と思います。

まとめ#

Singleton Pattern(シングルトンパターン)とは、あるクラスのインスタンスを1つに限定し、同じインスタンスを共有する設計パターンのことである。

参考#

コメントについて

  • 投稿には GitHub アカウントが必要です。
  • コメントとリアクションは GitHub Discussions 上で公開されます。
  • 情報の取扱いは Privacy Policy をご確認ください。
  • 訂正・削除に関するご連絡は Contact からお願いします。