chance、faker、json-server、mockjs は、フロントエンド開発においてバックエンドを待たずに作業を進めるための重要なツール群です。chance と faker はランダムなデータ(名前、住所、数値など)を生成するライブラリであり、テストや UI のサンプルデータ作成に用いられます。一方、json-server は JSON ファイルから即席の REST API サーバーを立ち上げるツールで、mockjs はリクエストをインターセプトしてモックデータを返す仕組みを提供します。これらを適切に使い分けることで、開発スピードとテストの信頼性を向上させることができます。
フロントエンド開発において、バックエンド API の完成を待たずに作業を進めることは不可欠です。chance、faker、json-server、mockjs は、この課題を解決するための代表的なツールですが、それぞれのアプローチと適した場面が異なります。これらは大きく分けて「データの生成」と「API のモック」の 2 つのカテゴリに分類できます。
ランダムなデータを生成する際、どのライブラリを選ぶかは「再現性」と「データの豊富さ」のバランスで決まります。
chance は、シード値(seed)を用いた決定論的なデータ生成に強みがあります。テストで同じデータを繰り返し生成したい場合に有効です。
// chance: シード値を使用して再現性を確保
const Chance = require('chance');
const chance = new Chance(12345);
console.log(chance.name()); // 常に同じ名前が生成される
console.log(chance.email()); // 常に同じメールが生成される
faker(現在は @faker-js/faker)は、非常に豊富なデータタイプと多言語(ロケール)サポートを提供します。現実味のあるデータを大量に生成したい場合に最適です。
// faker: 豊富なデータとロケール対応
const { faker } = require('@faker-js/faker');
console.log(faker.person.fullName()); // 現実的な人名
console.log(faker.location.city()); // 都市名
faker.locale = 'ja'; // 日本語対応も可能
mockjs は、データ生成だけでなく、テンプレート構文を用いてデータ構造を定義する特徴があります。データ生成ルールを JSON like な構文で記述できます。
// mockjs: テンプレート構文でデータ定義
const Mock = require('mockjs');
const data = Mock.mock({
'list|1-10': [{
'id|+1': 1,
'name': '@cname'
}]
});
console.log(data.list); // 指定された構造のランダムデータ
API エンドポイント自体をモックする方法には、サーバーを立ち上げるアプローチと、クライアント側でインターセプトするアプローチがあります。
json-server は、JSON ファイルをデータベースとして扱い、本物の REST API サーバーを数秒で立ち上げます。ネットワークリクエストを実際に行うため、fetch や axios の設定を変更せずにテストできます。
# json-server: db.json ファイルからサーバー起動
# npx json-server --watch db.json
// json-server を利用するクライアントコード
// 実際の HTTP リクエストとして処理される
fetch('http://localhost:3000/users/1')
.then(res => res.json())
.then(data => console.log(data));
mockjs は、XMLHttpRequest または Fetch API をインターセプトし、サーバーにリクエストを送らずにモックデータを返します。デプロイ環境でもコードを変更せずにモックを無効化できる利点があります。
// mockjs: リクエストをインターセプト
Mock.mock(/\/api\/users/, 'get', {
'id': 1,
'name': '@cname'
});
// この fetch は実際にはネットワークに飛ばず、Mock のデータが返る
fetch('/api/users').then(res => res.json());
テスト自動化において、毎回異なるデータが生成されると問題になることがあります。
chance はコンストラクタでシード値を指定するだけで、完全に再現可能なデータストリームを作成できます。
// chance: シード値による完全再現
const chance1 = new Chance(999);
const chance2 = new Chance(999);
// chance1.name() と chance2.name() は常に一致する
faker も最近のバージョンではシード機能を提供していますが、chance ほど軽量ではありません。
// faker: シード機能の利用
const { faker } = require('@faker-js/faker');
faker.seed(12345);
const name1 = faker.person.fullName();
faker.seed(12345);
const name2 = faker.person.fullName();
// name1 と name2 は一致する
json-server はデータ生成ライブラリではないため、シード値の概念はありません。ただし、固定された JSON ファイルをソースとするため、データ自体は常に一定です。
// json-server: db.json
{
"users": [
{ "id": 1, "name": "Fixed Name" }
]
}
mockjs はランダム生成が基本ですが、テンプレート内で固定値を混ぜることで調整可能です。
// mockjs: 固定値とランダム値の混合
Mock.mock({
'fixedId': 100,
'randomName': '@name'
});
ライブラリを選択する際、メンテナンス状況は重要な要素です。
faker は、元のメンテナーによる問題を経て、コミュニティフォークである @faker-js/faker が事実上の標準となっています。活発にメンテナンスされており、セキュリティアップデートも迅速です。
chance は長年安定しており、大きな変更はありません。堅実な選択肢ですが、新機能の追加は緩やかです。
json-server は開発の一時停止(メンテナンスモード)が発表されていますが、依然としてプロトタイピング用途では非常に強力です。本番環境での利用は避けるべきです。
mockjs は更新頻度が低く、モダンな Fetch API や TypeScript との相性に課題がある場合があります。新しいプロジェクトでは、MSW (Mock Service Worker) などの代替を検討するのが賢明です。
| 機能 | chance | faker | json-server | mockjs |
|---|---|---|---|---|
| 主な用途 | データ生成 | データ生成 | API サーバー | API インターセプト |
| 再現性 | ⭐⭐⭐ (シード値) | ⭐⭐ (シード値) | ⭐⭐⭐ (固定ファイル) | ⭐ (ランダム) |
| データ豊富さ | ⭐⭐ | ⭐⭐⭐ | N/A | ⭐⭐ |
| ネットワーク | 不要 | 不要 | 必要 (HTTP) | 不要 (インターセプト) |
| 保守状況 | 安定 | 活発 | メンテナンスモード | 低頻度 |
プロジェクトの要件に応じて、以下のように選択するのが最適です。
chance を選んでください。シード値の扱いがシンプルで確実です。@faker-js/faker が一択です。機能性と保守性のバランスが最も優れています。json-server が便利です。ただし、長期的なメンテナンスを考慮し、段階的に本番 API へ移行する計画を立ててください。mockjs は既存のレガシープロジェクトでは有用ですが、新規プロジェクトでは MSW や json-server の併用を検討することをお勧めします。これらのツールは相互に排他的ではありません。例えば、json-server のデータ生成に faker を組み合わせるなど、目的に応じて組み合わせるのがプロフェッショナルなアプローチです。
シード値(seed)による再現性が重要なテストシナリオで選択します。同じシード値から常に同じデータが生成されるため、バグの再現やスナップショットテストに適しています。軽量で依存関係が少ないため、シンプルなプロジェクトやブラウザ環境での利用にも向いています。
多様なロケール対応と豊富なデータタイプが必要な場合に最適です。@faker-js/faker としてコミュニティによりメンテナンスされており、現実的なデータ生成能力が最も高いです。大規模なアプリケーションや、多言語対応が必要なプロジェクトで真価を発揮します。
バックエンド実装前にフル機能の REST API を素早く立ち上げたい場合に選択します。設定ファイル一つで CRUD 操作やフィルタリング、リレーション機能を提供するため、プロトタイピングやフロントエンド単体の開発効率が劇的に向上します。
既存の API 仕様が決まっており、コードを変更せずにレスポンスをフックしたい場合に利用されます。特に中国圏のプロジェクトで歴史的に利用されてきましたが、メンテナンス頻度は低いため、新しいプロジェクトでは代替手段の検討を推奨します。
Chance - Random generator helper for JavaScript
Homepage: http://chancejs.com
Many more details on http://chancejs.com but this single library can generate random numbers, characters, strings, names, addresses, dice, and pretty much anything else.
It includes the basic building blocks for all these items and is built on top of a Mersenne Twister so it can generate these things with repeatability, if desired.
See the full docs for details on installation and usage.
Or view all of the dependents on npm
Know a library that uses Chance that isn't here? Update the README and submit a PR!
https://www.victorquinn.com @victorquinn
Please feel free to reach out to me if you have any questions or suggestions.
THANK YOU!
Be a part of this project! You can run the test using the following.
Note: Make sure you have Yarn installed globally
yarnyarn testThis project is licensed under the MIT License so feel free to hack away :)
Proudly written in Washington, D.C.