ユーザーアイコン

mizuko

約2か月前

0
0

MSWの基本セットアップとディレクトリ構造

Next.js
TypeScript
MSW

MSW(Mock Service Worker)をNext.jsプロジェクトにセットアップする手順と推奨ディレクトリ構造。

必要なパッケージのインストール:

npm install --save-dev msw @mswjs/data @faker-js/faker npx msw init public/ --save

推奨ディレクトリ構造:

src/mocks/ ├── browser.ts # ブラウザ用MSW設定 ├── server.ts # Node.js用MSW設定 ├── handlers/ │ ├── index.ts # ハンドラー集約 │ ├── auth.ts # 認証系API │ ├── [feature].ts # 機能別ハンドラー ├── data/ │ └── factories/ # データファクトリー │ └── [model].ts # モデル別ファクトリー └── initMocks.ts # MSW初期化

browser.tsの基本実装:

import { setupWorker } from 'msw/browser' import { handlers } from './handlers' export const worker = setupWorker(...handlers)

環境変数による制御を実装する場合のinitMocks.ts:

export async function initMocks() { if (typeof window === 'undefined') { const { server } = await import('./server') server.listen({ onUnhandledRequest: 'bypass' }) } else { const { worker } = await import('./browser') await worker.start({ onUnhandledRequest: 'bypass', serviceWorker: { url: '/mockServiceWorker.js' } }) } } export async function initMocksIfEnabled() { if (process.env.NEXT_PUBLIC_ENABLE_MSW === 'true') { await initMocks() } }

ハンドラーの構成パターン:

// handlers/index.ts export const handlers = [...authHandlers, ...userHandlers] export const createHandlers = (overrides = []) => { return [...overrides, ...handlers] }

この構造により、テスト時のハンドラー切り替えやモックデータの管理が容易になる。