DEV Community

Cover image for 軽量APIモックCLIツールおすすめ
Akira
Akira

Posted on • Originally published at apidog.com

軽量APIモックCLIツールおすすめ

開発用のダミーAPIが必要なのに、30秒以内に用意しなければならない。ホスト型サービス、Docker Composeスタック、クリック操作のGUIは不要です。ファイルを読み込み、localhostで応答を開始するだけのコマンドが必要な場面があります。

今すぐApidogを試す

軽量モックサーバーは、その用途に適しています。OpenAPI仕様または小さなデータファイルを指定し、コマンドを1つ実行するだけで、バックエンドが未完成でもフロントエンドやテストから利用できるエンドポイントを作れます。

このガイドでは、ターミナルから実行できる6つのモックツールを、導入の手軽さを基準に紹介します。最初にnpxだけで試せるツール、次にスタンドアロンJVMサーバー、最後にApidog CLIによる統合ワークフローを扱います。GUIやホスト型サービスも比較したい場合は、最高のAPIモックツールも参照してください。

CLIモックツールを「軽量」にする条件

軽量性は機能数ではなく、フットプリントと導入時の摩擦で決まります。比較するときは、次の4点を確認してください。

  • インストールサイズと実行方法

    npxで起動できるNodeパッケージは、グローバルインストールが不要です。一方、JVMサーバーはJavaランタイムとjarファイルを必要とします。

  • 起動速度

    ローカル開発では、コマンド実行後すぐにエディターへ戻れることが重要です。Nodeベースのツールは短時間で起動します。

  • 初回応答までの設定量

    「1ファイル + 1コマンド」でエンドポイントが利用可能になるかを確認します。

  • ターミナルファーストかどうか

    アカウント、ダッシュボード、GUI操作なしで、シェルスクリプトやCIジョブに組み込めるかがポイントです。

以下では、最小構成で試しやすい順に紹介します。

Prism (Stoplight)

Prismは、OpenAPIファイルを1コマンドでモックサーバーとして起動します。すでにAPI仕様があるなら、最も短い手順でコントラクト準拠のモックを作れます。

npx @stoplight/prism-cli mock ./openapi.yaml
Enter fullscreen mode Exit fullscreen mode

このコマンドで、http://127.0.0.1:4010 にサーバーが起動します。仕様に定義された操作が利用可能になり、Prismは次のルールでレスポンスを返します。

  1. レスポンスにexampleがあれば、その値を返す
  2. exampleがなければ、スキーマに適合するランダムなレスポンスを生成する
  3. 受信リクエストを仕様に対して検証し、不正なリクエストには422を返す

グローバルに使う場合は、次のようにインストールします。

npm install -g @stoplight/prism-cli
prism mock ./openapi.yaml
Enter fullscreen mode Exit fullscreen mode

最適な用途: OpenAPI仕様を中心に開発し、コントラクトに忠実なモックを必要とするチーム。

PrismはApache-2.0ライセンスで、OpenAPI 3.1、3.0、2.0、およびPostmanコレクションをサポートしています。

制限: Prismはステートレスです。POSTしてもデータは永続化されないため、作成後に読み取るようなフローは再現できません。また、レスポンス品質は仕様内のスキーマや例の品質に依存します。REST APIのモック設計については、REST APIモッキングツールも参考になります。

Mockoon CLI

Mockoon CLIは、Mockoonデスクトップアプリからエクスポートした環境ファイル、またはOpenAPI仕様をヘッドレスで実行できます。

npx @mockoon/cli start --data ./mockoon-env.json --port 3000
Enter fullscreen mode Exit fullscreen mode

--dataには、次のどちらかを指定できます。

  • Mockoon環境ファイル
  • OpenAPI JSON/YAMLファイル

たとえば、OpenAPI仕様を直接読み込む場合は次のように実行できます。

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

古いMockoonバージョンで作成された環境ファイルでも、CLIは元ファイルを変更せず、メモリ上で移行して実行します。

グローバルコマンドとして使う場合は次のとおりです。

npm install -g @mockoon/cli
mockoon-cli start --data ./mockoon-env.json --port 3000
Enter fullscreen mode Exit fullscreen mode

最適な用途: GUIでルートやレスポンスを設計し、CIやサーバーでは同じモックをCLIで実行したいチーム。

Mockoon CLIはMITライセンスで、デプロイ用の公式Dockerイメージも提供されています。

制限: 複雑なモックはデスクトップアプリで設計する前提です。JSON環境ファイルを手作業で編集する運用では、Prismやjson-serverのほうが扱いやすい場合があります。

json-server

json-serverは、OpenAPI仕様がまだない段階でREST APIを素早く作るための選択肢です。JSONファイルを用意するだけで、CRUD APIを生成します。

まず、データファイルを作成します。

echo '{ "posts": [{ "id": 1, "title": "hello" }] }' > db.json
Enter fullscreen mode Exit fullscreen mode

次にサーバーを起動します。

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

これで、http://localhost:3000/posts が利用可能になります。

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

POSTPUTPATCHDELETEも利用できます。たとえば、投稿を追加する場合は次のとおりです。

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

追加したレコードはdb.jsonへ書き戻されるため、ステートフルなCRUDフローを試せます。フィルタリング、ソート、ページネーションもクエリパラメータで利用できます。

グローバルにインストールする場合は次のとおりです。

npm install -g json-server
Enter fullscreen mode Exit fullscreen mode

最適な用途: 実APIが完成する前に、フロントエンド開発用のRESTバックエンドをすぐに用意したい場合。

json-serverはMITライセンスで、仕様なしで始められるRESTful API向け軽量モックサーバーの選択肢です。

制限: リソースベースのREST API向けです。複雑なカスタムルート、非RESTエンドポイント、厳密なヘッダーマッチングには適していません。コントラクト検証ツールではなく、プロトタイピング向けのツールです。

MockServer

MockServerは、リクエストを細かくマッチングしたい統合テスト向けのモックサーバーです。HTTPメソッド、パス、ヘッダー、クエリ、ボディを条件にして、返すレスポンスを明示的に定義できます。

スタンドアロンjarを使う場合は、次のように起動します。

java -jar mockserver-netty-5.15.0-no-dependencies.jar -p 1080
Enter fullscreen mode Exit fullscreen mode

これでポート1080にMockServerが起動します。その後、REST APIを通じて期待値を登録し、レスポンスを設定できます。

Node.jsから起動したい場合は、公式ラッパーを利用できます。

npm install mockserver-node
Enter fullscreen mode Exit fullscreen mode
const mockserver = require('mockserver-node');

mockserver.start_mockserver({
  serverPort: 1080,
});
Enter fullscreen mode Exit fullscreen mode

MockServerは、遅延、タイムアウト、エラーレスポンスなども設定できるため、失敗系を含む統合テストに向いています。

最適な用途: リクエスト内容とレスポンス内容を厳密に制御したい統合テスト。

MockServerはApache-2.0ライセンスで、単一ポートでHTTP、HTTPSなどをサポートしています。

制限: JVMサーバーのため、Nodeベースのツールより導入が重く、起動にも時間がかかります。また、期待値の定義はOpenAPI仕様を渡すだけの方式より冗長です。用途に合わない場合は、MockServerの代替品も比較してください。

WireMock(スタンドアロン)

WireMockは、Java/JVMのテスト環境で広く使われるモックサーバーです。スタンドアロンjarでローカルモックを実行し、その設定をテストスイートでも活用できます。

java -jar wiremock-standalone.jar --port 8080
Enter fullscreen mode Exit fullscreen mode

このコマンドで、ポート8080にWireMockが起動します。

WireMockは次の方法でスタブを読み込みます。

  • mappings/ディレクトリ内のJSONファイル
  • WireMockのJSON API

また、実際のHTTPトラフィックを記録し、スタブとして再生できます。制御できないサードパーティAPIをテストで再現したい場合に便利です。

CI環境では、公式のwiremock/wiremock Dockerイメージも利用できます。

最適な用途: ローカル開発とJVMテストスイートで同じモッキングエンジンを使いたいチーム。記録・再生も必要な場合に適しています。

WireMockはApache-2.0ライセンスです。

制限: Javaランタイムが必要であり、Nodeツールより起動は重くなります。スタブマッピングJSONは強力ですが、単純なデータモックより学習コストがあります。JavaScript中心のモックを探している場合は、Mock Service Worker(MSW)の代替品も確認してください。

Apidog CLI

これまでのツールは、それぞれモッキングの特定部分を解決します。Apidogは、API設計、モック、テスト、ドキュメントを1つのプロジェクトで扱う統合型のアプローチです。Apidog CLIを使うと、そのプロジェクトをターミナルやCIから操作できます。

Apidogはオープンソースではありませんが、無料プランがあります。単体のモックサーバー、テストランナー、仕様ツールを別々に組み合わせる代わりに、1つのプロジェクトに集約したい場合の選択肢です。

Apidogでは、定義したエンドポイントからスマートモックを自動生成します。レスポンスはスキーマのフィールド型や命名規則に従います。たとえば、phoneフィールドにはランダムな文字列ではなく、電話番号らしい値を返します。

特定のリクエストに対して固定レスポンスが必要な場合は、モックの期待値を追加します。CLIでは、これらのモックリソースをプロジェクトの一部として管理できます。

npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog mock --help
Enter fullscreen mode Exit fullscreen mode

mockコマンドグループは、エンドポイント、スキーマ、環境、テスト実行の各コマンドと同様に、スクリプトやCIからモック期待値を操作するために使用します。出力は構造化JSONで、agentHints.nextStepsフィールドも含まれます。

コマンド全体については、Apidog CLI完全ガイドを参照してください。

最適な用途: モック、API仕様、テストを別ツールに分散させず、1つのプロジェクトにまとめたいチーム。

Apidogをダウンロードして、組み込みモックサーバーとCLIをプロジェクトで試せます。

制限: json-serverのような単一目的ツールと異なり、プロジェクトとログインが必要です。1ファイルから一時的なモックを起動したいだけなら、Prismやjson-serverのほうが軽量です。すでにApidogでAPIを設計しているなら、モックも同じプロジェクト内で管理できます。

選び方

すでに手元にあるものから選ぶと、導入が速くなります。

状況 選ぶツール
OpenAPI仕様がある Prism または Mockoon CLI
仕様がなく、すぐにCRUD APIが必要 json-server
リクエストのヘッダーやボディまで厳密にマッチさせたい MockServer または WireMock
モック、設計、テストをまとめて管理したい Apidog CLI
ツール 最適な用途 インストール オープンソース? 備考
Prism OpenAPI仕様をモックとして提供 npx @stoplight/prism-cli はい(Apache-2.0) コントラクト準拠、ステートレス、ポート4010
Mockoon CLI GUIで構築したモックをヘッドレス実行 npx @mockoon/cli はい(MIT) 環境ファイルまたはOpenAPIを読み込み、Dockerイメージあり
json-server JSONからREST APIを即時生成 npx json-server はい(MIT) ステートフルCRUD、仕様不要、ポート3000
MockServer 厳密なリクエストマッチング java -jar mockserver-netty-*.jar はい(Apache-2.0) JVM、npmラッパーあり、ポート1080
WireMock JVM開発とテストでモックを共有 java -jar wiremock-standalone.jar はい(Apache-2.0) 記録・再生、Dockerイメージあり、ポート8080
Apidog CLI モック、仕様、テストを1プロジェクトに集約 npm install -g apidog-cli いいえ(無料プランあり) スマートモックの自動生成と期待値管理

大まかな選択基準は次のとおりです。

  • 速度優先: npxで実行できるPrism、Mockoon CLI、json-server
  • マッチング精度優先: MockServer、WireMock
  • ワークフロー統合優先: Apidog

モックを使うべき場面そのものを確認したい場合は、APIモッキングのユースケースも参考にしてください。

まとめ

軽量モッキングでは、「ツールに何を入力できるか」で選択肢が決まります。

  • OpenAPI仕様があるなら、PrismまたはMockoon CLI
  • JSONデータだけで始めるなら、json-server
  • 厳密なリクエストマッチングが必要なら、MockServerまたはWireMock
  • モックを設計・テストと同じ場所で管理するなら、Apidog CLI

6つのツールはいずれもターミナルから実行でき、CIジョブにも組み込めます。まずは自分のケースを満たす最小のツールを選び、必要になった段階でより高度な機能を追加してください。

統合されたワークフローを試したい場合は、Apidogをダウンロードして、API設計からモックサーバーを生成できます。

Top comments (0)