# 画面設計書 27-メールサブコピー

## 概要

本ドキュメントは、LaravelフレームワークのHTMLメールテンプレートにおけるサブコピーコンポーネント（subcopy.blade.php）の設計仕様を定義するものである。

### 本画面の処理概要

本コンポーネントは、HTMLメール内で補足情報を表示するための部品である。メール本文の下部に配置され、主要コンテンツを補完する追加情報（URLの生テキスト表示、免責事項など）を表示する。

**業務上の目的・背景**：メールクライアントによってはボタンが正常に機能しない場合があるため、サブコピーセクションでURLの生テキストを表示することが一般的なベストプラクティスである。「このボタンが動作しない場合は、以下のURLをコピーしてブラウザに貼り付けてください」といった補足説明と共にURLを表示することで、すべてのユーザーがアクションを完了できるようにする。

**画面へのアクセス方法**：本コンポーネントは直接アクセスするものではなく、message.blade.phpで$subcopy変数が定義されている場合に自動的に表示される。通知メール（MailMessage）では、actionUrl属性が設定されている場合に自動的にサブコピーが生成される。

**主要な操作・処理内容**：
1. テーブルレイアウトでサブコピー領域を構成
2. $slotの内容をMarkdown::parse()でパースしてHTMLに変換
3. 変換されたHTMLをテーブルセル内に表示
4. メール本文とフッターの間に配置される

**画面遷移**：サブコピーコンポーネント自体には遷移機能はない。サブコピー内にリンクが含まれる場合、それらをクリックすると該当ページに遷移する。

**権限による表示制御**：サブコピーコンポーネント自体には権限制御はない。表示内容はスロットとして渡されるコンテンツによって決定される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 28 | メール管理 | 主機能 | HTMLメールの補足情報表示 |

## 画面種別

コンポーネント（メールテンプレート部品）

## URL/ルーティング

該当なし（Bladeコンポーネントとして使用）

コンポーネント名: `mail::subcopy`

## 入出力項目

| 項目名 | 型 | 必須 | 説明 |
|--------|------|------|------|
| $slot | string | Yes | サブコピーコンテンツ（Markdown形式対応） |

## 表示項目

| 要素 | 表示内容 | 備考 |
|------|---------|------|
| サブコピー本文 | $slotの内容（Markdownパース済み） | メール本文下部に表示 |

## イベント仕様

### 1-サブコピー内リンククリック

サブコピーコンテンツ内にリンクが含まれている場合、クリックすると該当URLに遷移する。

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

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

該当なし（表示専用コンポーネント）

## メッセージ仕様

該当なし

## 例外処理

| 状態 | 処理内容 |
|------|---------|
| $slot未指定 | 空のテーブルとして出力 |
| Markdownパースエラー | そのままテキストとして出力（推測） |

## 備考

- テーブル幅100%で本文と同じ幅で表示
- Markdown::parse()を使用してスロット内容をパース
- CSSクラス`subcopy`はテーマファイルで定義
- 通知メールでは自動的にアクションURLがサブコピーに含まれる

---

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

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

### 推奨読解順序

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

まず、コンポーネントで受け取るスロットとMarkdownパースの関係を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Markdown.php | `src/Illuminate/Mail/Markdown.php` | parse()メソッドの実装（行142-172） |

**読解のコツ**: `Markdown::parse()`は静的メソッドとして呼び出され、CommonMarkライブラリを使用してMarkdownをHTMLに変換する。

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

処理の起点となる呼び出し元を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | message.blade.php | `src/Illuminate/Mail/resources/views/html/message.blade.php` | x-mail::subcopyの呼び出し（行13-19） |

**主要処理フロー**:
1. **message.blade.php 行13**: `@isset($subcopy)`で$subcopyの存在確認
2. **message.blade.php 行14-17**: `<x-slot:subcopy>`と`<x-mail::subcopy>`で表示

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | subcopy.blade.php | `src/Illuminate/Mail/resources/views/html/subcopy.blade.php` | テーブル構造（行1-7） |

**主要処理フロー**:
- **行1**: テーブル開始（subcopyクラス、幅100%）
- **行2-3**: テーブル行とセル開始
- **行4**: `{{ Illuminate\Mail\Markdown::parse($slot) }}`でMarkdownパース・出力
- **行5-7**: 各タグの閉じ処理

#### Step 4: レイアウトとの関係を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | layout.blade.php | `src/Illuminate/Mail/resources/views/html/layout.blade.php` | subcopyスロットの配置位置（行45） |

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

```
message.blade.php
    │
    └─ @isset($subcopy)
           │
           └─ x-slot:subcopy
                  │
                  └─ x-mail::subcopy ($slot)
                         │
                         └─ subcopy.blade.php
                                │
                                └─ Illuminate\Mail\Markdown::parse($slot)
                                       │
                                       └─ HTML出力
```

### データフロー図

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

$subcopy変数 ──────▶ @isset($subcopy)確認 ──▶ 条件分岐
(message.blade.php)        │
                           │
                    $subcopy存在？
                           │
                    Yes ──▶ x-mail::subcopy
                              │
                              └─▶ subcopy.blade.php
                                    │
                              Markdown::parse($slot)
                                    │
                                    ▼
                            <table class="subcopy">
                              パース済みHTML
                            </table>
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| subcopy.blade.php | `src/Illuminate/Mail/resources/views/html/subcopy.blade.php` | テンプレート | サブコピー部品本体（HTML版） |
| text/subcopy.blade.php | `src/Illuminate/Mail/resources/views/text/subcopy.blade.php` | テンプレート | サブコピー部品本体（テキスト版） |
| message.blade.php | `src/Illuminate/Mail/resources/views/html/message.blade.php` | テンプレート | サブコピーの呼び出し元 |
| layout.blade.php | `src/Illuminate/Mail/resources/views/html/layout.blade.php` | テンプレート | サブコピースロットの配置先 |
| Markdown.php | `src/Illuminate/Mail/Markdown.php` | ソース | Markdownパース処理 |
