# 画面設計書 29-テキストメールメッセージ

## 概要

本ドキュメントは、Laravelフレームワークのテキストメールテンプレートにおけるメッセージコンポーネント（text/message.blade.php）の設計仕様を定義するものである。

### 本画面の処理概要

本コンポーネントは、プレーンテキストメールの完全なメッセージ構造を構成するための中核テンプレートである。HTML版のmessage.blade.phpと対になるテキスト版であり、ヘッダー、本文、サブコピー、フッターを組み合わせたプレーンテキストメールを生成する。

**業務上の目的・背景**：マルチパートメール（HTML+テキスト）の一部として、テキスト版メッセージはアクセシビリティと互換性を確保するために不可欠である。HTML版と同じ情報を持ちながら、装飾を排した純粋なテキスト形式で提供することで、あらゆるメールクライアントでコンテンツが正しく表示されることを保証する。

**画面へのアクセス方法**：本コンポーネントは直接アクセスするものではなく、MailableクラスでMarkdownメールを送信する際、自動的にテキスト版としてレンダリングされる。Markdown::renderText()メソッドがテキストコンポーネントパスを使用して本テンプレートをロードする。

**主要な操作・処理内容**：
1. x-mail::layoutコンポーネントを呼び出し、メール全体のレイアウト構造を確立
2. x-mail::headerコンポーネントでアプリケーション名を含むヘッダーを生成
3. {{ $slot }}でメール本文コンテンツをそのまま出力
4. @isset($subcopy)で条件付きサブコピー表示
5. x-mail::footerコンポーネントで著作権情報を含むフッターを生成

**画面遷移**：テキストメールのため画面遷移の概念は適用されない。URLはテキストとして表示される。

**権限による表示制御**：メッセージコンポーネント自体には権限制御はない。コンテンツはスロットとして渡される情報によって決定される。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 28 | メール管理 | 主機能 | テキストメール本体の構成処理 |

## 画面種別

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

## URL/ルーティング

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

コンポーネント名: `mail::message`（テキスト版）

## 入出力項目

| 項目名 | 型 | 必須 | 説明 |
|--------|------|------|------|
| $slot | string | Yes | メール本文コンテンツ |
| $subcopy | string | No | 補足情報（存在する場合のみ表示） |

## 表示項目

| セクション | 表示内容 | 備考 |
|-----------|---------|------|
| ヘッダー | アプリケーション名（config('app.name')） | テキスト形式 |
| 本文 | $slotの内容 | プレーンテキスト |
| サブコピー | $subcopyの内容 | 任意表示 |
| フッター | 著作権情報 | 年度とアプリ名を動的生成 |

## イベント仕様

該当なし（テキストメールのため）

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

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

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

## メッセージ仕様

| 種別 | メッセージ | 条件 |
|------|----------|------|
| フッター | All rights reserved. | 常時表示（@lang使用） |

## 例外処理

| 状態 | 処理内容 |
|------|---------|
| config('app.name')未設定 | 空文字として表示 |
| config('app.url')未設定 | 空のURLとして出力 |
| $subcopy未指定 | セクション自体を出力しない |

## 備考

- HTML版との主な違いは`{!! $slot !!}`ではなく`{{ $slot }}`を使用している点
- @langヘルパーで多言語対応（__()と同等）
- テキスト版はHTMLタグを含まない純粋なテキスト出力
- layout.blade.phpでstrip_tags()によりHTMLタグが除去される

---

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

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

### 推奨読解順序

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

まず、HTML版との構造の違いを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | message.blade.php | `src/Illuminate/Mail/resources/views/text/message.blade.php` | テキスト版メッセージ構造（行1-27） |
| 1-2 | html/message.blade.php | `src/Illuminate/Mail/resources/views/html/message.blade.php` | HTML版との比較（行1-27） |

**読解のコツ**: 構造はHTML版とほぼ同じだが、`{!! $slot !!}`が`{{ $slot }}`になっている点が異なる。テキスト版では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()メソッド（行209-215） |

**主要処理フロー**:
1. **行122-133**: renderText()でテキストビューをレンダリング
2. **行126-127**: replaceNamespace()でテキストコンポーネントパスを設定

#### Step 3: テンプレート実装を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | message.blade.php | `src/Illuminate/Mail/resources/views/text/message.blade.php` | テキストメッセージ構造（全27行） |

**主要処理フロー**:
- **行1-7**: x-mail::layoutとx-mail::headerの呼び出し
- **行10**: `{{ $slot }}`による本文出力（HTML版は`{!! $slot !!}`）
- **行13-19**: $subcopyの条件付き表示
- **行22-26**: x-mail::footerの呼び出し

#### Step 4: 依存コンポーネントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | text/layout.blade.php | `src/Illuminate/Mail/resources/views/text/layout.blade.php` | テキストレイアウト（行1-9） |
| 4-2 | text/header.blade.php | `src/Illuminate/Mail/resources/views/text/header.blade.php` | テキストヘッダー（行1） |
| 4-3 | text/footer.blade.php | `src/Illuminate/Mail/resources/views/text/footer.blade.php` | テキストフッター（行1） |

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

```
Mailable::send()
    │
    └─ Mailable::buildMarkdownView()
           │
           └─ Mailable::buildMarkdownText()
                  │
                  └─ Markdown::renderText()
                         │
                         └─ View::replaceNamespace('mail', textComponentPaths())
                                │
                                └─ View::make('mail::message')
                                       │
                                       └─ text/message.blade.php
                                              │
                                              ├─ x-mail::layout
                                              │      └─ text/layout.blade.php
                                              │
                                              ├─ x-mail::header
                                              │      └─ text/header.blade.php
                                              │
                                              ├─ x-mail::subcopy
                                              │      └─ text/subcopy.blade.php
                                              │
                                              └─ x-mail::footer
                                                     └─ text/footer.blade.php
```

### データフロー図

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

Mailableクラス ───▶ buildMarkdownText() ───▶ テキストメール
(markdown, viewData)     │
                         │
                    Markdown::renderText()
                         │
                         ├─▶ text/message.blade.php
                         │      │
                         │      ├─ $slot（本文）
                         │      ├─ $subcopy（補足）
                         │      └─ config値参照
                         │
                         └─▶ preg_replace (連続改行整理)
                                │
                                └─▶ html_entity_decode
                                       │
                                       └─▶ 最終テキストメール
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| message.blade.php | `src/Illuminate/Mail/resources/views/text/message.blade.php` | テンプレート | テキストメッセージ本体 |
| layout.blade.php | `src/Illuminate/Mail/resources/views/text/layout.blade.php` | テンプレート | テキストレイアウト |
| header.blade.php | `src/Illuminate/Mail/resources/views/text/header.blade.php` | テンプレート | テキストヘッダー |
| footer.blade.php | `src/Illuminate/Mail/resources/views/text/footer.blade.php` | テンプレート | テキストフッター |
| subcopy.blade.php | `src/Illuminate/Mail/resources/views/text/subcopy.blade.php` | テンプレート | テキストサブコピー |
| Markdown.php | `src/Illuminate/Mail/Markdown.php` | ソース | renderText()メソッド |
| Mailable.php | `src/Illuminate/Mail/Mailable.php` | ソース | buildMarkdownText()メソッド |
