# 画面設計書 38-Markdownレンダリング

## 概要

本ドキュメントは、Laravelフレームワークの例外Markdownレンダリング画面（markdown.blade.php）の画面設計書である。例外情報をMarkdown形式で出力するテンプレートについて記述する。

### 本画面の処理概要

Markdownレンダリング画面は、例外情報をMarkdown形式でフォーマットするテンプレートである。このMarkdown出力は、開発者がバグ報告やIssue作成時に例外情報をコピー＆ペーストできるように設計されている。

**業務上の目的・背景**：開発中に発生した例外をGitHub IssueやSlackなどに報告する際、構造化されたMarkdown形式で情報を共有することで、問題の伝達と再現を容易にする。本テンプレートは、例外クラス名、メッセージ、環境情報、スタックトレース、リクエスト情報、ルーティング情報、DBクエリなど、デバッグに必要なすべての情報をMarkdown形式で整形する。

**画面へのアクセス方法**：この部品は直接アクセスされるものではなく、Renderer::render()メソッド内でレンダリングされ、show.blade.phpのtopbarコンポーネントに渡される。ユーザーは「Copy as Markdown」ボタンでクリップボードにコピーできる。

**主要な操作・処理内容**：
1. 例外クラス名とタイトルをヘッダーとして出力
2. 例外メッセージを出力
3. PHP・Laravelバージョンとホスト情報を出力
4. スタックトレースを出力
5. リクエストメソッドとパスを出力
6. リクエストヘッダーをリスト形式で出力
7. ルートコンテキストを出力
8. ルートパラメータを出力
9. DBクエリをリスト形式で出力

**画面遷移**：本部品は画面遷移の概念を持たない。Markdown文字列として生成され、JavaScriptでクリップボードにコピーされる。

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 29 | Markdownレンダラー | 主機能 | 例外情報のMarkdown形式出力 |

## 画面種別

部品（Markdown出力テンプレート）

## URL/ルーティング

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

## 入出力項目

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

## 表示項目

| 項目名 | 説明 | 表示形式 |
|--------|------|----------|
| 例外クラス名 | 例外のクラス名（FQCN） | Markdown H1 |
| 例外タイトル | HTTPステータステキスト | Markdown H1 |
| 例外メッセージ | 例外の詳細メッセージ | Markdownテキスト |
| PHPバージョン | PHP実行環境バージョン | テキスト |
| Laravelバージョン | フレームワークバージョン | テキスト |
| ホスト | HTTPホスト名 | テキスト |
| スタックトレース | 呼び出し階層 | Markdown H2 + リスト |
| リクエスト | HTTPメソッドとパス | Markdown H2 + テキスト |
| ヘッダー | リクエストヘッダー | Markdown H2 + リスト |
| ルートコンテキスト | ルーティング情報 | Markdown H2 + リスト |
| ルートパラメータ | ルートパラメータ値 | Markdown H2 + JSON |
| DBクエリ | 実行されたSQLクエリ | Markdown H2 + リスト |

## イベント仕様

### 1-Markdownレンダリング

Renderer::render()メソッド内でBladeテンプレートがレンダリングされ、Markdown文字列が生成される。

**処理フロー**:
1. 例外クラス名とタイトルをH1見出しとして出力
2. 例外メッセージを出力
3. 環境情報（PHP/Laravel/ホスト）を出力
4. 「Stack Trace」セクションでフレーム情報をループ出力
5. 「Request」セクションでHTTPメソッドとパスを出力
6. 「Headers」セクションでヘッダーをリスト形式で出力
7. 「Route Context」セクションでルーティング情報を出力
8. 「Route Parameters」セクションでパラメータを出力
9. 「Database Queries」セクションでクエリをリスト形式で出力

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

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

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

## メッセージ仕様

| メッセージ | 種別 | 条件 |
|-----------|------|------|
| No header data available. | 情報 | ヘッダーが空の場合 |
| No routing data available. | 情報 | ルーティング情報が空の場合 |
| No route parameter data available. | 情報 | ルートパラメータが空の場合 |
| No database queries detected. | 情報 | DBクエリがない場合 |

## 例外処理

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

## 備考

- `@forelse`ディレクティブで空データ時のフォールバックメッセージを表示
- スタックトレースは「インデックス - ファイル:行番号」形式で出力
- DBクエリは「接続名 - SQL (実行時間 ms)」形式で出力
- Markdownの太字（`**`）を使用してキーを強調

---

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

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

### 推奨読解順序

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

Markdownテンプレートに渡されるデータ構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Exception.php | `src/Illuminate/Foundation/Exceptions/Renderer/Exception.php` | `class()`, `title()`, `message()`, `frames()`, `requestHeaders()`, `applicationRouteContext()`, `applicationRouteParametersContext()`, `applicationQueries()`メソッド |

**読解のコツ**: Exceptionクラスの各メソッドが、Markdownテンプレートで使用されるデータを提供している。

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

Markdownレンダリングの呼び出し箇所を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Renderer.php | `src/Illuminate/Foundation/Exceptions/Renderer/Renderer.php` | `render()`メソッド（93-95行目）でmarkdown.blade.phpをレンダリング |

**主要処理フロー**:
1. **93-95行目**: ViewFactory::make()でmarkdown.blade.phpをレンダリング
2. **97-100行目**: 生成されたMarkdown文字列を`$exceptionAsMarkdown`としてshow.blade.phpに渡す

#### Step 3: テンプレート構造を理解する

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | markdown.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/markdown.blade.php` | 各セクションの出力形式（50行） |

**主要処理フロー**:
- **1-3行目**: H1見出しと例外メッセージ
- **5-7行目**: 環境情報（PHP/Laravel/ホスト）
- **9-13行目**: Stack Traceセクション（@foreachでフレーム出力）
- **15-17行目**: Requestセクション
- **19-25行目**: Headersセクション（@forelseで空チェック）
- **27-33行目**: Route Contextセクション
- **35-41行目**: Route Parametersセクション
- **43-49行目**: Database Queriesセクション

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

```
Renderer::render()
    │
    ├─ ViewFactory::make('markdown', ['exception' => $exception])
    │      │
    │      └─ markdown.blade.php
    │             │
    │             ├─ $exception->class()
    │             ├─ $exception->title()
    │             ├─ $exception->message()
    │             ├─ $exception->frames()
    │             ├─ $exception->request()
    │             ├─ $exception->requestHeaders()
    │             ├─ $exception->applicationRouteContext()
    │             ├─ $exception->applicationRouteParametersContext()
    │             └─ $exception->applicationQueries()
    │
    └─ ViewFactory::make('show', ['exceptionAsMarkdown' => $markdown])
           │
           └─ topbar.blade.php（コピー機能）
```

### データフロー図

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

Exception ───▶ markdown.blade.php ───▶ Markdown文字列
    │              │
    │              ├─ H1: クラス名 - タイトル
    │              ├─ メッセージ
    │              ├─ 環境情報
    │              ├─ H2: Stack Trace
    │              ├─ H2: Request
    │              ├─ H2: Headers
    │              ├─ H2: Route Context
    │              ├─ H2: Route Parameters
    │              └─ H2: Database Queries
    │
    └─────────────────────────────────▶ topbar.blade.php
                                        (クリップボードコピー)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| markdown.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/markdown.blade.php` | テンプレート | Markdown形式出力 |
| Renderer.php | `src/Illuminate/Foundation/Exceptions/Renderer/Renderer.php` | ソース | レンダリング呼び出し |
| Exception.php | `src/Illuminate/Foundation/Exceptions/Renderer/Exception.php` | ソース | 例外データ提供 |
| topbar.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/topbar.blade.php` | テンプレート | コピー機能提供 |
