フロントエンド開発に役立つモックサーバー構築:@graphql-tools/mock と Faker を使った実践ガイド
はじめに
フロントエンド開発では、バックエンドが完成する前にUIや機能の開発を進めたいことがよくあります。しかし、バックエンドのAPIがまだ用意されていない段階では、データの取得や操作が難しくなることもあります。そんなときに役立つのがモックサーバーです。
本記事では、モックサーバーを立ち上げるために、GraphQLを使ったバックエンドのモックデータを作成し、@graphql-tools/mock と Faker を活用して、フロントエンド開発をスムーズに進める方法を解説します。これを実現することで、バックエンドのDBが整うまでの間でも、フロントエンドの作業を効率よく進めることができます。
モックサーバーを構築する手順とともに、実際の開発環境での活用例をご紹介しますので、ぜひ実践してみてください。
なお今回はスキーマ定義に関して下記のブログで作成したものを用いて構築していきます。
今回のゴール
ExpressとApollo Serverを用いてGraphQLのサーバーを構築し、クエリを実行するとダミーデータをレスポンスとして返すよう設定していきます。
下記はApollo Playgroundでクエリを実行したときのレスポンス。id
やtitle
がセットされていますが、これらはFaker
で自動生成した値となっています。
プロジェクトのセットアップ
モックサーバー用のプロジェクトを新規作成し必要なパッケージをインストールします。
mkdir express-mongodb-graphql-with-typescript
cd express-mongodb-graphql-with-typescript
npm init -y
パッケージのインストール
package.json
に下記の内容を貼り付けたのちに
"dependencies": {
"@apollo/server": "^4.11.3",
"cors": "^2.8.5",
"dotenv": "^16.4.7",
"express": "^4.21.2",
"graphql": "^16.10.0",
"graphql-tag": "^2.12.6"
},
"devDependencies": {
"@types/cors": "^2.8.17",
"@types/express": "4.17.2",
"@types/express-serve-static-core": "^4.17.21",
"@types/graphql": "^14.5.0",
"@types/node": "^22.10.5",
"ts-node-dev": "^2.0.0",
"typescript": "^5.7.3"
}
まとめてパッケージをインストールします。
npm install
GraphQLスキーマの定義
今回はTODOアプリを作成する想定で以下の項目を用意します。
import { gql } from 'graphql-tag';
export const typeDefs = gql`
scalar Date
type Todo {
id: ID!
title: String!
isCompleted: Boolean!
createdAt: Date!
updatedAt: Date
}
type Query {
todos: [Todo!]
todo(id: ID!): Todo
}
`;
併せてカスタムスカラーを定義します。
import { GraphQLScalarType, Kind } from 'graphql';
export const DateScalar = new GraphQLScalarType({
name: 'Date',
description: 'Date custom scalar type',
serialize(value) {
if (value instanceof Date) {
return value.toISOString();
}
throw Error('GraphQL Date Scalar serializer expected a `Date` object');
},
parseValue(value) {
if (typeof value === 'number') {
return new Date(value);
}
throw new Error('GraphQL Date Scalar parser expected a `number`');
},
parseLiteral(ast) {
if (ast.kind === Kind.INT) {
return new Date(parseInt(ast.value, 10));
}
return null;
},
});
モックデータの作成
上記のスキーマに基づいたモックデータを生成するための設定を行います。
パッケージのインストール
npm install @graphql-tools/mock @faker-js/faker
- @graphql-tools/mock: GraphQL スキーマに基づいてモックデータを生成します。
- faker: ランダムなデータ(名前、日付、ID など)を生成するためのライブラリです。
モックデータ
クエリtodo
、todos
の定義を行なっています。
todosでは10件レスポンスが返るよう設定しています。
import { faker } from '@faker-js/faker';
export const mocks = {
Todo: () => ({
title: faker.lorem.sentence(),
isCompleted: faker.datatype.boolean(),
createdAt: faker.date.past().toISOString(),
updatedAt: faker.datatype.boolean() ? faker.date.recent().toISOString() : null,
}),
Query: () => ({
todos: () => Array.from({ length: 10 }),
todo: () => ({}),
}),
};
モックサーバーの起動
最後にこれらの定義を用いてApollo Server
を起動します。
PORT番号は8080
に設定しています。
import express from 'express'
import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import cors from 'cors';
import { addMocksToSchema } from '@graphql-tools/mock';
import { makeExecutableSchema } from '@graphql-tools/schema';
import { typeDefs } from './graphql/schema';
import { mocks } from './mocks/mock';
const schema = makeExecutableSchema({ typeDefs });
const mockedSchema = addMocksToSchema({
schema,
mocks,
});
const app = express();
const PORT = 8080;
const server = new ApolloServer({
schema: mockedSchema,
});
async function startServer() {
await server.start();
app.use(
'/graphql',
cors(),
express.json(),
expressMiddleware(server)
);
app.listen(PORT, () =>
console.log(`Mock GraphQL server running at http://localhost:${PORT}/graphql`)
);
}
startServer();
動作確認
下記コマンドでサーバーを起動します。
npx ts-node-dev src/mockServer.ts
todos
クエリを実行しますと下記のようにレスポンスが返ってきます。
todo
クエリもレスポンスが返ってくることが確認できます。
スキーマ定義と幾つかのパッケージを組み合わせるとモックサーバーを起動することが可能となります。
ローカルで起動しておくことでフロントエンドからGraphQLアクセスを行うことができバックエンドの開発を待たずとも実装を進められます。
さいごに
この記事では、GraphQLとExpressを使ってモックサーバーを立て、フロントエンド開発を迅速に進めるための方法を紹介しました。モックサーバーを活用することで、バックエンドの実装が完了する前にフロントエンドの実装を行い、開発効率を大幅に向上させることができます。
さらに、モックデータをランダムに生成するために@faker-js/fakerを使用し、リアルなデータをシミュレートすることで、より実践的な開発環境を提供しました。このようなモックサーバーを活用することで、フロントエンドチームはバックエンドの実装を待つことなく、開発を進めることができ、よりスムーズな連携が可能になります。
フロントエンド開発とバックエンド開発を並行して行いたい場合、モックサーバーは非常に有用なツールとなります。是非、自分のプロジェクトにも取り入れてみてください。
最後まで読んでいただき、ありがとうございました!モックサーバーを使った開発が少しでも効率的に進むことを願っています。
関連する技術ブログ
GraphQL・REST API の堅牢な認可設計:RBAC・ABAC・OAuth 2.0 のベストプラクティス
GraphQL & REST API の堅牢な認可設計を構築する方法とは?RBAC・ABAC の活用、Rate Limiting、API Gateway、監視のベストプラクティスをまとめました。
shinagawa-web.com
キャッシュ戦略完全ガイド:CDN・Redis・API最適化でパフォーマンスを最大化
Webアプリの高速化には、適切なキャッシュ戦略が不可欠。本記事では、CDN(Cloudflare / AWS CloudFront)による静的コンテンツ配信、Redis / Memcached を活用したデータベース負荷軽減、APIレスポンスキャッシュ(GraphQL / REST API)など、キャッシュを駆使してパフォーマンスを向上させる方法を解説。TTL設定、Next.js ISR / SSG のプリフェッチ、クエリキャッシュ(React Query / Apollo Client)、キャッシュヒット率の分析など、実践的なノウハウも紹介します。
shinagawa-web.com
スキーマ駆動開発の実践:React × Express × GraphQLで効率的なAPI設計を実現
GraphQLを活用したスキーマ駆動開発(Schema-Driven Development, SDD)の実践方法を解説します。React(フロントエンド)とExpress(バックエンド)を組み合わせ、GraphQLスキーマを基にAPI設計を進めることで、型安全性と開発効率を向上させる手法を紹介します。GraphQL Code Generatorを用いた型定義の自動生成、スキーマ設計のベストプラクティス、Turborepoによるモノレポ構成についても詳しく解説します。
shinagawa-web.com
GraphQL × TypeScript × Zod:Code Generator を活用した型安全な API 開発とスキーマ管理
GraphQL の開発をより型安全かつ効率的に進めるための実践ガイド。GraphQL Code Generator を活用した TypeScript 型定義の自動生成、Zod を用いたバックエンドのレスポンスバリデーション、スキーマ駆動開発(SDL ベース)のフロー確立、変更履歴の管理、フロントエンドでのフェッチ時の型チェック強化などを解説。さらに、GraphQL Playground / Swagger との API ドキュメント自動生成や Mock サーバーを活用した API テストの自動化についても詳しく紹介します。
shinagawa-web.com
Apollo Serverで始めるGraphQL入門:Express & MongoDB連携ガイド
GraphQLとApollo Serverの基本から、MongoDBを活用したデータ操作までを詳しく解説。Expressを使用した効率的なサーバー構築方法を学びましょう。初心者にもわかりやすいハンズオン形式でお届けします。
shinagawa-web.com
フロントエンドのテスト自動化戦略:Jest・Playwright・MSW を活用したユニット・E2E・API テスト最適化
フロントエンド開発において、品質を担保しながら効率的に開発を進めるためには、適切なテストの自動化が不可欠です。本記事では、Jest や Vitest を活用したユニットテストの導入・強化、React Testing Library や Storybook との統合によるコンポーネントテストの最適化、Playwright / Cypress を用いた E2E テストの拡充について詳しく解説します。さらに、Supertest や MSW を活用した API テストの自動化、Faker / GraphQL Mock によるモックデータの整理、CI/CD パイプラインにおける並列実行やキャッシュ活用による最適化など、テストを効果的に運用するための手法を紹介。また、Codecov / SonarQube によるテストカバレッジの可視化や、フィーチャーフラグを考慮したテスト戦略の策定についても解説し、実践的なアプローチを提案します。テストの信頼性と効率を向上させ、開発プロセスを強化したいフロントエンドエンジニア必見の内容です。
shinagawa-web.com
ExpressとMongoDBで簡単にWeb APIを構築する方法【TypeScript対応】
本記事では、MongoDB Atlasを活用してREST APIを構築する方法を、初心者の方にも分かりやすいステップで解説します。プロジェクトの初期設定からMongoDBの接続設定、Expressを使用したルートの作成、さらにTypeScriptを用いた型安全な実装まで、実践的なサンプルコードを交えて丁寧に説明します。
shinagawa-web.com
Express(+TypeScript)入門ガイド: Webアプリケーションを素早く構築する方法
Node.jsでWebアプリケーションを構築するための軽量フレームワーク、Expressの基本的な使い方を解説。シンプルなサーバー設定からルーティング、ミドルウェアの活用方法、TypeScriptでの開発環境構築まで、実践的なコード例とともに学べます。
shinagawa-web.com
弊社の技術支援サービス
無駄なコストを削減し、投資対効果を最大化する
クラウド費用の高騰、不要なSaaSの乱立、開発工数の増加――これらの課題に悩んでいませんか?本サービスでは、クラウドコストの最適化、開発効率向上、技術選定の最適化 を通じて、単なるコスト削減ではなく、ROIを最大化する最適解 をご提案します。
shinagawa-web.com
最新技術の導入・検証を支援するPoCサービス
Remix、React Server Components、TypeScript移行、クラウドサービス比較、マイクロサービス、サーバーレス、デザインシステムなど、最新技術のPoC(概念実証)を通じて、最適な技術選定と導入を支援します。貴社の開発課題に合わせた検証・実装で、ビジネスの成長を加速させます。
shinagawa-web.com
開発生産性を最大化するための支援サービス
開発チームの生産性向上、コードの品質管理、インフラの最適化まで、様々な側面からサポートします。コードベースのリファクタリングから、テスト自動化、オンボーディング強化まで、プロジェクトの成功に必要なすべての支援を提供。御社の開発現場が効率的に機能するように、技術的な障害を取り除き、スムーズな開発を実現します。
shinagawa-web.com
開発品質向上支援 – 効率的で安定したプロダクトを実現
フロントエンドからバックエンド、データベースまで、開発プロセス全体を最適化し、安定したプロダクト作りをサポートします。コードレビューの仕組み、型定義の強化、E2Eテスト環境の構築など、開発の各ステップにおけるベストプラクティスを導入することで、より効率的でバグの少ない、そしてユーザー満足度の高いサービス提供を支援します。
shinagawa-web.com
Webアプリのセキュリティ強化支援
Webアプリの脆弱性対策からインフラのセキュリティ強化まで、包括的なセキュリティ支援を提供。OWASP Top 10対策、JWT認証の最適化、APIのアクセス制御、依存パッケージの監査、セキュアコーディングの標準化など、実践的なアプローチで開発現場の安全性を向上させます。
shinagawa-web.com
目次
お問い合わせ