0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

APIの自動テストツール:Apidog vs Schemathesis を徹底解説!

Last updated at Posted at 2025-11-29

はじめに

API開発において、テストツールの選択は開発効率と品質に大きな影響を与えます。本記事では、インターン生の私が実際に使用して理解した内容や、公式ドキュメント、GitHubに記述されている情報をもとに、Apidog Web版、Apidog デスクトップ版、Schemathesisの3つのツールを徹底比較します。

それぞれのツールには異なる設計思想と技術的特性があり、プロジェクトの要件や開発環境によって最適な選択が変わります。本記事では、各ツールの技術的な仕組みから実践的な使い分けまで解説します。

ツール概要

Apidog Web版

ブラウザベースのAPI開発・テストプラットフォーム。OpenAPI仕様に準拠したインターフェースで、設計・開発・テスト・ドキュメント化を一元管理できます。

Apidog デスクトップ版

Electron製のネイティブアプリケーション。Web版の機能に加え、ローカルファイルシステムへの直接アクセスや、より強力なネットワーク制御が可能です。

Schemathesis

OpenAPI/GraphQL仕様書からテストケースを自動生成するPythonベースのCLIツール。Property-Based Testingの手法により、想定外のエッジケースを発見します。

技術アーキテクチャ比較

ランタイム環境

特性 Apidog Web版 Apidog デスクトップ版 Schemathesis
ランタイム V8 Engine (Browser Sandbox) Electron (Chromium + Node.js) Python 3.x
実行環境 ブラウザ(Chrome, Edge等) OS上で直接実行 コマンドライン / CI/CD
インストール 不要(ブラウザ拡張機能のみ) 必要(アプリケーション本体) pip install

ネットワークスタック

特性 Apidog Web版 Apidog デスクトップ版 Schemathesis
通信方式 Fetch API(ブラウザ標準) 独自ネットワーククライアント Python requests / httpx
CORS制御 強制される(拡張機能で回避) 無視可能(標準でバイパス) 適用外(サーバー視点)
Cookie管理 SameSite属性の影響を受ける 完全制御可能 Session管理可能
低レベル制御 不可 TCP/IPレベルで可能 HTTPレベルで可能

ファイルシステムアクセス

特性 Apidog Web版 Apidog デスクトップ版 Schemathesis
ローカルファイル読込 不可(サンドボックス内のみ) 可能 可能
ファイル保存 ダウンロードのみ 任意のパスに保存可能 レポート出力可能
大容量データ処理 タブメモリ制限あり OSメモリ上限まで利用可能 メモリ効率的
DB接続 不可(Desktop版またはRunner必要) 可能(TCP/IP直接接続) 可能(別途接続ツール必要)

ローカル開発における接続メカニズム

Apidog Web版の接続アーキテクチャ

Private Network Access (PNA) の壁

Web版Apidog(https://app.apidog.com)からローカルサーバー(http://localhost:8080)へ接続する際、ブラウザはセキュリティ警告を表示します。

技術的背景:

  • Public(インターネット)からPrivate(イントラネット)へのリクエストは、CSRF攻撃のリスクがある
  • Chrome等のモダンブラウザは、デフォルトでこれをブロックまたは制限
  • ブラウザはプリフライトリクエスト(OPTIONSメソッド)を送信し、サーバーの許可を確認

対応方法(拡張機能なしの場合):
ポップアップで「許可」を選択することで、一時的にブラウザのPNAポリシー例外リストにapp.apidog.comを追加し、ローカルIPへの通信経路を開放します。

CORS(Cross-Origin Resource Sharing)の完全理解

「許可」済みでも発生するNetwork Errorの大半はCORSに起因します。

メカニズム:

  • ブラウザの「同一生成元ポリシー」により、異なるオリジン間のJavaScript通信は制限される
  • サーバー側でAccess-Control-Allow-Originヘッダーを明示的に含めない限り、レスポンスはJavaScriptに渡されない

解決策: Apidog Browser Extension

リクエストフロー(拡張機能使用時):

1. Webアプリ → 拡張機能バックグラウンド
2. 拡張機能 → localhost(特権利用でCORS無効化)
3. localhost → 拡張機能(レスポンス)
4. 拡張機能 → Webアプリ(レスポンス転送)

拡張機能は通常のWebページとは異なる特権を持ち、クロスオリジン通信を完全にバイパスします。

重要な制限事項:

  • ブラウザ拡張機能はHTTP/HTTPSリクエストのプロキシとして機能しますが、データベースへの直接TCP/IP接続は行えません
  • MySQL、PostgreSQL等へのDB接続が必要な場合は、Desktop版の使用が必須です
  • または、ローカルネットワーク内にApidog Runner(CLIツール)を配置する必要があります

Apidog デスクトップ版の接続

デスクトップ版はElectronアプリケーションとして、レンダラープロセス(Chromium/V8)とメインプロセス(Node.js)の2つで構成されています。

技術的特徴:

  • ブラウザのサンドボックス外で動作するため、CORS制約を受けない
  • Node.jsプロセスを通じて、独自のネットワーククライアントによる低レベルTCP/IP制御が可能
  • データベースへの直接TCP/IP接続をサポート

Schemathesisの接続

Schemathesisはサーバー側の視点でテストを実行するため、CORS制約は適用されません。通常のHTTPクライアントとして動作します。

# ローカルサーバーへの接続(CORS不要)
schemathesis run ./openapi.json \
  --base-url=http://localhost:8000 \
  --header "Authorization: Bearer TOKEN"

テストアプローチの比較

GUI vs CLI

特性 Apidog Web/Desktop Schemathesis
インターフェース グラフィカルUI コマンドライン
テスト設計 マニュアル + AI補助 仕様書ベース自動生成
視覚的フィードバック リアルタイムプレビュー テキストレポート

テスト生成の思想

Apidog: AI補助による半自動生成

メカニズム:

  1. OpenAPI仕様を解析
  2. LLM(大規模言語モデル)がAPI目的を読み取り、テスト計画を自然言語でリストアップ
  3. 既存テストのカバレッジを計算し、不足パターンを補完

パラメータ解析:

  • 型(Integer, String, Boolean)、Enum、Format(email, uuid)を認識
  • 境界値分析: 最小値・最大値・境界値を自動生成候補に追加

異常系シナリオ:

  • 必須パラメータの欠落
  • データ型の意図的な誤り
  • 空文字、Null、極端に長い文字列

設定項目:

  • ステップ生成: LLMがテスト計画を自然言語で生成
  • 自動補充: カバレッジ不足パターンをアルゴリズム的に埋める
  • ラウンド数: 増やすほど創造的・探索的な異常系テストが生成

Schemathesis: Property-Based Testing

メカニズム:

  1. OpenAPI仕様からすべてのエンドポイント、パラメータを抽出
  2. Hypothesis(Property-Based Testingライブラリ)で多様なテストデータを生成
  3. データ生成戦略ごとに異なるアプローチを適用

データ生成戦略:

  • Examples: 仕様書のexamplesを使用
  • Coverage: すべての組み合わせを網羅的にテスト
  • Fuzzing: ランダム・予測不可能なデータで堅牢性をテスト
  • Stateful Testing: OpenAPI仕様書のlinks定義に基づき、複数エンドポイントを連携させた状態遷移テスト(※仕様書にlinksの記述が必要)

重要な注意点:
Stateful Testingは、OpenAPI仕様書にlinksオブジェクトが正しく定義されている場合にのみ機能します。多くの仕様書にはlinksが記述されていないため、この機能を活用するには仕様書の拡充が必要です。

テスト実行モデル

Apidog: ブラックボックステスト

Apidogは「クライアントサイド」ツールであり、サーバー内部の状態変数を直接読み取れません。

観測対象:

  • HTTPステータスコード
  • レスポンスヘッダー
  • レスポンスボディ
  • パフォーマンスメトリクス(TTFB、総ダウンロード時間)

データベース検証(Desktop版のみ):

Desktop版では、Node.jsプロセスを通じてデータベースへの直接TCP/IP接続が可能です。

アーキテクチャ(Desktop版):
1. UIでSQLクエリを定義
2. Node.jsプロセスがDBポート(3306等)へTCP接続
3. クエリ実行結果を取得
4. UIに結果を表示

この機能により、「レコードがINSERTされたか」「フラグがUPDATEされたか」といった副作用の検証が可能です。

Web版の制限:
Web版(ブラウザ拡張機能含む)では、ブラウザのサンドボックス制約により、データベースへの直接TCP/IP接続はサポートされていません。DB検証を行う場合は、Desktop版を使用するか、ローカルネットワーク内にApidog Runnerを配置する必要があります。

Schemathesis: 仕様準拠検証

Schemathesisは仕様書との整合性に焦点を当てます。

検証内容:

  • 仕様書に定義されていないステータスコードの検出
  • 必須ヘッダー欠落時の適切なエラーレスポンス
  • サポートされていないHTTPメソッドへの405応答
  • スキーマバリデーションの一致
  • サーバーエラー(5xx)の検出

アサーション(検証)設計

Apidog: 柔軟なアサーション設計

JSONPath活用

検証内容 JSONPath 比較演算子 期待値
特定値の一致 $.data.user.name Equals "田中太郎"
リストのサイズ $.data.items.length GreaterThan 0
存在確認 $.data.token Exist -
正規表現チェック $.data.email Matches ^[\w\.-]+@[\w\.-]+\.\w+$

動的な期待値設定

// シナリオ: リクエストで送った名前に「さん」が付いているか

対象: $.data.name
条件: Equals
期待値: {{req_name}}さん

// {{req_name}}はリクエストパラメータから動的に展開

スキーマバリデーション vs データバリデーション

スキーマバリデーション(AIが得意):

  • ageフィールドが数値(Number)であることを保証
  • クライアントアプリのクラッシュ防止に必須

データバリデーション(人間が得意):

  • ageフィールドが20以上であること(成人判定ロジック)
  • ビジネス要件に依存するため、ドメイン知識が必要

Schemathesis: 仕様準拠の自動検証

Schemathesisは仕様書に基づいた検証を自動実行します。

import schemathesis

schema = schemathesis.from_uri("./openapi.json")

@schema.parametrize()
def test_api(case):
    response = case.call()
    # 仕様書との整合性を自動検証
    case.validate_response(response)
    
    # カスタム検証も追加可能
    if response.status_code == 200:
        assert response.headers.get("Content-Type") == "application/json"

CI/CD統合

Apidog: CLI + Webフック

Apidogは、Web版・Desktop版に加えて、CI/CD専用のCLIツールを提供しています。

Apidog CLI の特徴:

  • npm等で別途インストールが必要
  • Desktop版をインストールしても自動では利用できない
  • コマンドライン実行に最適化されている
# Apidog CLIのインストール
npm install -g @apidog/cli

# コレクション実行
apidog run collection.json \
  --environment=production \
  --reporter=json

Web版のCI/CD統合:

  • Webフック経由でテスト実行をトリガー
  • 結果をSlack/Teams等に通知

Schemathesis: ネイティブCI/CD対応

# GitHub Actions例
name: API Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.9'
      
      - name: Install Schemathesis
        run: pip install schemathesis
      
      - name: Start API server
        run: |
          docker-compose up -d
          sleep 10
      
      - name: Run tests
        run: |
          schemathesis run ./openapi.json \
            --base-url=http://localhost:8000 \
            --workers=4 \
            --checks all

パフォーマンス比較

実行速度

ツール 小規模API 中規模API 大規模API
Apidog Web 高速 やや遅い(DOM操作負荷) 遅い(メモリ制限)
Apidog Desktop 高速 高速 中速(仮想スクロール対応)
Schemathesis 高速 高速 高速(並列実行)

メモリ使用量

  • Apidog Web: タブメモリ制限(数GB程度)、大量ログでDOM操作が重くなる
  • Apidog Desktop: OSメモリ上限まで利用可能
  • Schemathesis: メモリ効率的、ストリーミング処理

並列実行

# Schemathesisの並列実行
schemathesis run ./openapi.json \
  --base-url=http://localhost:8000 \
  --workers=8  # 8並列で実行

Apidogもコレクション実行時に並列化可能ですが、GUI操作が主体のため、大規模並列実行にはSchemathesisが有利です。

検出できる問題の比較

Apidog

得意な検出:

  • ビジネスロジックの検証
  • データの整合性確認
  • ワークフロー全体のテスト
  • UI/UXの確認(モックサーバー機能)

検出例:

  • 注文処理後、ステータスが正しく更新されているか
  • 決済APIが正しい金額を返すか
  • 複数エンドポイントを跨いだデータの一貫性

Schemathesis

得意な検出:

  • HTTPステータスコードの不整合
  • 必須ヘッダー検証不足
  • サポートされていないHTTPメソッド
  • スキーマ検証の不一致
  • サーバーエラー(5xx)
  • 無効なデータの受理

検出例:

❌ Undocumented HTTP status code
    Received: 405
    Documented: 200, 401, 403, 500

❌ Missing header not rejected
    Got 500 when missing required 'Authorization' header, expected 401

❌ Schema validation mismatch
    51 operations mostly rejected generated data due to validation errors

ユースケース別推奨ツール

Apidog Web版が適しているケース

推奨:

  • チーム全体でAPI仕様を共有したい
  • ブラウザベースで環境構築を最小化したい
  • URLを共有するだけでモックサーバーを利用したい
  • 視覚的にテスト結果を確認したい
  • 軽量なAPIテスト

⚠️ 注意:

  • ローカル開発時はブラウザ拡張機能が必須
  • 大量データ処理には不向き
  • インターネット接続必須
  • データベース検証は不可

Apidog デスクトップ版が適しているケース

推奨:

  • CORS制約を気にせず開発したい
  • データベースの副作用検証が必要
  • 大規模APIの包括的テスト
  • 高度なネットワーク制御が必要
  • オフライン環境での作業

⚠️ 注意:

  • インストールが必要
  • リソース消費がやや大きい

Schemathesisが適しているケース

推奨:

  • OpenAPI仕様書が整備されている
  • CI/CDパイプラインでの自動テスト
  • リグレッションテストの自動化
  • エッジケースの網羅的発見
  • 仕様と実装の整合性確認
  • 大規模並列実行

⚠️ 注意:

  • GUI不要のプロジェクト向き
  • Python環境が必要
  • Stateful Testing利用時は仕様書にlinks定義が必要

推奨ワークフロー

理想的な組み合わせ

開発フェーズ別ツール活用:

1. 設計フェーズ
   → Apidog(仕様書作成・モックサーバー)

2. 開発フェーズ
   → Apidog Web/Desktop(手動テスト・デバッグ)
   → Schemathesis(継続的な仕様整合性チェック)

3. テストフェーズ
   → Apidog Desktop(ビジネスロジック検証・DB検証)
   → Schemathesis(網羅的なエッジケーステスト)

4. CI/CDフェーズ
   → Schemathesis(自動リグレッションテスト)
   → Apidog CLI(シナリオテストの自動実行)

具体的な運用例

1. 初期開発(Apidog中心)

1. Apidogで仕様書作成
2. モックサーバーでフロントエンド開発並行
3. 実装完了後、手動テストで基本動作確認
4. AI生成でベースラインテスト構築

2. 品質保証(Schemathesis追加)

# 仕様整合性の自動チェック
schemathesis run ./openapi.json \
  --base-url=http://localhost:8000 \
  --workers=4 \
  --hypothesis-max-examples=100

# 不整合検出 → Apidog仕様書を修正 → 再テスト

3. CI/CD統合(両者併用)

# Schemathesisで仕様チェック
- name: Schema validation
  run: schemathesis run ./openapi.json --base-url=$API_URL

# Apidog CLIでビジネスロジックテスト
- name: Business logic tests
  run: apidog run collection.json --environment=ci

まとめ

ツール選択の指針

要件 推奨ツール
仕様書駆動開発 Apidog(設計)+ Schemathesis(検証)
ビジネスロジック重視 Apidog Desktop
データベース検証 Apidog Desktop
エッジケース発見 Schemathesis
チーム共有・可視化 Apidog Web
CI/CD自動化 Schemathesis + Apidog CLI
軽量・ブラウザベース Apidog Web
高度なネットワーク制御 Apidog Desktop
オフライン環境 Apidog Desktop / Schemathesis

最終的な推奨

単独利用ならApidog(特にデスクトップ版):

  • GUI操作で学習コストが低い
  • 設計からテストまで一貫して管理
  • ビジネスロジックの検証に強い
  • データベース検証が可能

併用が理想的:

  • Apidogで仕様書管理・手動テスト・ビジネスロジック検証
  • Schemathesisで自動リグレッション・エッジケース発見・CI/CD統合

これにより、人間の創造性とAIの網羅性を組み合わせた、堅牢なAPI品質保証体制を構築できます。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?