📝

【初学者向け】スタブとは?

に公開

 

はじめに

現場で 「スタブ(Stub)」 という言葉に出会いました。
最初は「聞いたことあるけどよく分からない…」という感じでしたが、調べて整理してみると意外とシンプルな考え方でした。

同じようにスタブを初めて聞いた人が「なるほど!」と思えるように、この記事では スタブとは何か・なぜ必要なのか・モックとの違い をまとめてみます。
 

スタブとは

スタブとは、実際の処理の代わりに“仮の処理”を置いてテストや開発を進めるための仕組み です。
 
くだけた言い方をすると、
「まだ本物ができてないから、ダミーの返り値を返しておく存在」 です。
 

例:「天気予報アプリ」

例えば、「天気予報アプリ」を作るとします。

  • 本来なら 外部の天気API を叩いて今日の天気を取得する
  • でもまだAPIが完成していない、あるいは有料で簡単に使えない

そんなときに「スタブ」の出番です。

python

# 本来は外部APIを呼ぶ関数(まだ未完成)
def get_weather(city: str) -> str:
    raise NotImplementedError("本物はまだ作ってないよ")

# ↑これが完成したらAPIを呼び出して天気を返すはず

# 今は本物がないから、スタブで仮実装しておく
def get_weather(city: str) -> str:
    return "晴れ"

とりあえず動かすために書いた「仮の実装」ってことです。
 

なぜスタブが必要なのか?

  1. 外部サービスに依存しない
    APIやデータベースがまだない状態でも、アプリ部分の開発を進められる。

  2. テストが安定する
    実際のAPIは通信エラーやレスポンスの遅延があるけど、スタブなら毎回決まった結果を返すのでテストが安定する。

  3. コスト削減
    有料APIを呼びすぎるとお金がかかる。スタブなら無料で好きにテストできる。
     

モックとの違い

テストでよく使う「モック」とは別物です。

  • スタブ → 「返り値を固定するダミー」
  • モック → 「呼ばれ方(引数・回数)も検証できるダミー」

つまり、スタブは「仮の動作だけ」 を提供するのに対し、モックは「テストの検証」 までやります。

python

from unittest.mock import Mock

# モックの例
mock_api = Mock(return_value="晴れ")

print(mock_api("Tokyo"))  # => "晴れ"
mock_api.assert_called_with("Tokyo")  # 呼び出し確認

 

まとめ

  • スタブは「本物の代わりに返り値を固定してくれるダミー」
  • 本物がまだ用意できないとき、安定したテストをしたいときに使える
  • モックは「スタブ+検証」まで行えるより高機能な仕組み

ちなみに

スタブの名前の由来
「stub」という英単語には 「切り株」「残りかす」「短い代用品」 という意味があります。

  • チケットの半券(stub)
  • 短くなった鉛筆(stub)
  • タバコの吸い殻(stub)

どれも「本物の代わりに残された一部」というニュアンス。
ソフトウェア開発でも同じで、「本物の処理の代わりに置く簡易版」 という意味でスタブと呼ばれているようです。

Discussion