APIテストツール比較:Hoppscotch vs Insomnia vs Bruno でAPIを開発・テストする
オープンソースラボ編集部 ・ 2026年6月13日
APIテストツール比較:Hoppscotch vs Insomnia vs Bruno でAPIを開発・テストする
REST API・GraphQL・WebSocket・gRPCを開発・テスト・ドキュメント化するAPI開発ツールはPostmanが長らくデファクトスタンダードでしたが、クラウド依存・価格改定・プライバシー懸念から2026年にかけてOSSの代替ツールへの移行が加速しています。Hoppscotch(Web特化・軽量)・Insomnia(OSSフォーク・デスクトップ)・Bruno(Git対応・Gitフレンドリー)が主要なOSS代替です。
OSSのAPIテストツールを使う理由
- Postmanの価格改定: 2023年のPostman無料プランのコレクション制限→チームでの共有が有料化
- クラウド非同期懸念: APIリクエスト・レスポンスがPostmanのクラウドを経由→機密APIキーのプライバシー問題
- Gitとの統合: APIコレクションをGitリポジトリでバージョン管理・PRレビュー・チーム共有したい
- ローカル実行: 完全ローカルで動作してどこにもデータを送信しないツールが必要
主要ツールの概要
Hoppscotch
2019年公開、TypeScript製のOSSです。GitHubスター71k+。ブラウザ・PWAで動作する最軽量なAPIテストツールで、インストール不要でWebブラウザから即使えます。REST・GraphQL・WebSocket・SSE・Socket.IO・MQTT・gRPCに対応し、チームコラボレーションプラン(Hoppscotch Cloud)またはセルフホスト(Docker)で運用できます。
# docker-compose.yml: Hoppscotch セルフホスト
version: "3.8"
services:
hoppscotch-aio:
image: hoppscotch/hoppscotch:latest
restart: unless-stopped
ports:
- "3000:3000" # フロントエンド
- "3170:3170" # バックエンドAPI
- "3100:3100" # 管理者パネル
environment:
DATABASE_URL: postgresql://hoppscotch:${DB_PASS}@postgres:5432/hoppscotch
JWT_SECRET: ${JWT_SECRET}
SESSION_SECRET: ${SESSION_SECRET}
REDIRECT_URL: http://localhost:3000
WHITELISTED_ORIGINS: http://localhost:3000,http://localhost:3100
VITE_BASE_URL: http://localhost:3000
VITE_SHORTCODE_BASE_URL: http://localhost:3000
VITE_ADMIN_URL: http://localhost:3100
VITE_BACKEND_GQL_URL: http://localhost:3170/graphql
VITE_BACKEND_WS_URL: wss://localhost:3170/graphql
MAILER_SMTP_URL: smtp://${SMTP_USER}:${SMTP_PASS}@${SMTP_HOST}:587
MAILER_ADDRESS_FROM: '"Hoppscotch" <noreply@example.com>'
depends_on: [postgres]
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: hoppscotch
POSTGRES_USER: hoppscotch
POSTGRES_PASSWORD: ${DB_PASS}
volumes:
- hoppscotch_pg:/var/lib/postgresql/data
volumes:
hoppscotch_pg:
// Hoppscotch Pre-request Script: ログイン→JWTトークンを次リクエストに自動設定
// (Hoppscotch の Pre-request Script タブに記述)
const loginResponse = await pw.sendRequest({
url: 'https://api.example.com/auth/login',
method: 'POST',
headers: [{ key: 'Content-Type', value: 'application/json' }],
body: JSON.stringify({
email: 'admin@example.com',
password: pw.env.get('ADMIN_PASSWORD'),
}),
})
const data = loginResponse.json()
if (data.access_token) {
pw.env.set('AUTH_TOKEN', data.access_token)
console.log('トークン取得成功:', data.access_token.slice(0, 20) + '...')
} else {
throw new Error('ログイン失敗: ' + JSON.stringify(data))
}
Insomnia
2015年公開(Kong Inc.買収)、TypeScript製のOSSです。GitHubスター35k+。デスクトップ向けの高機能APIテストツールで、2023年にCong Incがクラウドログインをデフォルトにしたことでコミュニティのフォーク(Insomnium)が生まれましたが、現在はコア機能のオープンソース版が継続されています。REST・GraphQL・gRPC・WebSocket対応。
# Python: Insomnia コレクションをCI/CDで自動実行(Newman/Insomnia CLIで代用)
# Insomniaのコレクションをエクスポートしてcurl/httpieで実行するサンプル
import subprocess
import json
def run_api_tests(base_url: str, auth_token: str) -> dict:
'''APIエンドポイントをcurlで自動テスト(Insomnia形式コレクションの代替実装)'''
tests = [
{
'name': 'GET /api/users',
'method': 'GET',
'path': '/api/users',
'expected_status': 200,
},
{
'name': 'POST /api/users',
'method': 'POST',
'path': '/api/users',
'body': {'name': 'Test User', 'email': 'test@example.com'},
'expected_status': 201,
},
]
results = []
for test in tests:
cmd = ['curl', '-s', '-o', '/dev/null', '-w', '%{http_code}',
'-X', test['method'],
'-H', f'Authorization: Bearer {auth_token}',
'-H', 'Content-Type: application/json']
if 'body' in test:
cmd.extend(['-d', json.dumps(test['body'])])
cmd.append(f'{base_url}{test["path"]}')
result = subprocess.run(cmd, capture_output=True, text=True)
status_code = int(result.stdout.strip())
passed = status_code == test['expected_status']
results.append({'name': test['name'], 'status': status_code, 'passed': passed})
print(f'{"✓" if passed else "✗"} {test["name"]}: {status_code}')
return {'total': len(results), 'passed': sum(1 for r in results if r['passed'])}
Bruno
2022年公開、TypeScript製のOSSです。GitHubスター30k+。Gitファーストなデスクトップ型APIテストツールで、コレクションをGitリポジトリに.bruテキスト形式で保存します。クラウド同期なし・データは完全ローカル・.bruファイルをgit管理してチームと共有・PRでAPIコレクションをレビューできます。
# orders.bru: Bruno のコレクションファイル(テキスト形式でGit管理可能)
meta {
name: Create Order
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/orders
body: json
auth: bearer
}
auth:bearer {
token: {{authToken}}
}
headers {
Content-Type: application/json
X-Request-ID: {{$randomUUID}}
}
body:json {
{
"product_id": "{{productId}}",
"quantity": 1,
"shipping_address": {
"zip": "150-0001",
"prefecture": "東京都",
"city": "渋谷区"
}
}
}
tests {
test("Status is 201", function() {
expect(res.status).to.equal(201);
});
test("Order ID exists", function() {
expect(res.body.order_id).to.not.be.undefined;
});
test("Total price is positive", function() {
expect(res.body.total_price).to.be.above(0);
});
}
# Bruno CLI でGitHub Actions CI/CDから実行
npm install -g @usebruno/cli
# コレクション全体を実行
bru run --env production --output report.html
# 特定フォルダーのみ実行
bru run orders/ --env staging
# GitHub Actions での利用
# .github/workflows/api-test.yml
# - run: bru run api-tests/ --env ci --reporter junit --output test-results.xml
機能比較表
| 比較項目 | Hoppscotch | Insomnia | Bruno |
|---|---|---|---|
| Git管理(.bru形式) | △ | △ | ✅ 最強 |
| ブラウザ/PWA | ✅ | ❌ | ❌ |
| セルフホスト | ✅(Docker) | ❌ | N/A |
| WebSocket/SSE/gRPC | ✅ | △ | △ |
| GitHub Stars | 71k+ | 35k+ | 30k+ |
APIテストツールはDevOpsカテゴリ/categories/devopsのGitHub Actions・GitLab CI/CDパイプラインと統合して「PushのたびにAPIテスト自動実行」の継続的テスト基盤を構築します。セキュリティカテゴリ/categories/securityのOIDC認証エンドポイント・JWT検証・OAuthフローのデバッグにHoppscotchの認証ヘルパー機能が活用されています。
FAQ
Q. HoppscotchをPostmanの代替としてチームで使うポイントは?
A. Hoppscotchのワークスペース・コレクション・環境変数・チームメンバー招待を設定して運用します。①ワークスペース: チーム専用ワークスペースを作成→メンバーをEditor権限で招待②コレクション: APIエンドポイントをフォルダー構造で整理(/auth・/users・/orders等)③環境変数: Dev・Staging・Production環境を作成→BASE_URL・API_KEYを環境ごとに設定④Pre-request Script: ログイン→トークン取得→後続リクエストのAuthヘッダー自動設定⑤リアルタイムコラボ(Hoppscotch Cloud): チームメンバーが同時にコレクションを編集。セルフホストのメリット: APIキー・認証情報がHoppscotchのクラウドに送信されない→機密APIの開発に安全。
Q. BrunoコレクションをGitHub ActionsでCI/CDテストとして実行するには?
A. @usebruno/cliをGitHub Actionsで実行してAPIテストをCIパイプラインに組み込みます。ワークフロー: ①.bruファイルをGitリポジトリのapi-tests/フォルダーにコミット②GitHub Actionsでnpm install -g @usebruno/cli→bru run api-tests/ --env ci --reporter junit③JUnit形式の結果をGitHub Actions TestReporterで表示④環境変数: --env ciでenvironments/ci.bruの変数を使用→BASE_URL=https://staging.example.com・AUTH_TOKEN=${{ secrets.API_TOKEN }}。Bruの設計思想: コレクションがコードと同じGitリポジトリで管理される→APIの変更とテストの変更を同一PRでレビューできる。
Q. Insomnia・Bruno・HoppscotchでgRPC APIをテストするには?
A. Hoppscotchは組み込みgRPCサポートが最も充実しています。Hoppscotch: ①New Request→Protocol: gRPC②Server URL: grpc://localhost:50051③.protoファイルをアップロードまたはServer Reflectionで自動取得④メソッド選択→リクエストボディ(JSON形式)を入力→Send→レスポンスをリアルタイム表示。Streaming RPC対応: Server Streaming・Client Streaming・Bidirectional Streamingすべてに対応。Bruno gRPC: @usebruno/cli v1.10+でgRPC対応が追加済み(.bruファイルのtype: grpcで定義)。Insomnia: gRPC対応あり(デスクトップ版)→.protoインポートからメソッド一覧を自動生成。
Q. APIテストツールで環境変数(Dev・Staging・Prod)を安全に管理するには?
A. 環境変数ファイルをGitに追加する際に機密情報を除外して.envパターンで管理します。Bruno: environments/フォルダーにdev.bru・staging.bru・prod.bruを作成→機密値(APIキー・パスワード)はSecretタイプに設定→Gitに機密値を含むファイルをコミットしない(.gitignoreにenvironments/prod.bru等を追加)→CIでは環境変数として注入(BRU_ENV_API_KEY=${{ secrets.PROD_API_KEY }})。Hoppscotch: 環境変数エクスポート時に「Secret変数を除外」オプションで機密値をGitに含めずチームへコレクション共有が可能。セキュリティベストプラクティス: テスト用APIキーとプロダクションAPIキーを分離→テスト用キーのスコープを最小化(読み取りのみ等)。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| ブラウザ・PWA・セルフホスト・WebSocket/gRPC | Hoppscotch |
| Gitファースト・CIテスト自動化・ローカルのみ | Bruno |
| デスクトップ・GraphQL・既存Insomnia資産 | Insomnia |