カテゴリ: Swift 更新日: 2026/02/20

Swiftでテストダブル(Mock/Stub)をprotocolで設計する方法を初心者向けに解説!

Swift テストダブル(Mock/Stub)をprotocolで設計する
Swift テストダブル(Mock/Stub)をprotocolで設計する

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

生徒

「先生、Swiftでアプリを作ったときにテストを書きたいんですが、本物のサーバーやデータベースを使わずに動作を確認する方法ってあるんですか?」

先生

「とてもいい質問だね。そのために使うのが『テストダブル』と呼ばれる仕組みなんだ。特に『Mock(モック)』や『Stub(スタブ)』といった方法が有名だよ。」

生徒

「モックやスタブって、なんだか難しそうです…」

先生

「心配しなくて大丈夫。Swiftではprotocolを使うと簡単にテストダブルを作れるんだよ。日常の例えを交えながら説明していこう。」

1. テストダブル(Mock/Stub)とは?

1. テストダブル(Mock/Stub)とは?
1. テストダブル(Mock/Stub)とは?

まず、テストダブルとは本物の代わりに使う「ダミーの役者」のことです。サッカーの試合で、練習のときに本物の審判の代わりに先生がジャッジするようなものです。

Stub(スタブ)は「決まった返事をする代役」。例えば「必ず成功を返すサーバーの代わり」として使います。

Mock(モック)は「呼ばれたかどうか、何回呼ばれたか」を記録できる代役。テストで「本当にこの処理を呼んだのか?」を確認するために使います。

2. protocolで設計するメリット

2. protocolで設計するメリット
2. protocolで設計するメリット

テストダブルを作るとき、protocolを使うととても便利です。なぜなら、protocolは「ルール」を定義するだけで、実際の中身を入れ替えることができるからです。つまり、本番用の実装とテスト用の代役を自由に差し替えられるのです。

例えば、データを取得するサービスをprotocolで表現しておくと、本番では本物のAPI通信を、テストではスタブやモックを用意できます。

3. Stubをprotocolで作る例

3. Stubをprotocolで作る例
3. Stubをprotocolで作る例

まずはStubの例を見てみましょう。決まった返答を返すだけの代役です。


protocol UserService {
    func fetchUserName() -> String
}

struct RealUserService: UserService {
    func fetchUserName() -> String {
        // 実際にはサーバー通信など
        return "本物のユーザー名"
    }
}

struct StubUserService: UserService {
    func fetchUserName() -> String {
        return "テスト用ユーザー"
    }
}

テストではStubUserServiceを使うことで、サーバーに接続しなくても「テスト用ユーザー」という名前が返ってきます。

4. Mockをprotocolで作る例

4. Mockをprotocolで作る例
4. Mockをprotocolで作る例

次にMockの例です。呼ばれた回数や内容を記録できます。


class MockUserService: UserService {
    private(set) var callCount = 0

    func fetchUserName() -> String {
        callCount += 1
        return "モックユーザー"
    }
}

// テスト例
let mock = MockUserService()
let name = mock.fetchUserName()
print(name)          // "モックユーザー"
print(mock.callCount) // 1

モックユーザー
1

これで「fetchUserName()が1回呼ばれた」ということを確認できます。もし想定と違えばテストが失敗する仕組みを作れます。

5. 現実世界の例えで理解する

5. 現実世界の例えで理解する
5. 現実世界の例えで理解する

学校での練習試合を想像してください。本番の試合では本物の審判や観客がいますが、練習では「先生が審判役」をしても問題ありません。先生が「必ずOKを出す」ならそれはStubです。「どのプレーに何回笛を吹いたか」を数えるならMockです。どちらも本物の代役ですが、役割が少し違うのです。

Swiftでprotocolを使えば、このような「本番の代わり」を簡単に作り分けることができます。

Swiftを基礎から実践レベルまで学びたい人や、 iOSアプリ開発を本格的に始めたい人には、 定番の入門+実践書がこちらです。

Swift実践入門をAmazonで見る

※ Amazon広告リンク

6. 初心者が意識すべきポイント

6. 初心者が意識すべきポイント
6. 初心者が意識すべきポイント

初心者の方は、まず「本番用の処理」と「テスト用の処理」を分ける習慣を意識しましょう。protocolを使えば、処理の切り替えが簡単になり、テストもしやすくなります。実際のアプリ開発では「ネットワーク通信」「データベース保存」「外部サービス呼び出し」などにテストダブルをよく使います。

特にアプリが大きくなればなるほど、モックやスタブを正しく設計することが、品質を守る大切なポイントになります。

関連セミナーのご案内

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。

Windowsで実現する開発環境

【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。

【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。

この60分で得られる3つの理解

1. WindowsでのSwift実行環境の作り方

OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。

2. Swiftの基本構造(変数・型・定数)

iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。

3. アプリエンジニアとしてのロードマップ

将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。

※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。

セミナー画像

Windowsで始めるiPhoneアプリ開発入門

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のTCP・UDPソケットプログラミング入門|初心者でもわかるネットワーク通信の基本
New2
Swift
Swift 非同期処理入門|なぜ必要なのかを初心者向けにやさしく解説
New3
Go言語
Go言語の関数をモジュール化して管理する方法
New4
Kotlin
KotlinのSQLインジェクション対策の基本をやさしく解説!初心者でもわかる安全なデータベース操作
人気記事
No.1
Java&Spring記事人気No1
Go言語
SwiftでJSONを扱う基本を完全ガイド!初心者でもわかるCodableの使い方
No.2
Java&Spring記事人気No2
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Java&Spring記事人気No3
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのログ出力方法を完全ガイド!LogcatとTimberでトラブルシューティング
No.5
Java&Spring記事人気No5
Go言語
Go言語のビルドキャッシュ徹底解説!仕組みとトラブル対処法
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Kotlin
Kotlinの文字列の部分取得!substring・take・dropの基本
No.8
Java&Spring記事人気No8
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応