# 画面設計書 43-ベンダーフレームコンポーネント

## 概要

本ドキュメントは、Laravelフレームワークの例外レンダラーにおけるベンダーフレームコンポーネント（vendor-frame.blade.php）の画面設計書である。スタックトレースにおけるベンダーディレクトリ（vendor/）のフレームを簡易的に表示するBladeコンポーネントについて定義する。

### 本画面の処理概要

**業務上の目的・背景**：例外のスタックトレースには、アプリケーションコードだけでなく、フレームワークやサードパーティライブラリのコード（vendor/ディレクトリ配下）の呼び出しも含まれる。これらのベンダーフレームは通常、開発者がデバッグ時に詳細を確認する必要性が低いため、簡潔な形式で表示される。このコンポーネントは、ベンダーフレームをコンパクトに表示し、アプリケーションコードの問題に集中できるようにする。

**画面へのアクセス方法**：vendor-frames.blade.phpコンポーネント（ベンダーフレーム一覧）の子コンポーネントとして呼び出される。展開されたベンダーフレームグループ内で、各ベンダーフレームについて1つずつインスタンス化される。

**主要な操作・処理内容**：
1. フレームのソース情報（クラス名::メソッド名または "Entrypoint"）を表示
2. ファイルパスと行番号を表示
3. 展開/折りたたみ機能なし（常に同じ内容を表示）

**画面遷移**：vendor-frames.blade.phpの子コンポーネントとして表示。親コンポーネントの展開/折りたたみに連動して表示/非表示が切り替わる。

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 36 | ビューファクトリ | 主機能 | vendorディレクトリのフレーム描画 |

## 画面種別

詳細 / コンポーネント

## URL/ルーティング

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

## 入出力項目

| 項目名 | 属性名 | 型 | 必須 | 説明 |
|--------|--------|-----|------|------|
| frame | $frame | Frame | 必須 | ベンダーディレクトリのフレーム情報を保持するFrameオブジェクト |

## 表示項目

| 項目名 | 説明 | 表示形式 |
|--------|------|----------|
| フォーマットソース | クラス名::メソッド名(引数) の形式（previous()がある場合） | コード形式テキスト（フォントサイズxs） |
| エントリーポイント表示 | previous()がない場合の "Entrypoint" 表示 | モノスペーステキスト |
| ファイルパス・行番号 | ソースファイルの場所と行番号 | テキスト（フォントサイズxs） |

## イベント仕様

本コンポーネントにはユーザーインタラクションイベントはない。表示専用のコンポーネントである。

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

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

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

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

## メッセージ仕様

| 種別 | メッセージ | 表示条件 |
|------|----------|----------|
| ラベル | Entrypoint | previous()がnullの場合（スタックトレースの最下部） |

## 例外処理

| 例外状況 | 処理内容 |
|----------|----------|
| previous()がnull | "Entrypoint"テキストを表示 |

## 備考

- frameコンポーネントと異なり、コードスニペットの展開機能を持たない
- シンプルなレイアウトでスペースを節約
- ダークモード対応のスタイリング

---

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

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

### 推奨読解順序

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

フレームオブジェクトの構造、特にprevious()メソッドの役割を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Frame.php | `src/Illuminate/Foundation/Exceptions/Renderer/Frame.php` | previous()メソッド（219-226行目）を理解 |

**読解のコツ**: previous()は、スタックトレースにおける1つ前のフレーム（呼び出し元）を返す。nullの場合は、そのフレームがスタックの最下部（エントリーポイント）であることを意味する。

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

ベンダーフレームコンポーネントのテンプレート構造を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | vendor-frame.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/vendor-frame.blade.php` | previous()による条件分岐、formatted-sourceの使用 |

**主要処理フロー**:
1. **1行目**: @props(['frame'])でFrameオブジェクトを受け取る
2. **4-10行目**: `$frame->previous()`の有無で表示内容を切り替え
3. **4-7行目**: previous()がある場合はformatted-sourceコンポーネントを使用
4. **8-10行目**: previous()がない場合は"Entrypoint"を表示
5. **12行目**: file-with-lineコンポーネントでファイル情報を表示

#### Step 3: 親コンポーネントとの関係を理解する

vendor-frames.blade.phpからの呼び出しを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | vendor-frames.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/vendor-frames.blade.php` | vendor-frameコンポーネントがループ内で呼び出される（39-43行目） |

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

```
trace.blade.php
    │
    └─ vendor-frames.blade.php (ベンダーフレームグループ)
           │
           └─ vendor-frame.blade.php (各ベンダーフレーム)
                  │
                  ├─ formatted-source.blade.php (previous()がある場合)
                  │      └─ syntax-highlight.blade.php
                  │
                  └─ file-with-line.blade.php
```

### データフロー図

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

Frame                     vendor-frame.blade.php        HTML出力
(ベンダーフレーム)    ───▶ (フレーム情報描画)
    │
    ├─ previous()     ───▶ formatted-source or "Entrypoint"
    ├─ file()         ─┐
    └─ line()         ─┴──▶ file-with-line表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| vendor-frame.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/vendor-frame.blade.php` | テンプレート | 個別ベンダーフレームの表示 |
| vendor-frames.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/vendor-frames.blade.php` | テンプレート | ベンダーフレームグループの表示（親コンポーネント） |
| Frame.php | `src/Illuminate/Foundation/Exceptions/Renderer/Frame.php` | ソース | フレームデータのラッパークラス |
| formatted-source.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/formatted-source.blade.php` | テンプレート | ソース情報の整形表示 |
| file-with-line.blade.php | `src/Illuminate/Foundation/resources/exceptions/renderer/components/file-with-line.blade.php` | テンプレート | ファイルパス・行番号表示 |
