# 画面設計書 14-Manual Mocksページ

## 概要

本ドキュメントは、JestドキュメントサイトにおけるManual Mocksページの画面設計を定義する。このページはJestの手動モック機能の使い方を詳細に説明するガイドページである。

### 本画面の処理概要

Manual Mocksページは、__mocks__ディレクトリを使用した手動モックの作成方法を解説する技術ドキュメントページである。自動モックよりも詳細な制御が必要な場合のモック実装方法を提供する。

**業務上の目的・背景**：自動モックでは対応できない複雑なモジュールや、特定の動作を明示的に定義したい場合に、手動モックが必要となる。__mocks__ディレクトリにモック実装を配置することで、一貫したモック動作をテスト全体で共有できる。ファイルシステムやネットワーク通信など、副作用を持つモジュールのテストに特に有効。

**画面へのアクセス方法**：
1. ドキュメントサイトのナビゲーションメニューから「Docs」ドロップダウンを選択
2. サイドバーの「Guides」セクションから「Manual Mocks」を選択
3. Timer Mocksページの「Next」ボタンから遷移

**主要な操作・処理内容**：
1. __mocks__ディレクトリの配置ルールの理解：モジュールファイルと同階層に作成
2. ユーザーモジュールのモック方法：__mocks__/moduleName.jsでのモック定義
3. Node.js組み込みモジュールのモック方法：node_modules/__mocks__/fsなど
4. jest.mock()による手動モックの有効化：テストファイルでの明示的な呼び出し
5. node_modulesのモック方法：npm/yarnパッケージのモック作成

**画面遷移**：
- 遷移元：Timer Mocksページ、サイドバーナビゲーション、検索結果
- 遷移先：ES6 Class Mocksページ、Mock Functionsページ

**権限による表示制御**：なし（公開ドキュメントのため全ユーザーが閲覧可能）

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 14 | jest-mock | 主機能 | モック関数の生成と管理 |
| 18 | jest-resolve | 補助機能 | __mocks__ディレクトリの解決 |

## 画面種別

ドキュメント / ガイド

## URL/ルーティング

- URL: `/docs/manual-mocks`
- ファイルパス: `docs/ManualMocks.md`

## 入出力項目

該当なし（静的コンテンツページのため）

## 表示項目

| No | 項目名 | 表示形式 | 説明 |
|----|--------|----------|------|
| 1 | ページタイトル | テキスト | "Manual Mocks" |
| 2 | 導入文 | テキスト | 手動モックの概要と用途説明 |
| 3 | Mocking user modulesセクション | コードブロック＋テキスト | ユーザーモジュールのモック方法 |
| 4 | ディレクトリ構造図 | コードブロック | __mocks__の配置例 |
| 5 | Mocking Node modulesセクション | コードブロック＋テキスト | Node.js組み込みモジュールのモック |
| 6 | 警告ボックス | アラート | scoped packages の命名規則 |
| 7 | ファイル実装例 | コードブロック | __mocks__/fs.js の実装例 |
| 8 | テスト実装例 | コードブロック | jest.mock('fs') の使用例 |
| 9 | サイドバー | ナビゲーション | ドキュメント目次 |
| 10 | Prev/Nextナビゲーション | ボタン | 前後ページへの遷移リンク |

## イベント仕様

### 1-コードブロックのコピー

ユーザーがコードブロックのコピーボタンをクリックすると、コード内容がクリップボードにコピーされる。

### 2-内部ドキュメントリンククリック

ユーザーが内部ドキュメントリンク（Mock Functions、Configurationページ等）をクリックすると、該当するドキュメントページに遷移する。

## データベース更新仕様

該当なし（静的コンテンツページのためデータベース操作なし）

## メッセージ仕様

該当なし

## 例外処理

| 例外状態 | 表示・動作 |
|---------|-----------|
| ページが見つからない | 404エラーページを表示 |

## 備考

- Docusaurusフレームワークで自動生成されるページ
- Markdownファイル（docs/ManualMocks.md）から静的HTMLに変換
- コードブロックにはシンタックスハイライトが適用される
- scoped packages (@scope/packageName) の__mocks__命名規則に関する警告を含む

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

手動モックのディレクトリ解決ロジックを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | defaultResolver.ts | `packages/jest-resolve/src/defaultResolver.ts` | モジュール解決ロジックを確認 |

**読解のコツ**: Jestは__mocks__ディレクトリを自動的に検出し、jest.mock()呼び出し時にモック実装を使用する。解決順序は、テストファイルの位置を基準に上位ディレクトリを探索する。

#### Step 2: エントリーポイントを理解する

jest.mock()の実装を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | index.ts | `packages/jest-runtime/src/index.ts` | jest.mock()の実装を確認 |
| 2-2 | ModuleRegistry | `packages/jest-runtime/src/index.ts` | モックモジュールの登録・取得処理 |

**主要処理フロー**:
1. **jest.mock(moduleName)**: モジュール名を登録
2. **_getMockModule()**: __mocks__ディレクトリからモック実装を検索
3. **require(moduleName)**: モック実装を返却

#### Step 3: モック解決の詳細を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | resolver.ts | `packages/jest-resolve/src/resolver.ts` | getMockModule メソッドの実装 |
| 3-2 | fileWalker.ts | `packages/jest-resolve/src/fileWalkers.ts` | ファイルシステム探索処理 |

### プログラム呼び出し階層図

```
jest.mock('fs')
    │
    ├─ packages/jest-runtime/src/index.ts
    │      └─ _explicitShouldMock.set('fs', true)
    │
    ▼
require('fs')
    │
    ├─ packages/jest-runtime/src/index.ts
    │      ├─ _shouldMock() → true
    │      └─ _getMockModule('fs')
    │             │
    │             └─ packages/jest-resolve/src/resolver.ts
    │                    └─ getMockModule('fs')
    │                           └─ __mocks__/fs.js を検索
    │
    └─ __mocks__/fs.js の exports を返却
```

### データフロー図

```
[入力]                    [処理]                         [出力]

jest.mock('fs') ───▶ shouldMockフラグ設定 ───▶ モック登録完了
                               │
                               ▼
require('fs') ───────▶ shouldMock判定
                               │
              ┌────────────────┴────────────────┐
              ▼                                 ▼
       [モック有効]                        [モック無効]
              │                                 │
              ▼                                 ▼
    __mocks__/fs.js検索              実モジュール読込
              │
              ▼
    モック実装を返却
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| ManualMocks.md | `docs/ManualMocks.md` | ドキュメント | ページコンテンツ定義 |
| index.ts | `packages/jest-runtime/src/index.ts` | ソース | jest.mock()実装 |
| resolver.ts | `packages/jest-resolve/src/resolver.ts` | ソース | モジュール解決処理 |
| defaultResolver.ts | `packages/jest-resolve/src/defaultResolver.ts` | ソース | デフォルト解決ロジック |
