コマンドラインからAPIをモックする際は、機能だけでなくライセンスと実行形態も確認する必要があります。ソースコードを検査でき、セルフホストでき、シート数の制約なくCIで実行できるモックサーバーは、ログインが必要なホスト型SaaSとは用途が異なります。本記事では、クローンして確認し、無料で実行できるオープンソースのCLIモックツールを、実行コマンドと選定基準に絞って紹介します。
ここで扱うツールはすべて、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の前段にバリデーションプロキシとして配置することも可能です。
- ライセンス: Apache-2.0
- リポジトリ: stoplightio/prism
起動する
npm install -g @stoplight/prism-cli
prism mock https://raw.githubusercontent.com/stoplightio/prism/master/examples/petstore.oas2.yaml
このコマンドで、http://127.0.0.1:4010 にモックサーバーが起動します。たとえば GET /pets はOpenAPIドキュメントのサンプルを返します。
curl http://127.0.0.1:4010/pets
不正なペイロードを送った場合は、どのスキーマ制約に違反しているかを確認できます。
向いているケース
- OpenAPIファイルを唯一の信頼できる情報源にしたい
- 仕様駆動でモックを生成したい
- 実装と仕様の乖離をバリデーションプロキシで検出したい
制限事項
- 応答内容は仕様のスキーマとサンプル定義に依存する
- 「作成後に読み戻す」といった組み込みのステートフル動作はない
- Node.jsランタイムが必要
Mockoon CLI
Mockoon CLIは、Mockoonデスクトップアプリと同じモックエンジンをGUIなしで実行するCLIです。環境定義JSONまたはOpenAPIファイルを渡して、CIやサーバー上でヘッドレスにモックを提供できます。
- ライセンス: MIT
- リポジトリ: mockoon/mockoon
起動する
npm install -g @mockoon/cli
mockoon-cli start --data ./environment.json --port 3000
OpenAPIファイルを直接渡すこともできます。
mockoon-cli start --data ./openapi.yaml --port 3000
開発中に設定ファイルの変更を反映するには --watch を追加します。HTTPトランザクションを確認したい場合は --log-transaction を使用します。
mockoon-cli start \
--data ./environment.json \
--port 3000 \
--watch \
--log-transaction
向いているケース
- コードを書かずにルールベースの応答を定義したい
- リクエスト条件ごとに異なるレスポンスを返したい
- デスクトップアプリで設計し、CIではCLIとして実行したい
- プロキシモードも使いたい
制限事項
- 環境JSONを手動編集する場合は管理コストがかかる
- 動的テンプレート構文を習得する必要がある
- 最も扱いやすい作成フローはデスクトップアプリ中心
json-server
json-serverは、JSONファイルからCRUD対応のREST APIをすぐに生成するツールです。POSTしたデータはファイルに書き戻されるため、仕様駆動モックとは異なり、最初からステートフルに動作します。
- ライセンス: MIT
- リポジトリ: typicode/json-server
起動する
まず、db.json を作成します。
{
"posts": [
{
"id": 1,
"title": "Hello API mocking"
}
]
}
続いて起動します。
npx json-server db.json
これで、以下のようなルートを利用できます。
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"}'
GET、POST、PUT、PATCH、DELETE のCRUDルートに加え、クエリパラメータによるフィルタリング、ソート、ページネーションも利用できます。POSTしたレコードは db.json に保存され、次の読み取りで返されます。
向いているケース
- バックエンド完成前にフロントエンド開発を進めたい
- 最低限のセットアップでステートフルなREST APIが必要
- ローカル開発で即座にCRUD APIを用意したい
制限事項
- RESTのURL設計や動作がjson-serverの規約に依存する
- OpenAPIをインポートする機能はなく、JSONファイルがコントラクトになる
- 本番環境の負荷や挙動を再現する用途には向かない
WireMock
WireMockは、複雑なHTTPモックと統合テスト向けのオープンソースツールです。JSON管理APIまたはJSONスタブファイルを使い、リクエストマッチング、レスポンステンプレート、ステートフルシナリオ、障害注入、記録・再生を設定できます。
- ライセンス: Apache-2.0
- リポジトリ: wiremock/wiremock
Dockerで起動する
docker run -it --rm -p 8080:8080 wiremock/wiremock:latest
管理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"
}
}'
登録後、モックエンドポイントを呼び出せます。
curl http://localhost:8080/hello
# world
スタブをファイルとして管理する場合は、mappings/ ディレクトリにJSONファイルを配置し、コンテナにマウントします。
向いているケース
- ステートフルなテストシナリオを再現したい
- 外部APIの遅延、エラー、障害を注入したい
- 実APIへのプロキシ結果を記録し、後で再生したい
- テスト対象システムに近い振る舞いをモックで再現したい
制限事項
- JavaランタイムまたはDocker環境が必要
- 単純なモック用途では設定が過剰になりやすい
- Prismのように、仕様ファイルを渡すだけで即起動する形式ではない
MockServer
MockServerは、統合テストを主目的としたHTTP(S)モックおよびプロキシです。APIのモック、ライブトラフィックのプロキシ・記録、障害注入、リクエスト検証を1つのサーバーで実行できます。最近のバージョンではHTTP/2、gRPC、WebSocketもサポートしています。
- ライセンス: Apache-2.0
- リポジトリ: mock-server/mockserver
Dockerで起動する
docker run -d --rm -p 1080:1080 mockserver/mockserver
次に、expectationを登録します。
curl -X PUT "http://localhost:1080/mockserver/expectation" \
-H "Content-Type: application/json" \
-d '{
"httpRequest": {
"path": "/order"
},
"httpResponse": {
"body": "{\"status\":\"ok\"}"
}
}'
モックを呼び出します。
curl http://localhost:1080/order
# {"status":"ok"}
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プロジェクトからライブモックを生成します。同じコントラクトを使って、実装に対する適合性テストも実行できます。
- ライセンス: Apache-2.0
- リポジトリ: microcks/microcks
起動する
docker run -d --name microcks -p 8585:8080 quay.io/microcks/microcks-uber:latest
起動後、http://localhost:8585 を開き、仕様をインポートしてモックエンドポイントを作成します。
CIから操作する場合は、microcks-cliを使用します。
microcks-cli import "petstore.yaml:true" \
--microcksURL=http://localhost:8585/api \
--keycloakClientId=... \
--keycloakClientSecret=...
向いているケース
- 多数のAPIを共有カタログとして統制したい
- OpenAPIだけでなく、AsyncAPI、gRPC、GraphQLも扱いたい
- コントラクトテストをモック管理と統合したい
- KafkaやMQTTなど、イベント駆動・非同期プロトコルもモックしたい
制限事項
- 単一バイナリのCLIではなく、サーバープラットフォーム
-
microcks-cliはモックサーバーそのものではなく、実行中のMicrocksに対するクライアント - 一度限りのローカルモックには、Prismやjson-serverより導入が重い
素直な補足:Apidog
Apidogはオープンソースではないため、上記のOSSツールには含めていません。ただし、仕様駆動モック、ステートフルなCRUD、コントラクトテストを別々のツールで管理したくない場合は、統合型の選択肢になります。
Apidogはフリーミアムプラットフォームであり、無料枠にモック機能が含まれます。apidog-cliの apidog 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)