pepe について
pepe はリアルタイムのダッシュボードを備えた HTTP 負荷テストツールで、URL への ping による遅延のフェーズ別分解も行います。スクリプトや CI で利用できるバージョン付き JSON レポートを出力し、キャパシティの上限確認や実行結果の比較を行う開発者・運用担当者に適しています。テスト対象より自身の負荷が小さいことを明示しています。
主な機能
- 01スループット、レイテンシ分位、ステータスコードを表示するダッシュボード
- 02ping モードによる 1 リクエストのフェーズ別時間の分解
- 03段階的に同時接続数を上げるランプモード
- 04OpenAPI、フロー、アクセスログのリプレイによる入力
- 05ガードレール、バージョン付き JSON レポート、終了コード
- 06pepe mcp コマンドによるエージェント向けツールの提供
活用シーン
- 01リリース前に API の負荷テストを行い、2 回の結果を比較する
- 02CI でレイテンシが基準値を超えた場合にジョブを失敗させる
- 03ping で URL の DNS、TLS、最初のバイトまでの遅延を調べる
MCP 対応
pepe は pepe mcp コマンドを備えており、起動時に設定されたガードレールの下で、負荷テストの各モードを MCP クライアントやエージェント向けのツールとして提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
pepe
テスト対象のサーバーよりも低コストで動作する、ライブダッシュボード付きの HTTP 負荷生成ツールです。
インストール · クイックスタート · できること · スクリプト、CI、エージェント · 比較 · ドキュメント · ロードマップ

pepeはURLにリクエストを送り、指定した数だけ同時に実行し、スループット、レイテンシのパーセンタイルとヒートマップ、ステータスコード、原因別の失敗数、任意のリクエストを開けるログなど、結果をリアルタイムで表示します。実行が終わると、わかりやすい言葉で判定を示し、時間がどこにかかったかを説明します。curlコマンドを入力として受け取り、負荷を段階的に上げてターゲットが処理しきれなくなる点を見つけたり、OpenAPI仕様の全エンドポイントに負荷テストを行ったり、アクセスログを再生したり、各ステップの結果を次のステップに渡すリクエストフローを実行したりできます。pepe pingは、同じエンジンを毎秒1リクエストで動かします。URLのレイテンシを時間経過とともにグラフ化し、各pingをDNS、接続、TLS、最初のバイト、ダウンロードに分け、確認すべき点も示します。
pepeは軽量でもあります。1スレッドで、Apple M4 Proでは毎秒16万件、Linuxでは毎秒40万件のリクエストを送信できます。wrkよりリクエストあたりのCPU使用量とメモリ使用量が少なく、ohaと比べてCPU使用量は4分の1から2分の1、メモリ使用量は10分の1以下です。また、制限要因がターゲットではなくpepe自身の場合も知らせます。
インストール
curl -LsSf https://pepe.mhaimdat.com/install.sh | sh # macOS and Linux
brew install omarmhaimdat/pepe/pepe # Homebrew
nix run github:omarmhaimdat/pepe -- https://example.com # Nix, without installing
docker run --rm -it ghcr.io/omarmhaimdat/pepe https://example.com
cargo install --locked --git https://github.com/omarmhaimdat/pepe
Windowsでは、PowerShellで次を実行します:powershell -ExecutionPolicy Bypass -c "irm https://pepe.mhaimdat.com/install.ps1 | iex"。各リリースには、macOS、Linux、Windows向けのバイナリとチェックサム、署名済みの来歴情報、シェル補完、manページも含まれています。pepe self-updateで最新リリースをインストールできます。pepeは1日1回更新を確認し、実行終了時にそのことを知らせます。詳しくはインストールページをご覧ください。
クイックスタート
pepe https://example.com # 100 requests, one per core at a time, and watch
pepe -z 30s -c 50 -m POST -H 'Content-Type: application/json' -d '{"key":"value"}' https://httpbin.org/post
pepe -z 30s --curl -- curl 'https://api.example.com/items' -H 'Authorization: Bearer …' # from "Copy as cURL"
pepe ping https://example.com --once # three pings, then why it is slow, and out
pepe # the setup screen: every option on a form
ダッシュボードでは、spaceで一時停止、+と-で同時実行数を変更、tabでビューを切り替え、enterでリクエストを確認、?ですべてのキーを一覧表示、qで終了できます。終了後も判定はシェルに残ります。
できること
| コマンド | 用途 | ドキュメント |
|---|---|---|
pepe URL | ライブダッシュボード付きの負荷テストです。負荷の形状(--number、--duration、--concurrency、--rate、--warmup、--threads)、任意のヘッダー、ボディ、メソッド、curl コマンド、コードの隣に置く pepe.toml、--snapshot を使った長時間実行に対応します | 負荷テスト、ダッシュボード |
pepe ping URL… | 1 秒ごとにリクエストを送信し、DNS、接続、TLS、最初のバイト、ダウンロードに分けてグラフ表示します。複数のターゲット、TCP ping、--slo の制限、HTTP/2、証明書の有効期限、確認すべき点を示す指摘にも対応します | Ping |
pepe ramp URL | 同時実行数を段階的に増やし、維持できたレベル、スループットの伸びが止まった地点、動作しなくなった地点、容量の推定値を見つけます | ランプテスト |
pepe api SPEC | OpenAPI 3 または Swagger 2 の仕様にあるエンドポイントを、画面上またはタグで選択し、パラメーターや認証情報とともに実行します | OpenAPI |
pepe flow FILE | リクエストを順番に実行し、各ステップに直前のステップの結果を渡します。ログインしてトークンを取得し、それを使う、といった処理ができます | フロー |
pepe replay LOG | アクセスログ内の URL を、実際の比率で別のホストに送信します | リプレイ |
pepe logs FILES | nginx のログから、現在のリクエストレートと、分・時・日ごとのリクエストレート、パス、エラー、ログ行そのものをリアルタイムで確認できます | nginx ログ |
pepe compare A B | 2 つのレポート間の変化を、判定の言葉で示します。バッジと SVG カードも表示します | 比較 |
すべてのコマンドのフラグはコマンドリファレンスに記載されており、man pepe にも同じ内容があります。
スクリプト、CI、エージェント
すべてのモードは画面なしで実行でき、プログラムから呼び出せるように作られています。
- バージョン管理された JSON レポート:
--jsonを指定します(schema_version: 1。pepe schemaは各レポートの JSON Schema を出力します)。レポートには判定と指摘が含まれます。--jsonを指定せずにパイプへ出力すると、テキスト形式の判定になります。 - 意味のある終了コード:指定どおりの場合は 0、起動できなかった場合または応答がなかった場合は 1、使用方法の誤りまたはガードレール違反の場合は 2、制限を超えた場合は 4(
--fail-if 'p99 > 300ms'、ping の--slo)。 - 送信前に確認されるガードレール:
--allow-host .example.com、--max-requests、--max-rate、--max-concurrency、送信予定の内容を表示するだけで実際には送信しない--dry-run。これらはpepe.tomlに設定できます。 - GitHub Action:テストを実行し、数値をジョブのサマリーと出力に追加します。
pepe compareでプルリクエストをベースブランチと比較し、結果にコメントし、ジョブを失敗させることもできます:CI と Docker。 - Prometheus メトリクス:
--metrics :9100を指定すると、長時間実行する負荷テストや ping を Grafana で確認できます。 - MCP サーバー:
pepe mcpは、起動時に設定されたガードレールのもとで、各モードをエージェント向けのツールとして提供します。AGENTS.md はエージェントが最初に読むファイルです。
- uses: omarmhaimdat/pepe@v0
with:
url: https://staging.example.com/api/health
args: -z 30s -c 20 --fail-if 'p99 > 300ms'
baseline: auto
comment: true
pepe の比較
bench/ のスイートを使い、メモリから応答するローカルサーバーに対して測定しています。そのため、測定対象となるコストはクライアント側です。1,000 リクエストあたりの CPU ミリ秒、ピークメモリ、各ツールが報告した 1 秒あたりのリクエスト数は次のとおりです。
| ワークロード | pepe | oha | vegeta |
|---|---|---|---|
| GET、64 接続 | 6.2 ms · 9 MB · 160k req/s | 23.0 ms · 78 MB · 161k req/s | 90.4 ms · 26 MB · 76k req/s |
| GET、1,000 接続 | 6.0 ms · 12 MB · 163k req/s | 21.6 ms · 101 MB · 147k req/s | 52.7 ms · 92 MB · 131k req/s |
| HTTPS、64 接続 | 6.8 ms · 12 MB · 142k req/s | 24.8 ms · 60 MB · 156k req/s | 69.8 ms · 30 MB · 90k req/s |
これらは Apple M4 Pro での pepe のシングルスレッドの数値で、ループバックの上限は毎秒約 175k リクエストです。Linux(4 vCPU の arm64 VM、リリースされている musl ビルド)で、隣で wrk を 1 スレッド実行した場合は次のとおりです。
| ワークロード | pepe | wrk | oha |
|---|---|---|---|
| GET、64 接続 | 2.4 ms · 4.0 MB · 398k req/s | 3.5 ms · 4.5 MB · 282k req/s | 6.8 ms · 67 MB · 305k req/s |
| GET、1,000 接続 | 3.2 ms · 5.8 MB · 296k req/s | 4.4 ms · 7.7 MB · 228k req/s | 5.6 ms · 73 MB · 183k req/s |
| HTTPS、64 接続 | 3.3 ms · 6.0 MB · 284k req/s | 4.5 ms · 10.8 MB · 218k req/s | 8.1 ms · 42 MB · 250k req/s |
| 1,000 万リクエスト、256 接続 | 2.9 ms · 4.5 MB · 343k req/s | 3.3 ms · 4.6 MB · 304k req/s | 6.5 ms · 2,404 MB · 316k req/s |
pepe が同等の性能となるワークロード(1,000 接続時の低速なターゲット、TLS 経由の 16 KB ボディ)、glibc ビルドによる違い、k6、プロファイル、測定方法など、すべてのワークロードについては bench/README.md をご覧ください。ターゲットが複数スレッドからの送信を処理できる場合、pepe はその旨を示し、--threads auto でスレッドを追加します。
ドキュメント
すべてのオプションと例を含む、ページごとのマニュアルは pepe.mhaimdat.com/docs にあります。ソースは docs/ 以下の Markdown ファイルです。また、コマンドリファレンスはコマンド定義から生成されるため、バイナリとの不一致は生じません。各リリースでの変更点は CHANGELOG.md に、今後の予定は順番に ROADMAP.md に記載されています。
コントリビューション
課題報告やプルリクエストを歓迎します。ビルド、テスト、生成ファイル、記録、ベンチマーク、リリースの作成方法については CONTRIBUTING.md をご覧ください。
ライセンス
MIT です。LICENSE をご覧ください。
謝辞
リクエスト処理には tokio、rustls、httparse、h2、reqwest、ダッシュボードには ratatui と crossterm、コマンドラインには clap を使用しています。また、ベンチマーク表で良き仲間となってくれた oha、vegeta、wrk、k6 に感謝します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。