DEV Community

Cover image for Keployとは? レコード&リプレイAPIテスト
Akira
Akira

Posted on • Originally published at apidog.com

Keployとは? レコード&リプレイAPIテスト

APIテストを手作業で書かずに作成したいなら、Keployは有力な選択肢です。Keployは実行中のアプリケーションのトラフィックを観測し、実際のAPIインタラクションを再現可能なテストに変換します。この記事では、Keployが内部で何をしているのか、どのように導入するのか、そしてどのようなケースで使うべきかを実装視点で整理します。

今すぐApidogを試す

このガイドでは、Keployとは何か、記録・再生エンジンがeBPFネットワーク層でどのように機能するか、2つの主要ワークフロー、インストールと実行方法、導入前に知っておくべき制限について説明します。

Keployとは

Keployは、API、統合、およびエンドツーエンドテストのために、安全で隔離された本番サンドボックスを作成するオープンソースプラットフォームです。ライセンスはApache-2.0です。

Keployの基本的な考え方はシンプルです。アプリケーションはすでに、テストしたい実際の動作を実行しています。その動作をテストコードとして手で書く代わりに、Keployが実行時の通信を観測し、再現可能なテストケースへ変換します。

record replay

Keployには主に2つの使い方があります。

  1. 記録と再生(Record and replay)

    実際のAPIインタラクションと依存関係呼び出しをキャプチャし、後から決定論的に再生します。

  2. AIテスト生成(AI test generation)

    OpenAPI仕様、Postmanコレクション、cURLコマンド、ライブエンドポイントなどから、検証済みのAPIテストスイートを生成します。

どちらの方法でも、ライブ依存関係にアクセスせずにテストを実行するためのテストケースとモックを生成できます。

Keployのリポジトリはgithub.com/keploy/keploy、公式ドキュメントはkeploy.io/docsにあります。

eBPF層でKeployが記録する仕組み

Keployの特徴は、アプリケーションコードを変更せずにAPI通信をキャプチャできる点です。

keploy recordを実行しても、SDKを追加したり、ハンドラーにデコレーターを付けたり、テスト用の計測コードを埋め込んだりする必要はありません。KeployはeBPFを使い、Linuxカーネルのネットワーク層でトラフィックを監視します。

実装上のメリットは次のとおりです。

  • コード変更なしでキャプチャできる

    アプリケーションの内部ではなく、その下のネットワーク層で通信を観測します。

  • 言語に依存しない

    Go、Java、Node.js、Python、Rustなど、アプリケーションの実装言語に依存しにくい構成です。

  • 依存関係呼び出しも記録できる

    インバウンドAPIリクエストとレスポンスだけでなく、データベース、ネットワークサービス、ストリーミング基盤などへのアウトバウンド呼び出しもキャプチャします。

Keployが1つのAPIリクエストを記録するとき、以下をまとめて保存します。

  • APIリクエスト
  • APIレスポンス
  • その処理中に発生した依存関係呼び出し
  • 依存関係呼び出しに対する応答

この観測結果から、Keployは次の2種類の成果物を生成します。

  • テストケース

    期待されるリクエストとレスポンスを記述します。

  • モックとスタブ

    データベースや外部サービスなどの依存関係呼び出しに対する応答を再現します。

再生時は、keploy testが記録済みリクエストをアプリケーションへ送り、依存関係の応答を生成済みモックから返します。そのうえで、新しいレスポンスと記録済みレスポンスを比較します。

差分があれば、アプリケーションの動作が変わったことを示します。これがKeployの「記録と再生」モデルです。

Keployの2つのワークフロー

1. 記録と再生(Record and replay)

既に動作するアプリケーションがあり、すばやく回帰テストを作りたい場合に使います。

基本フローは次のとおりです。

  1. Keploy経由でアプリケーションを起動する
  2. APIを手動、既存テスト、または実トラフィックで実行する
  3. Keployが通信と依存関係呼び出しを記録する
  4. テストケースとモックが保存される
  5. 以後の変更時にkeploy testで再生する

このワークフローは、実際に観測されたランタイム動作をベースに回帰テストを作りたい場合に向いています。

2. AIテスト生成(AI test generation)

手動操作で得られるカバレッジだけでは足りない場合や、API仕様からテストを作りたい場合に使います。

Keployは次のような入力からAPIテストスイートを生成できます。

  • OpenAPI仕様
  • Postmanコレクション
  • cURLコマンド
  • ライブエンドポイント

依存関係のモックやクリーンアップパスも扱えるため、仕様ベースでテストを拡張したい場合に利用できます。

記録と再生は「実際に観測された動作」からテストを作り、AIテスト生成は「仕様やエンドポイント」からテストを補完します。スキーマからテストを生成するツールを比較している場合は、AIテストケースジェネレーターのまとめOpenAPIからテストスクリプトを生成するガイドも参考になります。

Keployのインストール

Keployはインストールスクリプトを提供しています。サポートされている環境では、次のコマンドでインストールできます。

curl --silent -O -L https://keploy.io/install.sh && source install.sh
Enter fullscreen mode Exit fullscreen mode

インストール後、keployコマンドが使えるようになります。

keploy --version
Enter fullscreen mode Exit fullscreen mode

以後は、主に次の2つのコマンドを使います。

  • keploy record
  • keploy test

KeployでAPIトラフィックを記録する

記録にはkeploy recordを使います。

keploy record -c "CMD_TO_RUN_APP"
Enter fullscreen mode Exit fullscreen mode

-cには、アプリケーションを起動するコマンドを渡します。

Node.jsアプリなら、たとえば次のようになります。

keploy record -c "node server.js"
Enter fullscreen mode Exit fullscreen mode

この状態でAPIを呼び出すと、Keployがリクエスト、レスポンス、依存関係呼び出しをキャプチャします。

例:

curl http://localhost:3000/users
Enter fullscreen mode Exit fullscreen mode

記録が完了すると、Keployはキャプチャされたテストケースとモックを保存します。

記録したテストを再生する

再生にはkeploy testを使います。

keploy test -c "CMD_TO_RUN_APP" --delay 10
Enter fullscreen mode Exit fullscreen mode

--delay 10は、記録済みリクエストを送信する前に10秒待機する設定です。アプリケーションの起動に時間がかかる場合は、この値を増やします。

例:

keploy test -c "node server.js" --delay 10
Enter fullscreen mode Exit fullscreen mode

典型的な初回セッションは次のようになります。

# 1. APIにアクセスしながら記録
keploy record -c "node server.js"

# 2. キャプチャされたケースを再生し、差分がないか確認
keploy test -c "node server.js" --delay 10
Enter fullscreen mode Exit fullscreen mode

この流れにより、既知の良好なビルドに対して一度記録し、その後の変更ごとにkeploy testで回帰チェックできます。

サポートされている言語、プロトコル、データストア

Keployはネットワーク層で通信をキャプチャするため、幅広い言語やプロトコルに対応できます。

カテゴリ サポート対象
言語 Go, Java, Node.js, Python, Rust, C#, C/C++, TypeScript など
プロトコル HTTP/REST, gRPC, GraphQL, Kafka, RabbitMQ
データストア PostgreSQL, MySQL, MongoDB, Redis

この広範な対応は、eBPFベースの設計によるものです。Keployは特定の言語ランタイムではなくネットワーク通信を読み取るため、対象サービスが対応プロトコルで通信していれば、新しい言語やフレームワークでも使いやすくなります。

CIでKeployを実行する

KeployはCIにも組み込みやすい構成です。

基本方針は次のとおりです。

  1. ローカルまたは検証環境でkeploy recordを実行する
  2. 生成されたテストケースとモックをリポジトリにコミットする
  3. CIでkeploy test -c "..."を実行する
  4. 再生結果に差分があればビルドを失敗させる

例:

keploy test -c "node server.js" --delay 10
Enter fullscreen mode Exit fullscreen mode

モックが実際の依存関係の代わりになるため、CIランナーにライブデータベースやダウンストリームサービスを用意しなくても、決定論的にテストを実行できます。

GitHub Actionsなどに組み込む場合は、アプリケーションの起動コマンドとKeployのインストール手順をジョブ内に追加します。

name: keploy-tests

on:
  pull_request:
  push:

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install Keploy
        run: |
          curl --silent -O -L https://keploy.io/install.sh && source install.sh

      - name: Run Keploy tests
        run: |
          keploy test -c "node server.js" --delay 10
Enter fullscreen mode Exit fullscreen mode

実際のプロジェクトでは、依存関係のインストール、環境変数、ビルドステップも追加してください。

導入前に確認すべき制限

Keployは強力ですが、すべてのAPIテスト課題を解決するツールではありません。導入前に次の点を確認してください。

  • Linuxおよび管理者権限に依存しやすい

    eBPFはLinuxカーネルの機能です。ネットワーク層でキャプチャするには、通常、必要な権限を持つLinux環境が必要です。

  • 生成されたテストはレビューが必要

    実トラフィックやAI生成から作られたテストは、あくまで出発点です。ノイズを削除し、どの挙動を契約として固定するべきかを判断する必要があります。

  • APIライフサイクル全体の管理ツールではない

    Keployはテストのキャプチャ、生成、再生に焦点を当てたツールです。API設計、ドキュメント作成、コンシューマー向けモック公開、仕様に関するチームコラボレーションを包括的に扱うものではありません。

これらは欠点というより、Keployのスコープです。導入時は「実行時の通信をテスト化したいのか」「API設計からテスト、ドキュメントまでまとめて管理したいのか」を分けて考えると判断しやすくなります。

デザインテストの代替としてのApidogの位置づけ

ニーズが「観測されたトラフィックを回帰テストに変換する」ことを超える場合は、フルライフサイクルのAPIプラットフォームも検討対象になります。

Apidogは、APIの設計、デバッグ、モック、ドキュメント作成、テストを一箇所で扱うAPIプラットフォームです。ApidogとKeployは異なるカテゴリのツールなので、役割を分けて理解することが重要です。

Apidog

Keployは、コード変更なしで実際のランタイム動作をキャプチャし、依存関係モックを含めて再生します。

一方、Apidogは保守可能なテストシナリオを設計・作成し、Apidog CLIを使ってターミナルやCIから実行するアプローチです。

Apidog CLIでは、作成したコレクションを次のような形で実行できます。

また、Apidogはアプリ内で作成されたAPIスキーマとエンドポイントからAIテストケース生成も提供しています。この点はKeployと一部重なります。

ただし、境界線は明確です。ApidogはeBPFを使ってライブトラフィックをキャプチャするツールではなく、本番呼び出しと依存関係モックを記録してテストを自動生成するものでもありません。実トラフィックからの記録・再生はKeployの領域です。

選び方は次のように考えるとシンプルです。

  • コード変更なしでランタイムの通信を記録・再生したい場合: Keploy
  • API設計、ドキュメント、モック、テストをまとめて管理し、保守可能なテストスイートを作りたい場合: Apidog

より詳しい比較はApidog vs Keployを参照してください。移行を検討している場合は、移行ウォークスルーでテスト移行の流れを確認できます。

保守可能なAPIテストを自分で設計したい場合は、Apidogをダウンロードし、ApidogでAPIをテストする方法から始められます。

よくある質問

Keployは無料のオープンソースですか?

はい。KeployはApache-2.0ライセンスのオープンソースプロジェクトです。コードはGitHubで公開されており、セルフホストも可能です。

Keployはアプリケーションコードの変更を必要としますか?

いいえ。記録・再生ワークフローはeBPFネットワーク層でトラフィックをキャプチャするため、SDKの追加やコード変更は不要です。これにより、多くの言語で利用できます。

keploy test--delayフラグは何をしますか?

--delayは、Keployが記録済みリクエストを送信する前に待機する秒数を指定します。

keploy test -c "node server.js" --delay 10
Enter fullscreen mode Exit fullscreen mode

この例では10秒待機します。アプリケーションの起動が遅い場合は、この値を増やしてください。

Keployはテスト中にデータベースをモックできますか?

はい。インタラクションを記録するときに、データベースクエリなどの依存関係呼び出しもキャプチャします。再生時は生成されたモックを使うため、ライブデータベースなしでテストを実行できます。

KeployはAPI設計やドキュメント作成ツールの代替になりますか?

いいえ。Keployはテストおよびテスト生成に焦点を当てたツールです。API設計、ドキュメント作成、コンシューマー向けモック、チームコラボレーションまで扱いたい場合は、ApidogのようなフルライフサイクルAPIプラットフォームの方が適しています。

要約

Keployは、実際のAPI動作をテストへ変換するオープンソースツールです。eBPFを使ってネットワーク層でリクエスト、レスポンス、依存関係呼び出しをキャプチャし、コード変更なしで決定論的な回帰テストとして再生できます。

一方で、Linux寄りの実行環境、生成テストのレビュー、テストに特化したスコープという制限もあります。実トラフィックの記録・再生が目的ならKeployが適しています。API設計、モック、ドキュメント、保守可能なテストを一体で管理したい場合は、ApidogのようなAPIプラットフォームを比較対象にするとよいでしょう。

Top comments (0)