カテゴリ: Swift 更新日: 2025/11/02

Swiftのシングルトンパターンを完全解説!初心者でもわかる使い方と注意点

Swift シングルトンパターンの実装と注意点
Swift シングルトンパターンの実装と注意点

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

生徒

「先生、Swiftで“シングルトンパターン”ってよく聞くんですけど、それって何なんですか?」

先生

「いい質問ですね。シングルトンパターンは、アプリ全体でたった一つのインスタンスだけを使いたいときに使う設計パターンですよ。」

生徒

「つまり、1回だけ作って、どこからでも同じものを使うってことですか?」

先生

「そうです。たとえば、アプリ全体で設定やログなどを共有したいときに便利なんですよ。では実際に、Swiftでシングルトンパターンの書き方を見ていきましょう。」

1. シングルトンパターンとは?

1. シングルトンパターンとは?
1. シングルトンパターンとは?

Swiftにおけるシングルトンパターンとは、「アプリ全体で1つしか存在しないオブジェクト」を作りたいときに使う設計のことです。

たとえば、「設定情報」「ログの記録」「ネットワーク接続管理」などは、複数あったら逆に困るケースが多いですよね。そんなときに使うのがシングルトンです。

一度だけインスタンス(=実体)を作り、それ以降はどこからでも同じインスタンスにアクセスすることで、一貫性安定性を保つことができます。

2. シングルトンのイメージを身近な例で

2. シングルトンのイメージを身近な例で
2. シングルトンのイメージを身近な例で

身近な例でいえば、「学校の校長先生」がシングルトンのようなものです。どのクラスにも担任の先生はいますが、校長先生は学校全体で一人だけ。

その校長先生に何か伝える必要があるときは、みんな同じ人に連絡します。これが、プログラムで言うところの「どこからでも同じインスタンスを使う」ということなんです。

3. Swiftでのシングルトンの書き方

3. Swiftでのシングルトンの書き方
3. Swiftでのシングルトンの書き方

それでは、Swiftでシングルトンパターンを実装する方法を見てみましょう。とてもシンプルです。


class Logger {
    // staticで唯一のインスタンスを定義
    static let shared = Logger()

    // 外から初期化できないようにprivateにする
    private init() {}

    func log(message: String) {
        print("ログ出力: \(message)")
    }
}

// 使用例
Logger.shared.log(message: "アプリ起動しました")
Logger.shared.log(message: "ユーザーがボタンを押しました")

4. コードの解説

4. コードの解説
4. コードの解説

上記のコードでは、Loggerというクラスをシングルトンとして実装しています。

  • static let shared:これがシングルトンの本体で、1回だけ作られます。
  • private init():外部からinit()できないようにして、インスタンスが複数作られないようにしています。
  • log(message:):これは普通のメソッドですが、sharedを通じてどこからでも使えます。

5. 実行結果を確認しよう

5. 実行結果を確認しよう
5. 実行結果を確認しよう

ログ出力: アプリ起動しました
ログ出力: ユーザーがボタンを押しました

このように、Logger.sharedを使えば、常に同じインスタンスでログ出力ができることが確認できます。

6. よくある使い道

6. よくある使い道
6. よくある使い道

Swiftのシングルトンパターンは、次のような場面でよく使われます。

  • 設定情報を管理するクラス(例:ユーザーの設定)
  • データの保存や読み込み処理(例:UserDefaultsなど)
  • ネットワーク接続の管理(例:APIクライアント)
  • ログ出力クラス(例:Loggerなど)

アプリ全体で共有したいものや、同時に複数作ると不具合が出やすいものに対しては、シングルトンがとても便利です。

7. シングルトンを使うときの注意点

7. シングルトンを使うときの注意点
7. シングルトンを使うときの注意点

便利なSwiftのシングルトンパターンですが、使いすぎには注意が必要です。以下の点に気をつけましょう。

  • テストしにくくなる:どこでも使える分、テスト時に影響範囲が広くなります。
  • 状態の管理が難しい:複数の場所から値を変更できてしまうため、バグの原因になることも。
  • 多用すると設計が崩れる:どのクラスでもsharedを使ってしまうと、クラス同士の関係が複雑になりがちです。

必要なときだけ、慎重に使うことが大切です。設計の段階で「本当にシングルトンが必要か?」を考える癖をつけておくと安心です。

8. シングルトンとグローバル変数の違い

8. シングルトンとグローバル変数の違い
8. シングルトンとグローバル変数の違い

Swiftでシングルトンと似たような使い方ができるものに「グローバル変数」があります。ですが、グローバル変数はアプリのどこからでもアクセスできてしまい、セキュリティや保守の面で問題が起きやすいです。

その点、シングルトンはクラスの中で責任を持って管理されるので、安全性が高く、設計も整理しやすくなります。

カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!