フロントエンドを構築しているものの、バックエンドがまだ準備できていない状況です。待つことなくコーディングを続けられるよう、動作するGET、POST、PUT、DELETEを備え、現実的なJSONを返すREST APIが今すぐ必要です。
そのために存在するのがjson-serverです。単一のJSONファイルを指定するだけで、数秒で完全なREST APIを提供し、バックエンドコードは一切不要です。その兄弟であるJSONPlaceholderはさらに一歩進んでおり、何もインストールせずに呼び出せるホスト型のフェイクAPIです。このガイドでは、両方の使い方、それらがどこで限界を迎えるか、そしてスキーマを意識したモックへとApidogで移行すべきタイミングについて説明します。
ボタン
エンドポイントの偽装に関する全体像については、「モックAPIとは何か」を参照してください。ここでは、開発者が最初に手を伸ばす2つのツールに焦点を当てます。
json-serverとは?
json-serverは、平易なJSONファイルを実際のREST APIに変えるオープンソースのnpmツールです。リソースを記述したdb.jsonファイルを作成し、1つのコマンドを実行するだけで、そのファイルによってサポートされる標準的なCRUDルートが手に入ります。書き込みリクエストは実際にファイルを変更するため、セッション中にリクエスト間でデータが永続化されます。
データベースを構築したり、サーバーコードを書いたりすることなく、プロトタイプ作成、フロントエンド開発、デモ、テストのための動作するAPIを最速で手に入れる方法です。このプロジェクトはGitHubで公開されており、この用途で広く使用されています。
json-serverのインストールと実行
npmからインストールします:
npm install json-server
プロジェクトにdb.jsonファイルを作成します。トップレベルの配列キーはコレクションルートになり、トップレベルのオブジェクトは単一リソースルートになります:
{
"posts": [
{ "id": "1", "title": "First post", "views": 100 },
{ "id": "2", "title": "Second post", "views": 250 }
],
"comments": [
{ "id": "1", "text": "Nice work", "postId": "1" }
],
"profile": {
"name": "apidog"
}
}
サーバーを起動します:
npx json-server db.json
デフォルトでhttp://localhost:3000で動作します。それだけです。これでライブAPIが手に入りました。
バージョンに関する注意:json-server v1では古い--watchフラグが廃止され、npx json-server db.jsonが現在のコマンドです。古い0.x系を使用している場合、チュートリアルでは依然としてjson-server --watch db.jsonが表示されるでしょう。
無料で利用できるルート
上記のdb.jsonから、json-serverは完全なRESTインターフェースを生成します。
posts配列の場合:
GET /posts
GET /posts/:id
POST /posts
PUT /posts/:id
PATCH /posts/:id
DELETE /posts/:id
profileオブジェクトの場合:
GET /profile
PUT /profile
PATCH /profile
クエリも組み込まれています。v1の構文では、条件にコロンを使用します:
GET /posts?views:gt=100 # viewsが100より大きい
GET /posts?views:lte=50 # viewsが50以下
GET /posts?_sort=-views # viewsで降順ソート
GET /posts?_page=1&_per_page=25 # ページネーション
GET /posts?_embed=comments # 関連するコメントを含める
利用可能な演算子には、lt, lte, gt, gte, eq, ne, in, contains, startsWith, endsWithが含まれます。フラットファイルと1つのコマンドで、これだけのAPIが利用できるのは驚きです。
JSONPlaceholder:セットアップ不要のフェイクAPI
ツールすらインストールしたくない時があります。同じ作者によるJSONPlaceholderは、jsonplaceholder.typicode.comで無料でホストされている偽のREST APIです。コードから直接呼び出します:
curl https://jsonplaceholder.typicode.com/posts/1
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident",
"body": "quia et suscipit..."
}
6つの既製の(すぐに使える)リソースが付属しています:
/posts(100件)/comments(500件)/albums(100件)/photos(5000件)/todos(200件)/users(10件)
POST、PUT、PATCH、DELETEも受け付けますが、注意点があります。書き込みは偽装されています。APIは変更が実際に行われたかのように現実的なレスポンスを返しますが、何も保存されません。更新すると「新しい」投稿は消えてしまいます。これは、予測可能なデータに対してUIコードを連携させるには問題ありませんが、実際のバックエンドではありません。
json-server 対 JSONPlaceholder
| json-server | JSONPlaceholder | |
|---|---|---|
| セットアップ | npmパッケージをインストールし、db.jsonを作成 |
なし、URLを呼び出すだけ |
| 動作場所 | ローカル、あなたのマシン | ホスト、公開 |
| カスタムデータ | はい、独自のリソース | いいえ、固定リソース |
| 書き込みの永続化 | はい、db.jsonに保存 |
いいえ、偽装 |
| 最適な用途 | 独自の形式でのプロトタイプ作成 | クイックデモと学習 |
今すぐにデータが必要で、その内容にこだわらない場合はJSONPlaceholderを使いましょう。独自のリソースと永続的な書き込みが必要な場合はjson-serverを使いましょう。
これらのツールが限界を迎える場所
json-serverとJSONPlaceholderは、1つのこと、つまりJSONを高速に提供することに優れています。しかし、プロジェクトが単独のプロトタイプを超えて成長すると、問題が発生し始めます。
- 真のバリデーションがない。 スキーマを強制しません。数字が属する場所に文字列をPOSTしても、問題なく保存されます。実際のAPIはそれを拒否するでしょう。
- 動的またはスマートなデータがない。 レスポンスはファイル内にあるものだけです。リクエストごとに新しいランダムなメールや将来の日付を返す組み込みの方法はありません。
- ローカルおよびシングルユーザー。 json-serverはあなたのラップトップ上で動作します。チームメイトやCIジョブは
localhost:3000にアクセスできません。JSONPlaceholderは共有されていますが、カスタマイズはできません。 - 仕様からずれる。 偽のデータはOpenAPI契約から切り離された別のファイルに存在するため、APIが進化するにつれて両者は乖離します。
- 偽装された書き込み (JSONPlaceholder)。 カートや複数ステップのフローのようなステートフルなものは、それに対してテストできません。
フラットファイルでは物足りなくなった場合、「RESTエンドポイントをモックするためのツールのまとめ」と「無料および安価なAPIモックサーバー」で次の段階をカバーしており、「オンラインAPIモックツール比較」ではホストされたオプションを並べて比較しています。
実際のモックサーバーに移行するタイミング
スキーマを意識したモックは、上記のすべての制限を解決します。ここでApidogがjson-serverから引き継ぎます。

- ファイル駆動ではなく、スキーマ駆動。 エンドポイントを定義(またはOpenAPI仕様をインポート)すると、Apidogが自動的にモックします。モックと契約は同じ定義であるため、同期が保たれます。
- スマートで動的なデータ。 Apidogはフィールド名と型を読み取り、現実的な値を返します。`email`フィールドには有効なメールアドレス、`createdAt`には日付、`price`には数値を返します。各フィールドにFakerスタイルのルールを付加して、完全に制御できます。Apidogにおける「Faker.jsのガイド」と、より広範な「テストデータジェネレーターのチュートリアル」では、現実的な値を生成する方法を深く掘り下げています。
- 共有可能なクラウドURL。 ApidogはモックにホストされたURLを提供し、`localhost`だけでなくチーム全体やCIパイプラインからも呼び出すことができます。
- Nodeは不要。 プロジェクトごとにインストールするパッケージも、管理する`db.json`もありません。
Apidogで同じAPIをモックする
- Apidogをダウンロードして、プロジェクトを作成または開きます。
- 例えば
GET /postsのようなエンドポイントを追加し、そのレスポンススキーマを定義します(または既存のOpenAPIファイルをインポートします)。 - ApidogはモックURLを生成し、すぐに各フィールドに対してスマートで現実的なデータを返し始めます。
- 特定の値が必要ですか?各フィールドにモックルールを追加して出力を固定します。
- モックURLをチームと共有するか、テストスイートやCIに組み込みます。

json-serverの「数分でAPI」という速度を維持しつつ、バリデーション、動的データ、誰もがアクセスできるURLを手に入れることができます。
よくある質問
json-serverは無料ですか? はい、オープンソースで無料で利用できます。JSONPlaceholderも無料です。
json-serverはデータを永続化しますか? はい。POST、PUT、PATCH、DELETEは`db.json`に書き戻されるため、サーバーが実行されている間、リクエスト間で変更が維持されます。JSONPlaceholderは書き込みを偽装し、何も保存しません。
json-serverを本番環境で使用できますか? いいえ。プロトタイプ作成とテストのために作られています。真のバリデーション、認証、スケーラビリティの機能はありません。
json-serverとApidogのようなモックサーバーの違いは何ですか? json-serverは静的なファイルをAPIとして提供します。ApidogはAPIスキーマからモックし、動的で現実的なデータを返し、共有可能なクラウドURLを公開します。コンテキストについては、「モックAPIとは何か」と「RESTモックツールまとめ」を参照してください。
静的な行ではなく、現実的な偽のデータを取得するにはどうすればよいですか? ジェネレーターを使用します。テストデータジェネレーターは多様で現実的なレコードを作成し、Apidogのモックはスキーマからこれを自動的に行います。
要約
json-serverはJSONファイルを1つのコマンドで動作するREST APIに変え、JSONPlaceholderはセットアップ不要でホストされた偽のAPIを提供します。どちらも迅速な開発を妨げられることなく進めるのに最適です。しかし、スキーマバリデーション、動的データ、永続的な状態、そしてチームが実際にアクセスできるURLが必要になった場合、フラットファイルでは不十分です。それがApidogのモックサーバーが引き継ぐべき境界線です。Apidogをダウンロードし、仕様をインポートすれば、最初のリクエストからモックが実際の契約に一致します。
