カテゴリ: 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を使えば、このような「本番の代わり」を簡単に作り分けることができます。

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

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

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

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

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Swift テストダブル(Mock/Stub)をprotocolで設計するでは、テストダブル(Mock/Stub)をprotocolで設計するをSwiftで扱うときの考え方を確認しました。Swiftテストは、書き方だけを覚えるよりも、Xcodeで動かしながら「どこで値が変わるのか」「失敗したときに何が起きるのか」を見たほうが理解しやすくなります。

実装前の整理:テストダブル(Mock/Stub)をprotocolで設計するを実務に近づけるには、正常系に加えて、nil、空文字、例外、境界値のテストを1つずつ増やすところまで試すのがおすすめです。XCTest、ユニットテスト、モック、スタブ、CI、リグレッション防止もあわせて押さえると、検索時の判断もしやすくなります。

読み直すポイント

  • テストダブル(Mock/Stub)をprotocolで設計するで注目する場所として、テスト名、準備する値、実行する処理、期待する結果の4点を説明できる
  • 正常系に加えて、nil、空文字、例外、境界値のテストを1つずつ増やす
  • Xcodeのエラー、警告、コンソール出力を読み、原因を1つ言葉にできる
  • Swift、Xcode、iOSアプリ開発の中で、この記事の知識を使う場面を想像できる

復習するときは、次のような短いコードを自分の環境で動かしてみましょう。記事のテーマに合わせて値や条件を変えると、Swiftの型安全、Optional、エラー処理、画面更新の見え方が少しずつ整理できます。

import XCTest

final class TitleValidatorTests: XCTestCase {
    func testTitleIsNotEmpty() {
        let title = "Swift学習"
        XCTAssertFalse(title.isEmpty)
    }
}

生徒

「テストダブル(Mock/Stub)をprotocolで設計するは、どこを変えて試せばいいか分かると復習しやすいですね。」

先生

「はい。まずは小さく動かし、次に失敗するケースを1つ足してみましょう。Swiftは型やエラーがヒントを出してくれるので、結果を見ながら直す練習がそのまま実務力につながります。」

関連セミナーのご案内

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
Kotlin
Kotlinのrunの使い方!スコープ内で処理をまとめるテクニック
New2
Kotlin
Kotlinの文字列を逆順にするreversedの使い方を徹底解説!初心者でもわかる文字列操作入門
New3
Kotlin
KotlinのtoList・toCharArrayの使い方を徹底解説!文字列をリストに変換する方法を初心者向けにやさしく説明
New4
Kotlin
Kotlinの拡張プロパティとは?基本的な作り方と活用例を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#プログラムの基本的な書き方を完全解説!初心者でもわかる文法入門ガイド
No.2
Java&Spring記事人気No2
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Java&Spring記事人気No3
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
C#
C#の論理演算子の使い方を完全ガイド!&&・||・!を初心者でもわかりやすく解説
No.6
Java&Spring記事人気No6
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Kotlin
KotlinでZIPファイルの圧縮と解凍を実装する手順を完全解説!Kotlinファイル操作と入出力I/O入門
No.8
Java&Spring記事人気No8
Swift
Swiftでユーザー向けエラーメッセージ設計を徹底解説!iOSアプリのUI/UXで注意すべきポイント

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク