chance vs faker vs json-server vs mockjs
フロントエンド開発におけるデータ生成と API モックの戦略
chancefakerjson-servermockjs類似パッケージ:

フロントエンド開発におけるデータ生成と API モックの戦略

chancefakerjson-servermockjs は、フロントエンド開発においてバックエンドを待たずに作業を進めるための重要なツール群です。chancefaker はランダムなデータ(名前、住所、数値など)を生成するライブラリであり、テストや UI のサンプルデータ作成に用いられます。一方、json-server は JSON ファイルから即席の REST API サーバーを立ち上げるツールで、mockjs はリクエストをインターセプトしてモックデータを返す仕組みを提供します。これらを適切に使い分けることで、開発スピードとテストの信頼性を向上させることができます。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
chance2,232,7416,5552.13 MB1771年前MIT
faker0-10.1 MB--MIT
json-server075,67539 kB71312日前MIT
mockjs019,652-3426年前-

フロントエンド開発におけるデータ生成と API モックの戦略

フロントエンド開発において、バックエンド API の完成を待たずに作業を進めることは不可欠です。chancefakerjson-servermockjs は、この課題を解決するための代表的なツールですが、それぞれのアプローチと適した場面が異なります。これらは大きく分けて「データの生成」と「API のモック」の 2 つのカテゴリに分類できます。

🎲 データ生成:chance vs faker vs mockjs

ランダムなデータを生成する際、どのライブラリを選ぶかは「再現性」と「データの豊富さ」のバランスで決まります。

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 vs mockjs

API エンドポイント自体をモックする方法には、サーバーを立ち上げるアプローチと、クライアント側でインターセプトするアプローチがあります。

json-server は、JSON ファイルをデータベースとして扱い、本物の REST API サーバーを数秒で立ち上げます。ネットワークリクエストを実際に行うため、fetchaxios の設定を変更せずにテストできます。

# 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) などの代替を検討するのが賢明です。

📊 比較サマリー

機能chancefakerjson-servermockjs
主な用途データ生成データ生成API サーバーAPI インターセプト
再現性⭐⭐⭐ (シード値)⭐⭐ (シード値)⭐⭐⭐ (固定ファイル)⭐ (ランダム)
データ豊富さ⭐⭐⭐⭐⭐N/A⭐⭐
ネットワーク不要不要必要 (HTTP)不要 (インターセプト)
保守状況安定活発メンテナンスモード低頻度

💡 最終的な推奨事項

プロジェクトの要件に応じて、以下のように選択するのが最適です。

  1. テストの再現性が最優先なら chance を選んでください。シード値の扱いがシンプルで確実です。
  2. 多様なデータと多言語対応が必要なら @faker-js/faker が一択です。機能性と保守性のバランスが最も優れています。
  3. API 全体を素早くモックしたいなら json-server が便利です。ただし、長期的なメンテナンスを考慮し、段階的に本番 API へ移行する計画を立ててください。
  4. mockjs は既存のレガシープロジェクトでは有用ですが、新規プロジェクトでは MSWjson-server の併用を検討することをお勧めします。

これらのツールは相互に排他的ではありません。例えば、json-server のデータ生成に faker を組み合わせるなど、目的に応じて組み合わせるのがプロフェッショナルなアプローチです。

選び方: chance vs faker vs json-server vs mockjs

  • chance:

    シード値(seed)による再現性が重要なテストシナリオで選択します。同じシード値から常に同じデータが生成されるため、バグの再現やスナップショットテストに適しています。軽量で依存関係が少ないため、シンプルなプロジェクトやブラウザ環境での利用にも向いています。

  • faker:

    多様なロケール対応と豊富なデータタイプが必要な場合に最適です。@faker-js/faker としてコミュニティによりメンテナンスされており、現実的なデータ生成能力が最も高いです。大規模なアプリケーションや、多言語対応が必要なプロジェクトで真価を発揮します。

  • json-server:

    バックエンド実装前にフル機能の REST API を素早く立ち上げたい場合に選択します。設定ファイル一つで CRUD 操作やフィルタリング、リレーション機能を提供するため、プロトタイピングやフロントエンド単体の開発効率が劇的に向上します。

  • mockjs:

    既存の API 仕様が決まっており、コードを変更せずにレスポンスをフックしたい場合に利用されます。特に中国圏のプロジェクトで歴史的に利用されてきましたが、メンテナンス頻度は低いため、新しいプロジェクトでは代替手段の検討を推奨します。

chance のREADME

Chance

Chance Logo

Build Status GitHub license GitHub stars npm jsDelivr Hits npm Coverage Status awesomeness

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.

Usage

See the full docs for details on installation and usage.

Dependent tools

  • Chance CLI - Use Chance on the command line.
  • Chance Token Replacer - Replace tokens in a string with Chance generated items.
  • Dream.js - Lightweight json data generator
  • Fake JSON Schema - Use chance generators to populate JSON Schema samples.
  • Mocker Data Generator - Minimal JSON data generator.
  • swagger-mock-api - Generate API mocks from a Swagger spec file enriched with Chance types and constraints
  • fony - A simple command line tool for generating fake data from a template string

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!

Author

Victor Quinn

https://www.victorquinn.com @victorquinn

Please feel free to reach out to me if you have any questions or suggestions.

Contributors

THANK YOU!

Contribute!

Be a part of this project! You can run the test using the following.

Note: Make sure you have Yarn installed globally

  1. Install dependencies from package.json by running yarn
  2. Run the test suite via yarn test
  3. Make some fun new modules!

This project is licensed under the MIT License so feel free to hack away :)

Proudly written in Washington, D.C.