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

はじめに
現場で 「スタブ(Stub)」 という言葉に出会いました。
最初は「聞いたことあるけどよく分からない…」という感じでしたが、調べて整理してみると意外とシンプルな考え方でした。
同じようにスタブを初めて聞いた人が「なるほど!」と思えるように、この記事では スタブとは何か・なぜ必要なのか・モックとの違い をまとめてみます。
スタブとは
スタブとは、実際の処理の代わりに“仮の処理”を置いてテストや開発を進めるための仕組み です。
くだけた言い方をすると、
「まだ本物ができてないから、ダミーの返り値を返しておく存在」 です。
例:「天気予報アプリ」
例えば、「天気予報アプリ」を作るとします。
- 本来なら 外部の天気API を叩いて今日の天気を取得する
- でもまだAPIが完成していない、あるいは有料で簡単に使えない
そんなときに「スタブ」の出番です。
python
# 本来は外部APIを呼ぶ関数(まだ未完成)
def get_weather(city: str) -> str:
raise NotImplementedError("本物はまだ作ってないよ")
# ↑これが完成したらAPIを呼び出して天気を返すはず
# 今は本物がないから、スタブで仮実装しておく
def get_weather(city: str) -> str:
return "晴れ"
とりあえず動かすために書いた「仮の実装」ってことです。
なぜスタブが必要なのか?
-
外部サービスに依存しない
APIやデータベースがまだない状態でも、アプリ部分の開発を進められる。 -
テストが安定する
実際のAPIは通信エラーやレスポンスの遅延があるけど、スタブなら毎回決まった結果を返すのでテストが安定する。 -
コスト削減
有料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