# 画面設計書 46-フォーマットソース

## 概要

本ドキュメントは、Laravelフレームワークの例外レンダラーにおけるフォーマットソースコンポーネント（formatted-source.blade.php）の画面設計書である。スタックトレースの各フレームにおいて、クラス名、演算子、メソッド名、引数を組み合わせてソース情報を整形表示するBladeコンポーネントについて定義する。

### 本画面の処理概要

**業務上の目的・背景**：例外のスタックトレースにおいて、各フレームがどのクラスのどのメソッドで発生したかを明確に表示することは、デバッグの効率化に不可欠である。このコンポーネントは、`ClassName::methodName(arg1, arg2)` や `ClassName->methodName()` といった形式でソース情報を整形し、シンタックスハイライト付きで表示する。

**画面へのアクセス方法**：frame.blade.php および vendor-frame.blade.php コンポーネントから呼び出される。各フレームのソース情報表示部分で使用される。

**主要な操作・処理内容**：
1. フレームオブジェクトからクラス名、演算子（::または->）、メソッド名、引数を取得
2. ソース文字列を組み立て（`$class.$operator.$callable.'('.implode(', ', $frame->args()).')'`）
3. メソッドがない場合はcallable()の結果を使用
4. throwの場合はsource()を使用
5. syntax-highlightコンポーネントでシンタックスハイライト付き表示

**画面遷移**：frame.blade.php または vendor-frame.blade.php の子コンポーネントとして表示。ユーザー操作による遷移はない。

**権限による表示制御**：APP_DEBUGがtrueの場合のみ表示される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 36 | ビューファクトリ | 主機能 | 整形済みソースコードの描画 |

## 画面種別

詳細 / コンポーネント

## URL/ルーティング

直接のURLはなし（親コンポーネントから呼び出されるサブコンポーネント）

## 入出力項目

| 項目名 | 属性名 | 型 | 必須 | 説明 |
|--------|--------|-----|------|------|
| frame | $frame | Frame | 必須 | スタックトレースのフレーム情報を保持するFrameオブジェクト |

## 表示項目

| 項目名 | 説明 | 表示形式 |
|--------|------|----------|
| ソース情報 | クラス名::メソッド名(引数) の形式 | シンタックスハイライト付きテキスト |
| ツールチップ | 全文をツールチップで表示 | Tippyツールチップ |

## イベント仕様

本コンポーネントにはユーザーインタラクションイベントはない。ツールチップはホバー時に自動表示される。

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

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

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

本コンポーネントは表示専用であり、データベースへの更新処理は行わない。

## メッセージ仕様

本コンポーネントにはメッセージ表示はない。

## 例外処理

| 例外状況 | 処理内容 |
|----------|----------|
| class()がnull | callable()と引数のみで文字列を構築 |
| callable()が'throw' | source()の値を使用 |

## 備考

- PHPコードブロック内でソース文字列を動的に構築
- syntax-highlightコンポーネントでPHPとしてハイライト
- truncate属性でテキストを省略表示可能
- data-tippy-contentで全文をツールチップ表示

---

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

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

### 推奨読解順序

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

フレームオブジェクトからソース情報を取得するメソッドを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Frame.php | `src/Illuminate/Foundation/Exceptions/Renderer/Frame.php` | class(), operator(), callable(), args(), source()メソッドを理解 |

**読解のコツ**:
- `class()`: フレームのクラス名を返す（102-111行目）
- `operator()`: 演算子（`::` または `->`）を返す（148-151行目）
- `callable()`: 関数/メソッド名を返す（158-164行目）
- `args()`: 引数を配列で返す（171-185行目）
- `source()`: フレームのソース（クラス名またはファイル名）を返す（78-85行目）

#### Step 2: テンプレートを理解する

フォーマットソースコンポーネントのテンプレート構造を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | formatted-source.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/formatted-source.blade.php` | @phpブロックでのソース文字列構築、syntax-highlightへの渡し方 |

**主要処理フロー**:
1. **1行目**: @props(['frame'])でFrameオブジェクトを受け取る
2. **3-15行目**: @phpブロックでソース文字列を構築
3. **4行目**: `$frame->class()` でクラス名を取得
4. **5行目**: `$frame->operator()` で演算子を取得
5. **6行目**: `$frame->callable()` でメソッド名を取得
6. **8-14行目**: 条件分岐でソース文字列を組み立て
7. **17-22行目**: syntax-highlightコンポーネントで表示

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

syntax-highlightコンポーネントの使用方法を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | syntax-highlight.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/syntax-highlight.blade.php` | truncateモードの動作を理解 |

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

```
frame.blade.php / vendor-frame.blade.php
    │
    └─ formatted-source.blade.php
           │
           └─ syntax-highlight.blade.php
                  │
                  └─ window.highlight() (JavaScript)
```

### データフロー図

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

Frame                           formatted-source.blade.php          HTML出力
    │                           @phpブロック
    │
    ├─ class()          ─┐
    ├─ operator()        ├───▶  $source文字列構築
    ├─ callable()       ─┘
    ├─ args()           ─────▶  引数リスト
    │                                  │
    │                                  ▼
    │                           syntax-highlight.blade.php
    └─ source()         ─────▶  (throwの場合)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| formatted-source.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/formatted-source.blade.php` | テンプレート | ソース情報の整形表示 |
| Frame.php | `src/Illuminate/Foundation/Exceptions/Renderer/Frame.php` | ソース | フレームデータ、各種メソッド |
| syntax-highlight.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/syntax-highlight.blade.php` | テンプレート | シンタックスハイライト処理 |
| frame.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/frame.blade.php` | テンプレート | 親コンポーネント（非ベンダー） |
| vendor-frame.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/vendor-frame.blade.php` | テンプレート | 親コンポーネント（ベンダー） |
