OSS探訪

RubyのHTTP requestを実networkへ送らずstubし、method・URI・header・bodyに対する期待値をtestで検証する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
4,049
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/08/29
ページ内ナビ

概要

WebMockはRubyのHTTP requestをstubし、送信内容に対するexpectationを検証するtesting libraryです。HTTP clientの低い層でrequestをinterceptするため、Net::HTTPを含む複数client libraryでtest codeの考え方を共有できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

実networkへ接続せずHTTP responseをstubする

URIやmethodに対してresponse body・status・headerを定義し、application codeからのHTTP requestへdeterministicなresponseを返せます。

出典:[1]

method・URI・header・bodyを組み合わせてrequestをmatchする

request method、URI、query、header、body、regular expressionなどを条件にし、期待したrequestだけをstubまたは検証できます。

出典:[1]

RSpec・Minitest・Test::Unitなどへ統合する

test framework向けrequire entrypointが用意され、既存Ruby test suiteへ組み込みやすい構成です。複数のHTTP client libraryをsupportします。

出典:[1]

向いている用途

外部APIに依存するunit testを高速かつ再現可能にしたい場合に向く

network遅延、rate limit、外部service停止などからtestを切り離し、application側のrequest生成とresponse処理を検証したい場合に向きます。

出典:[1]

導入前の確認

stubが実serviceのcontractから乖離しないよう別層で検証する

mock responseだけではprovider側のschema・status・authentication変更を検知できません。contract testやintegration testで実serviceとの互換性を別途確認します。

出典:[1]

network遮断とlocalhost許可をtestごとに意図的に設定する

WebMock.disable_net_connect!で外部通信を禁止でき、localhostのみ許可する設定もあります。test suiteで意図せぬreal requestが発生しないようpolicyを明示します。

出典:[1]

Net::HTTP.startのconnection timingなどclient固有差を確認する

READMEはWebMockが既定でNet::HTTPのconnectionをrequest時まで遅延させ、本来のbehaviorを変える点を説明しています。connection lifecycle自体をtestする場合は設定とadapterの制約を確認します。

出典:[1][2]

参考にした公式資料

  1. [1]WebMock v3.26.4 README(2026-10-03)
  2. [2]WebMock v3.26.4 release(2026-10-03)
  3. [3]WebMock MIT license(2026-10-03)
編集部からの補足

外部APIへ依存するunit testを高速・deterministicにできます。便利な一方、stubが実API契約から古くなる危険があるため、contract/integration testを別層で持ち、WebMockだけで外部連携の正しさを保証しない構成が安全です。

3ステップで試す

  1. 1

    WebMock 3.26.4を導入する

    Ruby環境へstable releaseをversion固定で導入します。

    gem install webmock -v 3.26.4
  2. 2

    stubだけを使う最小scriptを作成する

    example.comへのGETをstub responseへ置き換えるscriptを作ります。real networkへrequestは送られません。

    printf '%s\n' 'require "uri"' 'require "net/http"' 'require "webmock"' 'include WebMock::API' 'WebMock.enable!' 'stub_request(:get, "http://example.com/").to_return(body: "stubbed")' 'puts Net::HTTP.get(URI("http://example.com/"))' > webmock_demo.rb
  3. 3

    stubbed responseを確認する

    stubbedと表示されれば、HTTP request interceptionとresponse stubが動作しています。

    ruby webmock_demo.rb
公式READMEで確認

成長

成長の推移 · 直近30日

4,049 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
0
Open PR
27

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る
Stars
4,049
Forks
582
Watchers
40
Open Issues
153
Contributors
236
所有者種別
User
主要言語
Ruby
ライセンス
MIT
リポジトリ最終更新
2026/08/29

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?