はじめに
「テスト用のユーザーデータ、また手で書くの…?」と、test1@example.com、テスト太郎、サンプル住所1-2-3 のようなデータをコピペで量産した経験はありませんか?
手作業のダミーデータには、作るのが面倒なだけでなく「データが単調すぎて画面崩れやバグに気づけない」という落とし穴があります。10文字の名前ばかりでテストしていたら、30文字の名前でレイアウトが崩れることに本番まで気づけない、といった事態が起こりがちです。
そんな課題を解決してくれるのが Faker(@faker-js/faker) です。名前・住所・メールアドレス・価格・日付など、リアルで多様なダミーデータをたった1行で生成できます。この記事では、Fakerの基本から実践的な活用法までを解説します。
Fakerとは
Fakerは、テストや開発のために「偽物だけどリアルな」データを大量に生成できるJavaScript/TypeScriptライブラリです。ブラウザでもNode.jsでも動作し、MITライセンスで商用利用も可能です。npmでは週間数百万ダウンロードを誇る、テストデータ生成のデファクトスタンダードといえる存在です。
主な特徴
- 豊富なデータカテゴリ - 人名・住所・日付・金融・商品情報など、実務で必要になるほぼすべてのジャンルのデータを網羅しています
- 70以上のロケール対応 - 日本語を含む多言語に対応しており、
fakerJAを使えば日本語の氏名や住所も生成できます - シード機能で再現可能 - 乱数のシードを固定すれば毎回同じデータが生成されるため、スナップショットテストにも安心して使えます
- TypeScript完全対応 - 型定義が同梱されており、エディタの補完だけでどんなデータを作れるか探索できます
執筆時点の最新版はv10系です。v9で53ビット乱数への刷新やツリーシェイキング改善によるバンドルサイズ84.5%削減が行われ、v10からはESMのみのパッケージになりました(Node.js v20.19.0以上が必要ですが、近年のNode.jsならCommonJSプロジェクトからも require でそのまま利用できます)。
インストール
開発時にのみ使うライブラリなので、-D(devDependencies)でインストールするのが基本です。
# npm
npm install -D @faker-js/faker
# yarn
yarn add -D @faker-js/faker
# pnpm
pnpm add -D @faker-js/faker
基本的な使い方
インポートしてメソッドを呼ぶだけです。まずは代表的なデータを生成してみましょう。
import { faker } from '@faker-js/faker';
// 人物情報
console.log(faker.person.fullName()); // 'Jocelyn Schuster'
console.log(faker.internet.email()); // 'Maci92@gmail.com'
// ID・数値・日付
console.log(faker.string.uuid()); // '4136cd0b-d90b-4af7-b485-5d1ded8db252'
console.log(faker.number.int({ min: 1, max: 100 })); // 42
console.log(faker.date.past()); // 2025-11-03T08:14:52.335Z
// 商品・金額
console.log(faker.commerce.productName()); // 'Incredible Soft Chair'
console.log(faker.commerce.price()); // '344.00'
faker.カテゴリ.メソッド() という規則的なAPIなので、TypeScriptの補完を頼りに「どんなデータが作れるか」をエディタ上で探せるのが快適です。
日本語データを生成する
日本語のデータが必要な場合は、fakerJA をインポートします。
import { fakerJA as faker } from '@faker-js/faker';
console.log(faker.person.fullName()); // '佐藤 陽菜'
console.log(faker.location.city()); // '横浜市'
シードで結果を固定する
テストでは「実行のたびに値が変わる」と困る場面があります。シードを設定すれば、同じ順序で同じ値が生成されます。
import { faker } from '@faker-js/faker';
faker.seed(123);
console.log(faker.number.int()); // 実行するたびに必ず同じ値
faker.seed(123);
console.log(faker.number.int()); // 上と同じ値が再現される
実践的なユースケース
ユースケース1: ファクトリ関数でテストユーザーを量産する
実務では、単発の値よりも「一貫性のあるオブジェクト」が必要になります。名前とメールアドレスが連動したユーザーを生成するファクトリ関数を作ってみましょう。
import { faker } from '@faker-js/faker';
interface User {
id: string;
firstName: string;
lastName: string;
email: string;
registeredAt: Date;
plan: 'free' | 'basic' | 'business';
}
function createRandomUser(overrides: Partial<User> = {}): User {
const firstName = faker.person.firstName();
const lastName = faker.person.lastName();
return {
id: faker.string.uuid(),
firstName,
lastName,
// 名前と連動したメールアドレスを生成できる
email: faker.internet.email({ firstName, lastName }),
registeredAt: faker.date.past({ years: 2 }),
plan: faker.helpers.arrayElement(['free', 'basic', 'business']),
...overrides,
};
}
// 100人分のユーザーを一気に生成
const users = faker.helpers.multiple(createRandomUser, { count: 100 });
// 特定のフィールドだけ固定したい場合はoverridesで上書き
const businessUser = createRandomUser({ plan: 'business' });
faker.helpers.arrayElement() で選択肢からランダムに選んだり、faker.helpers.multiple() で一括生成したりと、ヘルパー群がファクトリ作りを強力に支えてくれます。
ユースケース2: ユニットテストでの活用
VitestやJestのテストで、シードを固定しつつ多様な入力を試せます。
import { describe, it, expect, beforeEach } from 'vitest';
import { faker } from '@faker-js/faker';
import { formatUserName } from './formatUserName';
describe('formatUserName', () => {
beforeEach(() => {
// テストごとにシードを固定して再現性を確保
faker.seed(42);
});
it('姓と名をスペース区切りで結合する', () => {
const firstName = faker.person.firstName();
const lastName = faker.person.lastName();
expect(formatUserName(firstName, lastName)).toBe(`${lastName} ${firstName}`);
});
});
固定値のテストデータと違い、「たまたま通ってしまうテスト」を減らしながら、シードのおかげでCIでの再現性も保てるのがポイントです。
ユースケース3: UI開発中のモックデータ表示
バックエンドAPIが未完成でも、フロントエンドの開発を止めずに進められます。Reactコンポーネントに流し込む例です。
import { fakerJA as faker } from '@faker-js/faker';
// 開発中のみ使うモックデータ(日本語)
const mockProducts = faker.helpers.multiple(
() => ({
id: faker.string.uuid(),
name: faker.commerce.productName(),
price: faker.number.int({ min: 500, max: 50000 }),
stock: faker.number.int({ min: 0, max: 99 }),
}),
{ count: 20 },
);
export function ProductList() {
return (
<ul>
{mockProducts.map((product) => (
<li key={product.id}>
{product.name} - ¥{product.price.toLocaleString()}(在庫: {product.stock})
</li>
))}
</ul>
);
}
長い商品名や在庫0のケースが自然に混ざるため、固定データでは見逃しがちなレイアウト崩れや境界値の考慮漏れに早い段階で気づけます。
まとめ
Faker(@faker-js/faker)について、基本から実践的な使い方までを紹介しました。
faker.カテゴリ.メソッド()の直感的なAPIで、リアルなダミーデータを1行で生成できますfakerJAを使えば日本語の氏名や住所も生成でき、国内向けアプリの開発にそのまま使えます- シード機能により再現性が確保できるため、テストでも安心して使えます
- ファクトリ関数と
faker.helpersを組み合わせれば、一貫性のあるテストデータを量産できます
「テストデータを手で書く時間」は、Fakerを導入すればほぼゼロになります。まずは npm install -D @faker-js/faker して、いつも手書きしているテストデータを1つ置き換えるところから始めてみてください。データの多様性が上がるだけで、思わぬバグの発見につながるはずです。