# 画面設計書 52-リクエストボディ

## 概要

本ドキュメントは、Laravel例外レンダラーにおけるHTTPリクエストボディ表示コンポーネントの画面設計書である。開発時のデバッグ画面において、例外発生時のHTTPリクエストボディ（POSTデータ、JSONペイロード等）をシンタックスハイライト付きで表示するためのUIコンポーネントを定義する。

### 本画面の処理概要

本コンポーネントは、Laravel例外レンダラーの一部として、例外発生時のHTTPリクエストに含まれるボディ（本文）データを開発者に分かりやすく表示する役割を担う。

**業務上の目的・背景**：API開発やフォーム処理において、リクエストボディの内容は問題解決の重要な手がかりとなる。特にバリデーションエラーやデータ変換エラーの原因特定において、実際に送信されたデータを確認することは不可欠である。本コンポーネントにより、開発者はJSON形式でフォーマットされたリクエストデータを即座に確認でき、デバッグ効率が大幅に向上する。

**画面へのアクセス方法**：開発環境（APP_DEBUG=true）でアプリケーション実行中に例外が発生すると、自動的に例外詳細画面（show.blade.php）が表示される。本コンポーネントは、その画面内のセクションとして「Body」見出しとともに表示される。

**主要な操作・処理内容**：
1. HTTPリクエストボディのJSON形式表示（シンタックスハイライト付き）
2. リクエストボディが空の場合は「No request body」メッセージを表示
3. syntax-highlightコンポーネントによるコード色付け
4. ダークモード対応のスタイリング

**画面遷移**：本コンポーネントは例外表示画面（show.blade.php）内に埋め込まれて表示される。単独での画面遷移は発生しない。

**権限による表示制御**：本コンポーネントはAPP_DEBUG=trueの開発環境でのみ表示される。本番環境では例外レンダラー自体が無効化されるため、セキュリティ上の問題はない。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 53 | HTTPリクエスト | 補助機能 | HTTPリクエストボディ情報の取得 |
| 36 | ビューファクトリ | 主機能 | リクエストボディの描画処理 |

## 画面種別

部品（UIコンポーネント）

## URL/ルーティング

本コンポーネントは直接ルーティングされるものではなく、例外発生時にExceptionHandlerを通じて表示される例外詳細画面の一部として描画される。

## 入出力項目

### 入力項目（Props）

| 項目名 | 属性名 | 型 | 必須 | 説明 |
|--------|--------|------|------|------|
| ボディデータ | body | string|null | 必須 | HTTPリクエストボディのJSON文字列（空の場合はnull） |

### 出力項目

| 項目名 | 説明 |
|--------|------|
| ボディ内容 | シンタックスハイライト付きJSON表示 |
| 空状態メッセージ | "No request body"（ボディが空の場合） |

## 表示項目

| 項目名 | 表示形式 | スタイル |
|--------|----------|----------|
| セクションタイトル | "Body" | text-lg font-semibold |
| コードブロック | JSON形式 | bg-white rounded-md overflow-x-auto p-5 text-sm font-mono |
| 空状態 | メッセージ表示 | empty-stateコンポーネント使用 |

## イベント仕様

本コンポーネントは表示専用であり、ユーザーイベントは発生しない。

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

### 操作別データベース影響一覧

本コンポーネントはデータベース操作を行わない（読み取り専用の表示コンポーネント）。

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| - | - | - | データベース操作なし |

## メッセージ仕様

| メッセージID | メッセージ内容 | 表示条件 |
|-------------|--------------|----------|
| MSG-001 | No request body | リクエストボディが空の場合 |

## 例外処理

| 状態 | 処理内容 |
|------|----------|
| ボディがnull/空の場合 | empty-stateコンポーネントで「No request body」を表示 |

## 備考

- Tailwind CSSを使用したスタイリング
- ダークモード完全対応（dark:プレフィックスによる切り替え）
- syntax-highlightコンポーネントを使用してJSONのシンタックスハイライトを実現
- empty-stateコンポーネントを使用して空状態を表現

---

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

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

### 推奨読解順序

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

まず、プログラム間で受け渡されるデータ構造を理解することが重要。このコンポーネントはリクエストボディのJSON文字列を受け取る。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Exception.php | `src/Illuminate/Foundation/Exceptions/Renderer/Exception.php` | requestBody()メソッド（行213-222）でボディJSON文字列を生成 |

**読解のコツ**: requestBody()メソッドは$this->request()->all()からリクエストパラメータを取得し、JSON_PRETTY_PRINTでフォーマットしている。空の場合はnullを返す。

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

処理の起点となるファイル・関数を特定。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | show.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/show.blade.php` | 行25でrequest-bodyコンポーネントを呼び出し |

**主要処理フロー**:
1. **行25**: `<x-laravel-exceptions-renderer::request-body :body="$exception->requestBody()" />`でコンポーネント呼び出し

#### Step 3: コンポーネント本体を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | request-body.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/request-body.blade.php` | @propsでbodyを受け取り、条件分岐で表示 |

**主要処理フロー**:
- **行1**: @props(['body'])でプロパティ定義
- **行5-8**: @if($body)で分岐、syntax-highlightコンポーネントでJSON表示
- **行9-10**: @elseでempty-stateコンポーネント表示

#### Step 4: 依存コンポーネントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | syntax-highlight.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/syntax-highlight.blade.php` | コードのシンタックスハイライト処理 |
| 4-2 | empty-state.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/empty-state.blade.php` | 空状態の表示 |

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

```
show.blade.php
    │
    └─ request-body.blade.php
           │
           ├─ Exception::requestBody()
           │      │
           │      └─ Request::all()
           │
           ├─ syntax-highlight.blade.php（ボディあり時）
           │
           └─ empty-state.blade.php（ボディなし時）
```

### データフロー図

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

Request::all() ───▶ Exception::requestBody() ───▶ request-body.blade.php
                       (JSON変換)                        │
                                                        ├─▶ syntax-highlight（JSON表示）
                                                        └─▶ empty-state（空表示）
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| request-body.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/request-body.blade.php` | テンプレート | ボディ表示UI |
| Exception.php | `src/Illuminate/Foundation/Exceptions/Renderer/Exception.php` | ソース | ボディデータ取得ロジック |
| syntax-highlight.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/syntax-highlight.blade.php` | テンプレート | シンタックスハイライト |
| empty-state.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/empty-state.blade.php` | テンプレート | 空状態表示 |
| show.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/show.blade.php` | テンプレート | 例外詳細画面本体 |
