コンテンツにスキップ

Hoppscotch

REST、GraphQL、WebSocket、リアルタイムAPIをテストするためのオープンソースAPI開発エコシステムで、Postmanの軽量な代替ツール。

コマンド説明
hoppscotch.ioにアクセスHoppscotchのWebアプリを開く(インストール不要)
hoppscotch.io/downloadからダウンロードデスクトップアプリをインストール(macOS、Windows、Linux)
GitHub、Google、またはメールでサインインチーム同期用のアカウントを作成
ブラウザのPWAインストールオプションProgressive Web Appとしてインストール
コマンド説明
npm install -g @hoppscotch/clinpmでCLIをグローバルインストール
npx @hoppscotch/cliインストールせずにCLIを実行
hopp --versionCLIバージョンを表示
hopp --helpCLIヘルプを表示
コマンド説明
docker pull hoppscotch/hoppscotchDockerイメージをプル
docker compose up -dセルフホストインスタンスを起動
# セルフホストHoppscotch用のdocker-compose.yml
version: "3"
services:
  hoppscotch:
    image: hoppscotch/hoppscotch:latest
    ports:
      - "3000:3000"   # Web UI
      - "3100:3100"   # 管理ダッシュボード
      - "3170:3170"   # バックエンドAPI
    environment:
      DATABASE_URL: postgresql://user:pass@db:5432/hoppscotch
      JWT_SECRET: your-jwt-secret-here
      TOKEN_SALT_COMPLEXITY: 10
      MAGIC_LINK_TOKEN_VALIDITY: 3
      REFRESH_TOKEN_VALIDITY: 604800000
      ACCESS_TOKEN_VALIDITY: 86400000
      VITE_ALLOWED_AUTH_PROVIDERS: GITHUB,GOOGLE,EMAIL
    depends_on:
      - db

  db:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: hoppscotch

volumes:
  postgres_data:
コマンド説明
メソッドを選択(GET、POST、PUT、DELETE、PATCH)ドロップダウンからHTTPメソッドを選択
アドレスバーにURLを入力リクエストエンドポイントを設定
「Send」をクリックリクエストを実行
Ctrl + Enterリクエストを送信(キーボードショートカット)
Ctrl + Gリクエストを送信してレスポンスをダウンロード
Ctrl + Kコマンドパレットを開く
コマンド説明
「Body」タブをクリック → タイプを選択リクエストボディの形式を設定
「application/json」を選択JSONボディ(最も一般的)
「multipart/form-data」を選択ファイルアップロード
「application/x-www-form-urlencoded」を選択フォームデータ
「text/plain」を選択生テキストボディ
「application/xml」を選択XMLボディ
「Binary」を選択生バイナリデータ
コマンド説明
「Headers」タブをクリック → ヘッダーを追加カスタムリクエストヘッダーを追加
「Parameters」タブをクリックURLクエリパラメータを追加
ヘッダーの一括編集モード複数のヘッダーを一度にペースト
ヘッダーの有効/無効を切り替え削除せずに無効化
値に<<variable>>を使用環境変数を参照
コマンド説明
レスポンスボディを表示JSON、HTML、XML、バイナリ、画像
レスポンスの「Headers」タブをクリックレスポンスヘッダーを確認
ステータスコードと時間を表示HTTPステータス、レイテンシー、サイズ
レスポンスの「Copy」をクリックレスポンスをクリップボードにコピー
「Download」をクリックレスポンスをファイルとしてダウンロード
JSONレスポンスは自動整形折りたたみ可能なツリービュー
「Timeline」をクリックリクエスト/レスポンスのタイムラインを表示
Method:  POST
URL:     https://api.example.com/users
Headers:
  Content-Type: application/json
  Authorization: Bearer <<auth_token>>

Body (JSON):
{
  "name": "Alice Smith",
  "email": "alice@example.com",
  "role": "admin"
}

Response: 201 Created (145ms, 234 B)
{
  "id": 42,
  "name": "Alice Smith",
  "email": "alice@example.com",
  "role": "admin",
  "created_at": "2024-01-15T10:30:00Z"
}
コマンド説明
コレクションパネルの「+」をクリック新しいコレクションを作成
コレクションを右クリック → 「New Request」コレクションにリクエストを追加
コレクションを右クリック → 「New Folder」サブフォルダで整理
リクエストをフォルダ間でドラッグコレクションアイテムを並べ替え
右クリック → 「Duplicate」コレクションを複製
右クリック → 「Properties」コレクション設定を編集
右クリック → 「Delete」コレクションを削除
Ctrl + Shift + Pコレクション内を検索
コマンド説明
「Import」をクリック → ファイルを選択コレクションをインポート
右クリック → 「Export」コレクションをJSONとしてエクスポート
Postman Collection v2からインポートPostman互換
OpenAPI/Swagger仕様からインポートリクエストを自動生成
InsomniaからインポートInsomnia互換
cURLからインポートcURLコマンドをペースト
HARからインポートHTTP Archiveをインポート
サポートされるインポート形式:
  - Hoppscotch Collection(ネイティブJSON)
  - Postman Collection v2
  - OpenAPI 3.0 / Swagger 2.0
  - Insomnia v4
  - cURLコマンド
  - HAR(HTTP Archive)

cURLからのインポート:
  URLバーにcURLコマンドを直接ペースト
  Hoppscotchがメソッド、ヘッダー、ボディ、URLを自動パース
コマンド説明
サイドバーの「Environments」をクリック環境マネージャーを開く
「+」をクリックして環境を作成新しい環境を作成
key: valueペアを追加変数を定義
リクエストで<<variable_name>>を使用任意のフィールドで変数を参照
ドロップダウンから環境を選択環境をアクティブ化
「Global」タブをクリックグローバル変数を設定(常にアクティブ)
右クリック → 「Export」環境をJSONとしてエクスポート
右クリック → 「Duplicate」環境を複製
タイプ説明
通常変数UIに表示、コレクションにエクスポート
シークレット変数UIでマスク、エクスポートされない
グローバル変数すべての環境で利用可能
環境変数環境がアクティブな時のみ利用可能
環境: "Production"
┌───────────────┬──────────────────────────────┬──────────┐
│ Key           │ Value                        │ Type     │
├───────────────┼──────────────────────────────┼──────────┤
│ base_url      │ https://api.example.com      │ Regular  │
│ api_version   │ v2                           │ Regular  │
│ auth_token    │ eyJhbGciOiJIUzI1NiIsIn...    │ Secret   │
│ timeout       │ 30000                        │ Regular  │
└───────────────┴──────────────────────────────┴──────────┘

リクエストでの使用:
  URL:    <<base_url>>/<<api_version>>/users
  Header: Authorization: Bearer <<auth_token>>
コマンド説明
「Bearer Token」を選択Bearerトークン認証を追加
「Basic Auth」を選択ユーザー名/パスワード認証
「OAuth 2.0」を選択OAuth 2.0フローを設定
「API Key」を選択ヘッダーまたはクエリパラメータにAPIキーを追加
「AWS Signature」を選択AWS Signature V4認証
「Inherit from parent」を選択コレクションから認証を継承
「None」を選択認証を削除
トークンフィールドは<<variables>>をサポート認証トークンに環境変数を使用
OAuth 2.0設定:
  Grant Type:       Authorization Code
  Auth URL:         https://auth.example.com/authorize
  Token URL:        https://auth.example.com/token
  Client ID:        <<client_id>>
  Client Secret:    <<client_secret>>
  Scope:            read write
  Redirect URI:     自動設定

サポートされるgrant type:
  - Authorization Code(+ PKCE)
  - Client Credentials
  - Implicit
  - Password Credentials
コマンド説明
「Realtime」→「WebSocket」をクリックWebSocketクライアントを開く
wss:// URLを入力WebSocketエンドポイントを設定
「Connect」をクリック接続を確立
メッセージを入力 →「Send」をクリックサーバーにメッセージを送信
ログパネルでメッセージを表示送受信を監視
「Disconnect」をクリック接続を閉じる
プロトコル/ヘッダーを追加接続パラメータを設定
コマンド説明
「Realtime」→「SSE」をクリックServer-Sent Eventsをテスト
SSEエンドポイントURLを入力イベントストリームURLを設定
「Connect」をクリックイベントの受信を開始
イベントをリアルタイムで記録イベントストリームを監視
「Disconnect」をクリック受信を停止
コマンド説明
「Realtime」→「MQTT」をクリックMQTT接続をテスト
mqtt://またはwss:// URLを入力MQTTブローカーURLを設定
Client ID、ユーザー名、パスワードを設定認証情報を設定
トピックをサブスクライブメッセージをリッスン
トピックにパブリッシュメッセージを送信
コマンド説明
「Realtime」→「Socket.IO」をクリックSocket.IO接続をテスト
サーバーURLを入力Socket.IOエンドポイントを設定
イベントをリッスン名前付きイベントをサブスクライブ
データ付きでイベントを発行名前付きイベントを送信
接続ステータスを表示接続/切断を監視
コマンド説明
「GraphQL」タブをクリックGraphQLモードに切り替え
GraphQLエンドポイントURLを入力GraphQLサーバーURLを設定
エディタパネルでクエリを作成GraphQLクエリを構成
「Schema」をクリックしてスキーマを取得自動補完用のサーバースキーマを読み込み
Variablesパネルで変数を追加クエリ変数をJSONで設定
認証用のヘッダーを追加認証ヘッダーを設定
「Run」またはCtrl + Enterをクリッククエリを実行
スキーマからの自動補完を使用フィールドの候補を取得
Endpoint: https://api.example.com/graphql

Query:
  query GetUsers($limit: Int!) {
    users(limit: $limit) {
      id
      name
      email
      posts {
        title
        createdAt
      }
    }
  }

Variables:
  {
    "limit": 10
  }

Headers:
  Authorization: Bearer <<auth_token>>
コマンド説明
hopp test collection.jsonコレクションテストを実行
hopp test collection.json -e environment.json環境付きで実行
hopp test collection.json --delay 500リクエスト間の遅延(ミリ秒)
hopp test collection.json --reporter junitJUnitテストレポート出力
hopp test collection.json --reporter jsonJSONテストレポート出力
hopp test collection.json --bail最初の失敗で停止
hopp test collection.json --env-var KEY=VALUE環境変数を上書き
# 環境付きでコレクションを実行
hopp test api-tests.json -e production.json

# 遅延付きで最初の失敗で停止
hopp test api-tests.json --delay 1000 --bail

# CI/CD用にJUnitレポートを生成
hopp test api-tests.json --reporter junit > results.xml

# 特定の変数を上書き
hopp test api-tests.json \
  --env-var "base_url=https://staging.example.com" \
  --env-var "auth_token=test-token-123"

# CI/CDパイプラインの例
hopp test api-tests.json -e staging.json --bail --reporter junit

プリリクエストとポストリクエストスクリプト

Section titled “プリリクエストとポストリクエストスクリプト”
コマンド説明
「Pre-request」タブをクリックリクエスト前に実行するスクリプトを追加
「Tests」タブをクリックレスポンス後に実行するスクリプトを追加
pw.env.set("key", "value")環境変数を設定
pw.env.get("key")環境変数を取得
pw.expect(response.status).toBe(200)ステータスコードをアサート
pw.expect(response.body).toHaveProperty("id")ボディのプロパティをアサート
// プリリクエスト: タイムスタンプを生成
pw.env.set("timestamp", Date.now().toString());

// プリリクエスト: ランダムIDを生成
pw.env.set("random_id", Math.random().toString(36).slice(2));

// テスト: ステータスコードを確認
pw.test("Status is 200", () => {
  pw.expect(pw.response.status).toBe(200);
});

// テスト: レスポンスボディを確認
pw.test("Response has user data", () => {
  const body = pw.response.body;
  pw.expect(body).toHaveProperty("id");
  pw.expect(body).toHaveProperty("name");
  pw.expect(body.name).toBe("Alice");
});

// テスト: レスポンス時間を確認
pw.test("Response is fast", () => {
  pw.expect(pw.response.status).toBeLessThan(500);
});

// テスト: 次のリクエスト用にトークンを保存
pw.test("Extract auth token", () => {
  const token = pw.response.body.access_token;
  pw.env.set("auth_token", token);
});
ショートカット説明
Ctrl + Enterリクエストを送信
Ctrl + Kコマンドパレット
Ctrl + S現在のリクエストを保存
Ctrl + Shift + Pコレクションを検索
Ctrl + /サイドバーを切り替え
Alt + ↑履歴の前のリクエスト
Alt + ↓履歴の次のリクエスト
F11全画面を切り替え
コマンド説明
サイドバーからチームを作成チームワークスペースをセットアップ
メールでメンバーを招待コラボレーターを追加
共有コレクションチーム全体のリクエストライブラリ
共有環境チーム全体の変数セット
リアルタイムコラボレーションチームの編集をライブで確認
ロールベースのアクセスオーナー、エディター、ビューアーの役割
  1. APIドメインごとにコレクションを整理する — 関連するエンドポイントをコレクションにグループ化し、リソースタイプ(ユーザー、注文、商品)ごとにフォルダを使用して見つけやすくしましょう。

  2. ステージングとプロダクションに環境を使用する — 同じ変数名で異なる値を持つdev、staging、production用の別々の環境を作成しましょう。ワンクリックで切り替えられます。

  3. シークレットをシークレット変数として保存する — APIキーとトークンを「secret」タイプとしてマークし、UIでマスクされエクスポートから除外されるようにしましょう。

  4. 認証にプリリクエストスクリプトを使用する — 手動でコピーする代わりに、各リクエスト前にタイムスタンプの生成、署名の計算、トークンの更新を自動的に行いましょう。

  5. 重要なエンドポイントにテストを書く — ステータスコード、レスポンス構造、重要な値を検証するテストスクリプトを追加しましょう。CI/CDパイプラインでCLI経由で実行できます。

  6. OpenAPI仕様からインポートする — ドキュメント化されたAPIを操作する場合、OpenAPI/Swagger仕様をインポートして正しいパラメータを持つすべてのエンドポイントを自動生成しましょう。

  7. コレクションレベルの認証を使用する — コレクションレベルで認証を設定し、個々のリクエストでは「Inherit from parent」を使用して認証設定の重複を避けましょう。

  8. コレクションをバージョン管理にエクスポートする — コレクションをJSONとしてエクスポートしてリポジトリにコミットし、バージョン管理とチーム共有を行いましょう。

  9. CI/CDでCLIを使用する — パイプラインにhopp testを追加して、デプロイごとにAPIテストを実行し、本番稼働前にエンドポイントが動作することを確認しましょう。

  10. 機密APIにはセルフホストする — 内部APIや機密APIをテストする場合、セルフホストのDockerバージョンをデプロイして、すべてのデータをインフラ内に保持しましょう。