DEV Community

Cover image for APIモック用無料オープンソースCLIツール
Akira
Akira

Posted on • Originally published at apidog.com

APIモック用無料オープンソースCLIツール

コマンドラインからAPIをモックする際は、機能だけでなくライセンスと実行形態も確認する必要があります。ソースコードを検査でき、セルフホストでき、シート数の制約なくCIで実行できるモックサーバーは、ログインが必要なホスト型SaaSとは用途が異なります。本記事では、クローンして確認し、無料で実行できるオープンソースのCLIモックツールを、実行コマンドと選定基準に絞って紹介します。

今すぐApidogを試す

ここで扱うツールはすべて、MITまたはApache-2.0の寛容なライセンスでソースコードが公開され、GitHubの公開リポジトリで管理されており、アカウントなしでセルフホストできます。

起動速度やインストールサイズを優先して、より小さな単一バイナリの選択肢を探している場合は、軽量モックサーバーの選択肢も参照してください。本記事では、ソース公開とセルフホスティングを重視するため、コンテナベースの大規模なプラットフォームも含めています。

各ツールでは、ライセンス、最小構成で起動するコマンド、適した用途、導入時の制約を確認します。商用サービスも含めた比較が必要な場合は、最適なAPIモックツールまとめREST APIモックツールの概要をご覧ください。

Apidogはオープンソースではありません。本記事ではOSSツールとして扱わず、最後に統合型の代替案としてのみ紹介します。

CLIモックツールがオープンソースであるための条件

このリストでは、次の3条件を満たすツールを対象にしています。

1. 寛容なライセンスで公開されている

ソースコードがMITまたはApache-2.0で公開されていることを条件にしています。コードを読み、フォークし、ライセンス料やシート数を気にせず自社製品やCI環境に組み込めます。

2. セルフホストできる

ラップトップ、Dockerコンテナ、自社サーバーで実行できることが必要です。ホスト型コントロールプレーン、電話認証、アカウント作成に依存しないため、エアギャップ環境のCIランナーでも利用できます。

3. 公開リポジトリで継続的に保守されている

公開GitHubリポジトリにコミット履歴、Issue、リリースがあることを確認します。スター数だけで判断せず、直近のコミットやタグ付きリリースも確認してください。

速度やインストールサイズは選定条件に含めていません。それらを重視する場合は、軽量モックサーバーの選択肢を基準にしてください。

Prism (Stoplight)

Prismは、OpenAPIまたはPostmanファイルからライブモックサーバーを起動するツールです。仕様のサンプルレスポンスを返すだけでなく、受信リクエストをスキーマに対して検証できます。実APIの前段にバリデーションプロキシとして配置することも可能です。

起動する

npm install -g @stoplight/prism-cli

prism mock https://raw.githubusercontent.com/stoplightio/prism/master/examples/petstore.oas2.yaml
Enter fullscreen mode Exit fullscreen mode

このコマンドで、http://127.0.0.1:4010 にモックサーバーが起動します。たとえば GET /pets はOpenAPIドキュメントのサンプルを返します。

curl http://127.0.0.1:4010/pets
Enter fullscreen mode Exit fullscreen mode

不正なペイロードを送った場合は、どのスキーマ制約に違反しているかを確認できます。

向いているケース

  • OpenAPIファイルを唯一の信頼できる情報源にしたい
  • 仕様駆動でモックを生成したい
  • 実装と仕様の乖離をバリデーションプロキシで検出したい

制限事項

  • 応答内容は仕様のスキーマとサンプル定義に依存する
  • 「作成後に読み戻す」といった組み込みのステートフル動作はない
  • Node.jsランタイムが必要

Mockoon CLI

Mockoon CLIは、Mockoonデスクトップアプリと同じモックエンジンをGUIなしで実行するCLIです。環境定義JSONまたはOpenAPIファイルを渡して、CIやサーバー上でヘッドレスにモックを提供できます。

起動する

npm install -g @mockoon/cli

mockoon-cli start --data ./environment.json --port 3000
Enter fullscreen mode Exit fullscreen mode

OpenAPIファイルを直接渡すこともできます。

mockoon-cli start --data ./openapi.yaml --port 3000
Enter fullscreen mode Exit fullscreen mode

開発中に設定ファイルの変更を反映するには --watch を追加します。HTTPトランザクションを確認したい場合は --log-transaction を使用します。

mockoon-cli start \
  --data ./environment.json \
  --port 3000 \
  --watch \
  --log-transaction
Enter fullscreen mode Exit fullscreen mode

向いているケース

  • コードを書かずにルールベースの応答を定義したい
  • リクエスト条件ごとに異なるレスポンスを返したい
  • デスクトップアプリで設計し、CIではCLIとして実行したい
  • プロキシモードも使いたい

制限事項

  • 環境JSONを手動編集する場合は管理コストがかかる
  • 動的テンプレート構文を習得する必要がある
  • 最も扱いやすい作成フローはデスクトップアプリ中心

json-server

json-serverは、JSONファイルからCRUD対応のREST APIをすぐに生成するツールです。POSTしたデータはファイルに書き戻されるため、仕様駆動モックとは異なり、最初からステートフルに動作します。

起動する

まず、db.json を作成します。

{
  "posts": [
    {
      "id": 1,
      "title": "Hello API mocking"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

続いて起動します。

npx json-server db.json
Enter fullscreen mode Exit fullscreen mode

これで、以下のようなルートを利用できます。

curl http://localhost:3000/posts
curl http://localhost:3000/posts/1

curl -X POST http://localhost:3000/posts \
  -H "Content-Type: application/json" \
  -d '{"title":"New post"}'
Enter fullscreen mode Exit fullscreen mode

GETPOSTPUTPATCHDELETE のCRUDルートに加え、クエリパラメータによるフィルタリング、ソート、ページネーションも利用できます。POSTしたレコードは db.json に保存され、次の読み取りで返されます。

向いているケース

  • バックエンド完成前にフロントエンド開発を進めたい
  • 最低限のセットアップでステートフルなREST APIが必要
  • ローカル開発で即座にCRUD APIを用意したい

制限事項

  • RESTのURL設計や動作がjson-serverの規約に依存する
  • OpenAPIをインポートする機能はなく、JSONファイルがコントラクトになる
  • 本番環境の負荷や挙動を再現する用途には向かない

WireMock

WireMockは、複雑なHTTPモックと統合テスト向けのオープンソースツールです。JSON管理APIまたはJSONスタブファイルを使い、リクエストマッチング、レスポンステンプレート、ステートフルシナリオ、障害注入、記録・再生を設定できます。

Dockerで起動する

docker run -it --rm -p 8080:8080 wiremock/wiremock:latest
Enter fullscreen mode Exit fullscreen mode

管理APIを使ってスタブを登録します。

curl -X POST http://localhost:8080/__admin/mappings \
  -H "Content-Type: application/json" \
  -d '{
    "request": {
      "method": "GET",
      "url": "/hello"
    },
    "response": {
      "status": 200,
      "body": "world"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

登録後、モックエンドポイントを呼び出せます。

curl http://localhost:8080/hello
# world
Enter fullscreen mode Exit fullscreen mode

スタブをファイルとして管理する場合は、mappings/ ディレクトリにJSONファイルを配置し、コンテナにマウントします。

向いているケース

  • ステートフルなテストシナリオを再現したい
  • 外部APIの遅延、エラー、障害を注入したい
  • 実APIへのプロキシ結果を記録し、後で再生したい
  • テスト対象システムに近い振る舞いをモックで再現したい

制限事項

  • JavaランタイムまたはDocker環境が必要
  • 単純なモック用途では設定が過剰になりやすい
  • Prismのように、仕様ファイルを渡すだけで即起動する形式ではない

MockServer

MockServerは、統合テストを主目的としたHTTP(S)モックおよびプロキシです。APIのモック、ライブトラフィックのプロキシ・記録、障害注入、リクエスト検証を1つのサーバーで実行できます。最近のバージョンではHTTP/2、gRPC、WebSocketもサポートしています。

Dockerで起動する

docker run -d --rm -p 1080:1080 mockserver/mockserver
Enter fullscreen mode Exit fullscreen mode

次に、expectationを登録します。

curl -X PUT "http://localhost:1080/mockserver/expectation" \
  -H "Content-Type: application/json" \
  -d '{
    "httpRequest": {
      "path": "/order"
    },
    "httpResponse": {
      "body": "{\"status\":\"ok\"}"
    }
  }'
Enter fullscreen mode Exit fullscreen mode

モックを呼び出します。

curl http://localhost:1080/order
# {"status":"ok"}
Enter fullscreen mode Exit fullscreen mode

Java、JavaScript、Rubyなどのクライアントライブラリを使えば、curl を実行せずテストコードからexpectationを設定できます。

向いているケース

  • モック、プロキシ、障害注入を1か所に集約したい
  • 特定のリクエストが指定回数呼ばれたことを検証したい
  • JVM中心の統合テスト基盤に組み込みたい
  • HTTP/2、gRPC、WebSocketも対象にしたい

MockServerがスタックに合わない場合は、MockServerの代替案も確認してください。

制限事項

  • JVMベースであり、DockerまたはJava環境が必要
  • expectationのJSONが冗長になりやすい
  • WireMockと用途が重複するため、利用するクライアントライブラリや既存テスト基盤で選ぶ必要がある

Microcks

Microcksは、複数のAPI仕様とプロトコルをまとめて管理するためのプラットフォームです。Cloud Native Computing Foundationのインキュベーションプロジェクトであり、OpenAPI、AsyncAPI、gRPC、GraphQL、Postmanコレクション、SoapUIプロジェクトからライブモックを生成します。同じコントラクトを使って、実装に対する適合性テストも実行できます。

起動する

docker run -d --name microcks -p 8585:8080 quay.io/microcks/microcks-uber:latest
Enter fullscreen mode Exit fullscreen mode

起動後、http://localhost:8585 を開き、仕様をインポートしてモックエンドポイントを作成します。

CIから操作する場合は、microcks-cliを使用します。

microcks-cli import "petstore.yaml:true" \
  --microcksURL=http://localhost:8585/api \
  --keycloakClientId=... \
  --keycloakClientSecret=...
Enter fullscreen mode Exit fullscreen mode

向いているケース

  • 多数のAPIを共有カタログとして統制したい
  • OpenAPIだけでなく、AsyncAPI、gRPC、GraphQLも扱いたい
  • コントラクトテストをモック管理と統合したい
  • KafkaやMQTTなど、イベント駆動・非同期プロトコルもモックしたい

制限事項

  • 単一バイナリのCLIではなく、サーバープラットフォーム
  • microcks-cli はモックサーバーそのものではなく、実行中のMicrocksに対するクライアント
  • 一度限りのローカルモックには、Prismやjson-serverより導入が重い

素直な補足:Apidog

Apidogはオープンソースではないため、上記のOSSツールには含めていません。ただし、仕様駆動モック、ステートフルなCRUD、コントラクトテストを別々のツールで管理したくない場合は、統合型の選択肢になります。

Apidogはフリーミアムプラットフォームであり、無料枠にモック機能が含まれます。apidog-cliapidog mock を使うと、設計、テスト、ドキュメントと同じプロジェクト内で、ターミナルからモックの期待値を管理できます。スマートモックでは、スキーマから現実的なフィールド値を自動生成できます。

トレードオフは明確です。OSSやエアギャップ環境でのセルフホスティングが必須なら、上記6ツールを選択してください。設計からモックまでの統合ワークフローを優先するなら、複数ツールを組み合わせる代わりにApidogを検討できます。

選び方

ツール 最適な用途 インストール ライセンス 備考
Prism 仕様駆動型モック、バリデーションプロキシ npm i -g @stoplight/prism-cli Apache-2.0 OpenAPI/Postmanを入力しモックを生成。ステートレス
Mockoon CLI コード不要のルールベース応答 npm i -g @mockoon/cli MIT アプリで設計し、CLIでヘッドレス実行
json-server フロントエンド向けステートフルREST API npx json-server db.json MIT 永続化付きCRUDを設定なしで提供
WireMock 複雑なテストシナリオ、障害注入 docker run wiremock/wiremock Apache-2.0 JVMベース。記録・再生とステートフルシナリオ
MockServer モック、プロキシ、検証 docker run mockserver/mockserver Apache-2.0 JVMベース。HTTP/2、gRPC、WebSocket対応
Microcks 統制された複数API・プロトコルのカタログ docker run microcks-uber Apache-2.0 CNCFプラットフォーム。CLIはサーバー操作用クライアント
Apidog(非OSS) 統合された設計からモックまでのワークフロー npm i -g apidog-cli フリーミアム 1プロジェクトで apidog mock を利用可能

人気度ではなく、必要な特性で選んでください。

  • OpenAPIファイルを読み込み、仕様に沿ったモックと検証が必要: Prism
  • バックエンド未完成の段階で、すぐにステートフルCRUD APIが必要: json-server
  • 遅延、エラー、記録・再生を含む複雑なテストが必要: WireMockまたはMockServer
  • クライアントライブラリからexpectationや検証を操作したい: MockServer
  • 複数プロトコルのモックとコントラクトテストを組織的に管理したい: Microcks
  • GUIで作成したルールをCIでヘッドレス実行したい: Mockoon CLI

ツールと利用シナリオの対応をさらに確認したい場合は、APIモックのユースケースガイドを参照してください。

まとめ

オープンソースのCLIモックツールを使えば、コードを確認し、セルフホストし、CIで実行できるモックサーバーを構築できます。

  • Prismは仕様駆動モックとバリデーションに適しています。
  • json-serverは最小構成でステートフルCRUD APIを提供します。
  • WireMockとMockServerは障害注入や複雑な統合テストを扱えます。
  • Microcksは複数API・複数プロトコルのモックを統制されたカタログへ拡張します。
  • Mockoon CLIはルールベースのモックをヘッドレスで実行できます。

これら6ツールはすべてMITまたはApache-2.0ライセンスで公開され、セルフホスト可能で、公開GitHubリポジトリで管理されています。

API設計、テスト、ドキュメントの隣でモックを一元管理したい場合は、Apidogをダウンロードし、無料枠で apidog mock を試してください。オープンソースではありませんが、コマンドラインからCIまでのモック運用を1か所にまとめる選択肢になります。

Top comments (0)