コマンドラインからAPIをモックする際、ライセンスは機能リストと同じくらい重要です。ソースコードを読み、セルフホストでき、シート数に制限されずにCIで実行できるモックサーバーは、ログインが必要なホスト型SaaSモックとは大きく異なります。このガイドでは、オープンソースの側面、つまりクローンして検査し、無料で実行できるツールについて説明します。
ここに掲載されているすべてのツールは、寛容なライセンス(MITまたはApache-2.0)でソースコードが公開されており、公開GitHubリポジトリに存在し、アカウントなしでセルフホストできます。それが選定基準です。起動速度とインストールサイズでランク付けされた、より小さく単一バイナリの選択肢が必要な場合は、代わりに付随の軽量モックサーバーの選択肢を読んでください。このリストはソースとセルフホスティングに関するものであるため、より大規模なセルフホスト可能なプラットフォームでも掲載される可能性があります。
各ツールについて、ライセンス、動作を証明するインストール+実行コマンド、得意なこと、そして短所が示されています。商用オプションを含むより幅広い分野を知りたい場合は、最適なAPIモックツールまとめとREST APIモックツールの概要をご覧ください。
リストの前に、素直な補足です。Apidogはオープンソースではありません。フリーミアムの商用プラットフォームです。オープンソースの項目としてではなく、これらのツールに対する統合された代替案として、明確に表示され、最後に一度だけ登場します。以下の番号付きセクションにあるものはすべて真にオープンソースです。
ボタン
CLIモックツールがオープンソースであるための条件
ツールがこのリストに載るかどうかは、次の3つの要素で決まります。
ライセンス。 ソースコードは寛容なライセンスの下で公開されている必要があります。ここに掲載されているすべてのツールはMITまたはApache-2.0であり、ライセンス料やシート数なしで、コードを読み、フォークし、自身の製品に組み込むことができます。
セルフホスト可能。 ラップトップ、コンテナ、または自身のサーバー上で実行できます。ホストされたコントロールプレーン、電話接続、アカウントの制限はありません。これにより、エアギャップされたCIランナーでもモックが使用可能になります。
オープンにメンテナンスされている。 実際のコミット履歴、イシュー、リリースを持つ公開GitHubリポジトリです。スター数は大まかな指標ですが、最近のコミットとタグ付きリリースの方がより良い指標です。
リストにないものに注目してください。生の速度やインストールサイズです。それらは軽量の観点です。ここでは、ソースが公開され、ライセンスが無料である限り、大規模でコンテナベースのセルフホスト可能なプラットフォームも対象となります。
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ドキュメントからのサンプルを返し、不正なペイロードを送信すると、Prismはスキーマのどの部分に違反したかを通知します。
得意なこと:OpenAPIファイルが信頼できる情報源である、仕様駆動のコントラクトモック。バリデーションプロキシモードは特に優れており、仕様と実際のAPI間のずれを検出します。
制限事項:応答は例とスキーマから生成されるため、モックは仕様の記述内容に依存します。組み込みのステートフルな動作(「作成してから読み戻す」など)はありません。Nodeツールであるため、Nodeランタイムが必要です。
Mockoon CLI
Mockoonはデスクトップアプリでよく知られていますが、CLIは同じエンジンをGUIなしで提供し、CIやセルフホスティング向けに作られています。環境を(アプリでまたは手動で)設計するか、OpenAPIファイルを渡すと、そのモックが提供されます。ライセンス:MIT。リポジトリ:mockoon/mockoon。
npm install -g @mockoon/cli
mockoon-cli start --data ./environment.json --port 3000
--data ./openapi.yamlを使ってOpenAPIファイルから直接起動することもできます。ファイル変更時にリロードするには--watchを、完全なリクエスト/レスポンスログを出力するには--log-transactionを追加します。
得意なこと:コードを書かずに、リッチでルールベースの応答を提供すること。Mockoonは応答テンプレート、条件付きルール、プロキシモードをサポートしているため、1つのエンドポイントがリクエストに基づいて異なるボディを返すことができます。アプリで視覚的に設計し、CLI経由でヘッドレス実行するのは、明確な役割分担です。
制限事項:最も快適なオーサリングパスはデスクトップアプリであるため、環境JSONを手動で編集するのは手間がかかります。動的テンプレート構文には独自の学習曲線があります。
json-server
json-serverは、REST APIを偽装する最速の方法です。JSONファイルを渡すと、実際の永続化機能(ファイルへの書き戻し)を備えた完全なCRUDルート(GET、POST、PUT、PATCH、DELETE)を生成します。ライセンス:MIT。リポジトリ:typicode/json-server。
npx json-server db.json
トップレベルに"posts"配列を持つdb.jsonがあれば、すぐにGET /posts、GET /posts/1、POST /postsなどのルートが利用可能になり、さらにクエリパラメータを介したフィルタリング、ソート、ページネーションも可能です。新しいレコードをPOSTするとファイルに書き込まれ、読み戻すとそれが存在します。
得意なこと:バックエンドが存在しない段階でのフロントエンド開発。Prismやほとんどの仕様駆動型モックとは異なり、最初からステートフルです。設定不要で、npxを使えばインストールすら必要ありません。
制限事項:RESTの形式について意見が強いため、任意のカスタムAPIとは一致しません。OpenAPIのインポート機能はなく、JSONファイルがコントラクトとなります。ロードテストや本番環境のような動作を想定していません。
WireMock
WireMockは、毎月数百万回ダウンロードされるオープンソースHTTPモックの最重量級です。JSON管理APIまたはJSONスタブファイルから設定されるスタンドアロンプロセスとして実行され、リクエストマッチング、応答テンプレート、ステートフルシナリオ、障害注入、記録・再生を処理します。ライセンス:Apache-2.0。リポジトリ:wiremock/wiremock。
docker run -it --rm -p 8080:8080 wiremock/wiremock:latest
curl -X POST http://localhost:8080/__admin/mappings \
-H 'Content-Type: application/json' \
-d '{"request":{"method":"GET","url":"/hello"},"response":{"status":200,"body":"world"}}'
最初の行でWireMockを起動し、2番目の行でその管理APIを介してスタブを登録します。これでcurl http://localhost:8080/helloはworldを返します。また、スタブファイルをmappings/ディレクトリに配置し、コンテナにマウントすることもできます。
得意なこと:複雑なテストシナリオ。ステートフルな動作、不安定なサードパーティをシミュレートするための遅延や障害、実際のAPIをキャプチャして後で再生するプロキシ+記録機能など。テスト対象の実際のシステムのようにモックを動作させる必要がある場合に最適なツールです。
制限事項:JVMツールであるため、コンテナまたはJavaランタイムが必要です。設定の範囲が広く、シンプルなモックではオーバースペックに感じられます。Prismのように、単一の「仕様を読んで開始」するコマンドはありません。
MockServer
MockServerは、単一ポートで動作するHTTP(S)モックおよびプロキシであり、統合テストを主な目的としています。APIをモックし、ライブトラフィックをプロキシして記録でき、障害を注入してクライアントがどのようにそれらを処理するかをテストできます。最近のバージョンでは、HTTP/2、gRPC、WebSocketのサポートが追加されています。ライセンス:Apache-2.0。リポジトリ:mock-server/mockserver。
docker run -d --rm -p 1080:1080 mockserver/mockserver
curl -X PUT 'http://localhost:1080/mockserver/expectation' \
-H 'Content-Type: application/json' \
-d '{"httpRequest":{"path":"/order"},"httpResponse":{"body":"{\"status\":\"ok\"}"}}'
このPUTは「期待値(expectation)」を登録します。その後、curl http://localhost:1080/orderはあなたのJSONを返します。MockServerのクライアント(Java、JavaScript、Rubyなど)を使用すると、curlを介する代わりにテストコード内から同じ期待値を設定できます。
得意なこと:同じ場所でのモックとプロキシ、さらに障害注入。特定の要求が特定の回数行われたことを検証する必要がある場合、MockServerの検証APIはそのために作られています。JVM中心のスタックに適しています。もし適切でない場合は、弊社のMockServerの代替案の記事をご覧ください。
制限事項:WireMockと同様に、JVMベースであり、期待値のJSONは冗長です。WireMockとの重複は実際にあります。テストスタックに合うクライアントライブラリに基づいて選択してください。
Microcks
Microcksはプラットフォームの選択肢であり、Cloud Native Computing Foundationのインキュベーションプロジェクトです。OpenAPI、AsyncAPI、gRPC、GraphQL、Postmanコレクション、およびSoapUIプロジェクトをライブモックに変換し、これらの同じコントラクトを再利用して実際の実装に対する適合性テストを実行します。HTTPだけでなく、イベント駆動型および非同期プロトコルもカバーしています。ライセンス:Apache-2.0。リポジトリ:microcks/microcks。
docker run -d --name microcks -p 8585:8080 quay.io/microcks/microcks-uber:latest
これはオールインワンイメージを実行します。http://localhost:8585を開き、仕様をインポートしてモックエンドポイントを取得します。付属のmicrocks-cliは、CIから実行中のサーバーを操作します。
microcks-cli import 'petstore.yaml:true' \
--microcksURL=http://localhost:8585/api \
--keycloakClientId=... --keycloakClientSecret=...
得意なこと:多くのAPIとプロトコルにわたる、統制されたモックのカタログを、コントラクトテスト組み込みで求めるチーム向け。非同期/イベント駆動型モック(Kafka、MQTTなど)は、この分野では珍しいです。
制限事項:これは単一のバイナリではなくサーバーです。重要な注意点として、microcks-cliは実行中のMicrocksインスタンスに対してテストをトリガーし、アーティファクトをインポートするものであり、それ自体でモックを提供するわけではありません。つまり、CLIはクライアントであり、プラットフォームは別途実行する必要があります。一度限りのローカルモックとしては、Prismやjson-serverよりも重いです。
素直な補足:Apidog
Apidogはオープンソースではないため、ここに番号付きで掲載されていません。しかし、上記のツールがそれぞれ異なる部分(仕様駆動モック、ステートフルCRUD、コントラクトテスト)を解決していることに気づき、それらを組み合わせたくないと思うなら、言及する価値はあります。Apidogは、無料枠にモック機能が含まれるフリーミアムプラットフォームであり、apidog-cliのapidog mockを使用すると、設計、テスト、ドキュメントとともに、1つのプロジェクト内でターミナルからモックの期待値を管理できます。スマートモックはスキーマから現実的なフィールド値を自動的に生成するため、例示ボディを手書きする必要がありません。
トレードオフは明白です。オープンソースやエアギャップされたセルフホスティングの代わりに、統合されたワークフローと無料枠が提供されます。オープンソースまたはエアギャップされたセルフホスティングが必須要件である場合は、上記の6つのツールのいずれかが解決策となります。統合された設計からモックまでのループがより重要であれば、複数のツールを結合する代わりにApidogが代替案となります。
選び方
| ツール | 最適な用途 | インストール | ライセンス | 備考 |
|---|---|---|---|---|
| Prism | 仕様駆動型モック + バリデーションプロキシ | npm i -g @stoplight/prism-cli |
Apache-2.0 | OpenAPI/Postmanを入力、モックを出力;ステートレス |
| Mockoon CLI | コード不要のルールベース応答 | npm i -g @mockoon/cli |
MIT | アプリで設計、ヘッドレス実行 |
| 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にはjson-serverが速度で優れます。障害注入と記録・再生機能を持つリッチなテストシナリオにはWireMockまたはMockServerを。クライアントライブラリで選びましょう。コントラクトテスト付きの共有マルチプロトコルカタログにはMicrocksです。どの状況にどの特性が合うかについては、APIモックのユースケースガイドがツールとシナリオをマッピングしています。
まとめ
オープンソースのCLIモックツールは、無料でコードを読み、セルフホストし、CIで実行できるモックサーバーを提供します。Prismとjson-serverは一般的なケースを1つのコマンドでカバーし、WireMockとMockServerは困難なテストシナリオを処理し、Microcksはそれをプロトコル全体にわたる統制されたカタログにスケールアップさせます。これら6つすべてがMITまたはApache-2.0ライセンスであり、すべてセルフホスト可能で、すべて公開GitHubにあります。
別々のツールを接続することなく、API設計、テスト、ドキュメントの隣でモックを管理したい場合は、Apidogをダウンロードして、無料枠でapidog mockを試してみてください。これはオープンソースではありませんが、コマンドラインからCIまでの全プロセスを実行できる一つの場所となります。
