woshidan's loose leaf

ぼんやり勉強しています

Singletonパターン

Singletonパターンは、Singletonパターンという単語を覚えた初心者がどんどんSignletonパターンを書き出すという事で悪名高いらしいですが...

むしろBuilderパターンという単語を覚えた初心者が、BuilderクラスのためのBuilderメソッドを書き連ねて...というパターンも悪名をあげて欲しい感じです。

Singletonパターンについては、実は特に使う場面も無かったので語る事が無いのでむしろ調べてみます。

正直、インスタンスに対して特異メソッドを定義したり、インスタンスに特異メソッドを定義する際に使用される、特異クラスの中で変数を定義する必要は教養以外ではあまり無いのかな、というくらい現在見た事がありません。

言語の仕組みとして理解しておく必要はあるのですが、どちらかというと、クラスに対して定数を定義して、それを#freezeメソッドで固定させる、という方がお行儀がいいような理解をしています。

アプリケーション全域で使う設定であれば、使うたびに設定ファイルから読み出すより、最初に設定用のモジュールに定数として読み込んでおいた方が良いでしょう。そう言う意味でなら、見た事がある気がします。

この場合、singletonモジュールをrequireしておくと、作成したモジュールやクラスのインスタンスを1つしか生成しないようにする、「Singleton」にしてくれるそうです。

なお、Railsでアプリケーション固有の設定を一カ所でまとめてしたいときは、config/secret.ymlで書いて、Rails.application.secrets.xxxで呼び出します。

この場合は、起動時にまとめて呼び出されて後はそのままなのでしょうか。

productionやdevelopmentでもその辺の設定が変わりそうで、一度調べると面白いのかもしれないです。

一から書く場合でない限り、固有の設定をどこでしているか、をきちんと調べることが大事なのかもしれないし、 一から新しいツールを書く場合でない限り、あまり触れる機会がないのかな、と言うのがRailsプログラマの自分の実感でした。

参考

Rubyシングルトンパターンいろいろ + Railsでの使用例Engineer Flies - エンジニアは空を飛ぶ