# 画面設計書 32-テキストメールボタン

## 概要

本ドキュメントは、Laravelフレームワークのテキストメールにおけるボタン部品（button.blade.php）の画面設計書である。プレーンテキスト形式メールでアクションボタンをテキストリンクとして表現するコンポーネントテンプレートについて記述する。

### 本画面の処理概要

テキストメールボタン部品は、HTMLメールにおけるボタンUIをプレーンテキスト形式で表現するためのBladeコンポーネントである。ボタンのラベルとURLを「ラベル: URL」の形式で出力する。

**業務上の目的・背景**：HTMLメールでは視覚的なボタンUIを使用してユーザーにアクションを促すが、テキストメールではこのようなUIが使用できない。本部品は、HTMLメールのボタンと同等の情報（アクションラベルとURL）をテキスト形式で提供することで、テキストメールでもユーザーが同じアクションを実行できるようにする。

**画面へのアクセス方法**：この部品は直接アクセスされるものではなく、テキストメールテンプレート内で`<x-mail::button>`コンポーネントとして呼び出される。Markdownクラスの`renderText()`メソッドがテキスト用コンポーネントパスを参照してレンダリングする。

**主要な操作・処理内容**：
1. `$slot`変数からボタンのラベルテキストを取得
2. `$url`属性からリンク先URLを取得
3. 「ラベル: URL」の形式でテキスト出力

**画面遷移**：本部品は画面遷移の概念を持たない。メール受信者がURLをコピーしてブラウザに貼り付けるか、メールクライアントの自動リンク機能で遷移する。

**権限による表示制御**：特になし。メール送信時に全ての受信者に対して同一のボタン表示が行われる。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 28 | メール管理 | 主機能 | テキストメールのURLリンク表示 |

## 画面種別

部品（テキストメールコンポーネント）

## URL/ルーティング

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

## 入出力項目

| 項目名 | 種別 | データ型 | 必須 | 説明 |
|--------|------|----------|------|------|
| $slot | 入力 | string | Yes | ボタンのラベルテキスト |
| $url | 入力 | string | Yes | リンク先URL |

## 表示項目

| 項目名 | 説明 | 表示形式 |
|--------|------|----------|
| ボタンラベル | ボタンに表示するテキスト | プレーンテキスト |
| URL | リンク先アドレス | プレーンテキスト（URL） |

## イベント仕様

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

Bladeコンポーネントとしてレンダリングされる際、`$slot`と`$url`を「:」で結合してテキスト出力される。

**出力形式**: `{ラベル}: {URL}`

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

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

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

## メッセージ仕様

本部品はメッセージを出力しない。アクションボタンのテキスト表現として使用される。

## 例外処理

| 例外 | 条件 | 対応 |
|------|------|------|
| テンプレート未発見 | 部品ファイルが存在しない場合 | Bladeエンジンが例外をスロー |
| URL未指定 | $url属性が渡されない場合 | 未定義変数エラー発生 |

## 備考

- HTML版のメールボタン（html/button.blade.php）とは異なり、スタイリングやHTMLタグは一切含まれない
- 「ラベル: URL」という極めてシンプルな形式で出力
- メールクライアントの多くはURLを自動的にハイパーリンク化するため、クリック可能になることが期待できる

---

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

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

### 推奨読解順序

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

テキストメールボタンで使用される変数とその流れを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | button.blade.php | `src/Illuminate/Mail/resources/views/text/button.blade.php` | `$slot`と`$url`が「: 」で結合される構造（1行目） |

**読解のコツ**: `{{ $slot }}: {{ $url }}`という形式で、ボタンラベルとURLが単純に連結される。HTML版と比較すると、装飾要素が一切ないことがわかる。

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

メールレンダリングの起点となるクラスを特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Markdown.php | `src/Illuminate/Mail/Markdown.php` | `renderText()`メソッド（122-133行目）がテキストメールのレンダリング起点 |
| 2-2 | Markdown.php | `src/Illuminate/Mail/Markdown.php` | `textComponentPaths()`メソッド（210-216行目）がテキスト用パスを返す |

**主要処理フロー**:
1. **122行目**: `renderText()`メソッドが呼び出される
2. **126-128行目**: `textComponentPaths()`でテキスト用コンポーネントパスに名前空間を置き換え
3. **212-215行目**: `componentPaths()`の各パスに`/text`を付加

#### Step 3: HTML版との比較

HTML版ボタンとの違いを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | button.blade.php (HTML) | `src/Illuminate/Mail/resources/views/html/button.blade.php` | HTML版はテーブルベースの視覚的なボタンUI |
| 3-2 | button.blade.php (Text) | `src/Illuminate/Mail/resources/views/text/button.blade.php` | テキスト版は「ラベル: URL」形式のみ |

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

```
Markdown::renderText()
    │
    ├─ textComponentPaths()
    │      │
    │      └─ componentPaths() + '/text'
    │
    └─ ViewFactory::make()
           │
           └─ テンプレート内で <x-mail::button>
                  │
                  └─ button.blade.php
                         │
                         └─ {{ $slot }}: {{ $url }}
```

### データフロー図

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

ボタンラベル ───┐
               ├──▶ button.blade.php ───▶ "ラベル: URL"
リンクURL ─────┘     ($slot: $url形式)        テキスト
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| button.blade.php | `src/Illuminate/Mail/resources/views/text/button.blade.php` | テンプレート | テキストメールボタン部品 |
| button.blade.php | `src/Illuminate/Mail/resources/views/html/button.blade.php` | テンプレート | HTMLメールボタン部品（比較用） |
| Markdown.php | `src/Illuminate/Mail/Markdown.php` | ソース | メールMarkdownレンダラー |
| message.blade.php | `src/Illuminate/Mail/resources/views/text/message.blade.php` | テンプレート | テキストメール本体構成 |
