# 画面設計書 39-ヘッダーコンポーネント

## 概要

本ドキュメントは、Laravelフレームワークの例外レンダラーヘッダーコンポーネント（header.blade.php）の画面設計書である。例外表示画面のヘッダー部分を描画するコンポーネントについて記述する。

### 本画面の処理概要

ヘッダーコンポーネントは、例外表示画面の上部に配置され、例外の主要情報を表示するコンポーネントである。例外クラス名、発生ファイル・行番号、例外メッセージ、環境情報（Laravel/PHPバージョン）、エラーステータスバッジ、リクエストURL情報を一覧表示する。

**業務上の目的・背景**：例外発生時、開発者が最初に確認したい情報は「何が」「どこで」「なぜ」発生したかである。本コンポーネントは、例外クラス名、発生場所、メッセージという最重要情報を画面上部に目立つ形で表示し、開発者が素早く問題を把握できるようにする。

**画面へのアクセス方法**：この部品は直接アクセスされるものではなく、show.blade.phpから`<x-laravel-exceptions-renderer::header>`コンポーネントとして呼び出される。

**主要な操作・処理内容**：
1. 例外クラス名をH1見出しとして表示
2. ファイルパスと行番号をfile-with-lineコンポーネントで表示
3. 例外メッセージをパラグラフとして表示
4. Laravel/PHPバージョンをバッジで表示
5. UNHANDLEDバッジとエラーコードバッジを表示
6. リクエストURLをrequest-urlコンポーネントで表示

**画面遷移**：本部品は画面遷移の概念を持たない。例外表示画面の一部として表示される。

**権限による表示制御**：特になし。例外表示画面で使用される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 36 | ビューファクトリ | 主機能 | 例外タイトルとメッセージの描画 |

## 画面種別

部品（ヘッダーコンポーネント）

## URL/ルーティング

N/A（コンポーネントのため、URLルーティングは存在しない）

## 入出力項目

| 項目名 | 種別 | データ型 | 必須 | 説明 |
|--------|------|----------|------|------|
| $exception | 入力 | Exception | Yes | 例外情報を保持するラッパーオブジェクト |

## 表示項目

| 項目名 | 説明 | 表示形式 |
|--------|------|----------|
| 例外クラス名 | 例外のFQCN | H1見出し |
| ファイル・行番号 | エラー発生箇所 | テキストリンク |
| 例外メッセージ | 詳細メッセージ | パラグラフ |
| Laravelバージョン | フレームワークバージョン | バッジ |
| PHPバージョン | 実行環境バージョン | バッジ |
| UNHANDLEDバッジ | 未処理例外を示す | エラーバッジ |
| エラーコード | 例外コード | エラーバッジ |
| リクエストURL | HTTPリクエストURL | URL表示コンポーネント |

## イベント仕様

### 1-レンダリング処理

Bladeコンポーネントとしてレンダリングされる際、以下の処理が行われる。

**処理フロー**:
1. `$exception->class()`で例外クラス名を取得・表示
2. `$exception->frames()->first()`で最初のフレームを取得し、file-with-lineコンポーネントに渡す
3. `$exception->message()`で例外メッセージを取得・表示
4. `app()->version()`でLaravelバージョンを表示
5. `PHP_VERSION`定数でPHPバージョンを表示
6. `$exception->code()`で例外コードを表示
7. `$exception->request()`でリクエスト情報をrequest-urlコンポーネントに渡す

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

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

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

## メッセージ仕様

| メッセージ | 種別 | 条件 |
|-----------|------|------|
| UNHANDLED | エラーバッジ | 常時表示 |
| CODE {n} | エラーバッジ | 常時表示（例外コード） |
| LARAVEL {version} | 情報バッジ | 常時表示 |
| PHP {version} | 情報バッジ | 常時表示 |

## 例外処理

| 例外 | 条件 | 対応 |
|------|------|------|
| テンプレート未発見 | 部品ファイルが存在しない場合 | Bladeエンジンが例外をスロー |

## 備考

- `@props`ディレクティブで`$exception`を受け取る
- Tailwind CSSのユーティリティクラスで装飾
- ダークモード対応（`dark:`プレフィックス付きクラス）
- レスポンシブデザイン対応（`sm:`プレフィックス付きクラス）
- アラートアイコンを使用してエラー状態を視覚的に強調

---

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

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

### 推奨読解順序

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

ヘッダーコンポーネントに渡されるデータ構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Exception.php | `src/Illuminate/Foundation/Exceptions/Renderer/Exception.php` | `class()`, `message()`, `code()`, `frames()`, `request()`メソッド |
| 1-2 | Frame.php | `src/Illuminate/Foundation/Exceptions/Renderer/Frame.php` | スタックフレームの構造 |

**読解のコツ**: Exceptionクラスの各メソッドが、ヘッダーに表示するデータを提供している。

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

ヘッダーコンポーネントの使用箇所を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | show.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/show.blade.php` | 9行目で`<x-laravel-exceptions-renderer::header>`として使用 |

**主要処理フロー**:
- **9行目**: `<x-laravel-exceptions-renderer::header :$exception />`でヘッダーコンポーネントを呼び出し

#### Step 3: コンポーネント構造を理解する

header.blade.phpの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | header.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/header.blade.php` | 各表示要素の配置（34行） |

**主要処理フロー**:
- **1行目**: `@props(['exception'])`で例外オブジェクトを受け取る
- **3-10行目**: 例外クラス名、ファイル・行番号、メッセージを表示
- **12-22行目**: バージョンバッジをflexレイアウトで表示
- **23-29行目**: エラーステータスバッジを表示
- **32行目**: request-urlコンポーネントを呼び出し

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

```
show.blade.php
    │
    └─ <x-laravel-exceptions-renderer::header>
           │
           └─ header.blade.php
                  │
                  ├─ $exception->class() ───▶ H1見出し
                  │
                  ├─ <x-laravel-exceptions-renderer::file-with-line>
                  │      └─ $exception->frames()->first()
                  │
                  ├─ $exception->message() ───▶ パラグラフ
                  │
                  ├─ app()->version() ───▶ Laravelバージョンバッジ
                  │
                  ├─ PHP_VERSION ───▶ PHPバージョンバッジ
                  │
                  ├─ <x-laravel-exceptions-renderer::badge type="error">
                  │      └─ UNHANDLED + アラートアイコン
                  │
                  ├─ <x-laravel-exceptions-renderer::badge type="error" variant="solid">
                  │      └─ CODE $exception->code()
                  │
                  └─ <x-laravel-exceptions-renderer::request-url>
                         └─ $exception->request()
```

### データフロー図

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

Exception ───▶ header.blade.php ───▶ ヘッダーセクション
    │              │
    │              ├─ class() ───▶ 例外クラス名
    │              ├─ frames()->first() ───▶ ファイル・行番号
    │              ├─ message() ───▶ 例外メッセージ
    │              ├─ code() ───▶ エラーコードバッジ
    │              └─ request() ───▶ リクエストURL
    │
    └─ app()->version() ───▶ Laravelバージョン
       PHP_VERSION ───▶ PHPバージョン
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| header.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/header.blade.php` | テンプレート | ヘッダーコンポーネント |
| Exception.php | `src/Illuminate/Foundation/Exceptions/Renderer/Exception.php` | ソース | 例外データ提供 |
| Frame.php | `src/Illuminate/Foundation/Exceptions/Renderer/Frame.php` | ソース | フレームデータ |
| file-with-line.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/file-with-line.blade.php` | テンプレート | ファイル・行番号表示 |
| badge.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/badge.blade.php` | テンプレート | バッジ表示 |
| request-url.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/request-url.blade.php` | テンプレート | リクエストURL表示 |
| show.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/show.blade.php` | テンプレート | ヘッダー使用元 |
