はじめに
フロントエンド開発では、バックエンドが完成する前にUIや機能の開発を進めたいことがよくあります。しかし、バックエンドのAPIがまだ用意されていない段階では、データの取得や操作が難しくなることもあります。そんなときに役立つのがモックサーバーです。
本記事では、モックサーバーを立ち上げるために、GraphQLを使ったバックエンドのモックデータを作成し、@graphql-tools/mock と Faker を活用して、フロントエンド開発をスムーズに進める方法を解説します。これを実現することで、バックエンドのDBが整うまでの間でも、フロントエンドの作業を効率よく進めることができます。
モックサーバーを構築する手順とともに、実際の開発環境での活用例をご紹介しますので、ぜひ実践してみてください。
なお今回はスキーマ定義に関して下記のブログで作成したものを用いて構築していきます。
プロジェクトのセットアップ
モックサーバー用のプロジェクトを新規作成し必要なパッケージをインストールします。
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を使用し、リアルなデータをシミュレートすることで、より実践的な開発環境を提供しました。このようなモックサーバーを活用することで、フロントエンドチームはバックエンドの実装を待つことなく、開発を進めることができ、よりスムーズな連携が可能になります。
フロントエンド開発とバックエンド開発を並行して行いたい場合、モックサーバーは非常に有用なツールとなります。是非、自分のプロジェクトにも取り入れてみてください。
最後まで読んでいただき、ありがとうございました!モックサーバーを使った開発が少しでも効率的に進むことを願っています。
関連記事
- TypeScriptで始めるApollo Server入門:Express & MongoDB連携ガイド
2024/12/25 - ExpressとMongoDBで簡単にWeb APIを構築する方法【TypeScript対応】
2024/12/09 - Express(+TypeScript)入門ガイド: Webアプリケーションを素早く構築する方法
2024/12/07 - Supertest と Jest を活用した Express + MongoDB アプリのエンドツーエンドテスト解説
2024/12/20 - JestとTypeScriptで始めるテスト自動化:基本設定から型安全なテストの書き方まで徹底解説
2023/09/13 - Next.jsとAuth.jsで認証機能を実装するチュートリアル
2024/09/13 - 【Next.js】フロントエンド開発で欠かせないReactのUIコンポーネントのテストをReact Testing Libraryで実装
2023/09/20 - React + TypeScript + Webpackでバンドル環境を作るステップバイステップガイド
2025/01/05