# 画面設計書 21-メールメッセージ

## 概要

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

### 本画面の処理概要

本コンポーネントは、HTMLメールの完全なメッセージ構造を構成するための中核テンプレートである。ヘッダー、本文（Body）、サブコピー、フッターの各セクションを組み合わせ、統一されたメールフォーマットを提供する。

**業務上の目的・背景**：アプリケーションから送信されるトランザクションメール（パスワードリセット、注文確認、通知など）において、一貫したブランドイメージとレイアウトを維持するために必要である。開発者はMarkdown形式でメールコンテンツを記述でき、このテンプレートが自動的にHTML形式に変換して配信する。これにより、メール作成の効率化とデザインの統一性を両立できる。

**画面へのアクセス方法**：本コンポーネントは直接アクセスするものではなく、Mailableクラスでmarkdown()メソッドを使用してメール送信時に自動的にレンダリングされる。`Mail::to($user)->send(new WelcomeMail())`のような形式でMailableを送信する際、内部でmessage.blade.phpが使用される。

**主要な操作・処理内容**：
1. x-mail::layoutコンポーネントを呼び出し、メール全体のレイアウト構造を確立
2. x-mail::headerコンポーネントでアプリケーション名とURLを含むヘッダーを生成
3. $slot変数を通じてメール本文コンテンツをレンダリング
4. $subcopy変数が存在する場合、x-mail::subcopyコンポーネントで補足情報を表示
5. x-mail::footerコンポーネントで著作権情報を含むフッターを生成

**画面遷移**：本コンポーネントはメール送信時のレンダリング専用であり、画面遷移の概念は適用されない。ただし、ヘッダー内のリンクをクリックするとアプリケーションのトップページに遷移する。

**権限による表示制御**：メールテンプレート自体には権限制御はない。メール送信のトリガーとなるアクション（例：パスワードリセット要求）において、アプリケーション側で適切な認証・認可処理が行われる。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 28 | メール管理 | 主機能 | HTMLメール本体の構成処理 |
| 29 | Markdownレンダラー | 補助機能 | Markdownメールのレンダリング処理 |

## 画面種別

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

## URL/ルーティング

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

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

## 入出力項目

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

## 表示項目

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

## イベント仕様

### 1-ヘッダーリンククリック

ヘッダー部分のアプリケーション名リンクをクリックすると、config('app.url')で設定されたURLに遷移する。

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

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

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

## メッセージ仕様

| 種別 | メッセージ | 条件 |
|------|----------|------|
| フッター | All rights reserved. | 常時表示（多言語対応） |

## 例外処理

| 状態 | 処理内容 |
|------|---------|
| config('app.name')未設定 | 空文字として表示 |
| config('app.url')未設定 | 空のhref属性として出力 |

## 備考

- 本コンポーネントはLaravelのBladeコンポーネントシステムを使用している
- `{!! $slot !!}`はエスケープなしで出力されるため、XSS対策はMarkdownパーサー側で行われる
- 多言語対応は`__('All rights reserved.')`ヘルパーで実現

---

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

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

### 推奨読解順序

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

まず、メールコンポーネントで使用されるデータ構造（スロット、プロパティ）を理解することが重要。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Mailable.php | `src/Illuminate/Mail/Mailable.php` | Mailableクラスのプロパティ（$markdown, $viewData等）を確認（行86-120） |
| 1-2 | Markdown.php | `src/Illuminate/Mail/Markdown.php` | Markdownパーサーの設定とtheme管理（行28-36） |

**読解のコツ**: Bladeコンポーネントでは`$slot`は特別な変数で、コンポーネントタグ間のコンテンツが自動的に渡される。`x-slot:name`ディレクティブで名前付きスロットも定義可能。

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

処理の起点となるファイル・関数を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Mailable.php | `src/Illuminate/Mail/Mailable.php` | send()メソッド（行198-217）がメール送信の起点 |
| 2-2 | Mailable.php | `src/Illuminate/Mail/Mailable.php` | buildMarkdownView()メソッド（行336-344）でビュー構築 |

**主要処理フロー**:
1. **行198-217**: send()メソッドでMailableの送信処理開始
2. **行336-344**: buildMarkdownView()でHTML/テキスト両方のビューを構築
3. **行388-394**: buildMarkdownHtml()でHTMLビューをレンダリング

#### Step 3: テンプレートレンダリングを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Markdown.php | `src/Illuminate/Mail/Markdown.php` | render()メソッド（行66-113）でMarkdownをHTMLに変換 |
| 3-2 | message.blade.php | `src/Illuminate/Mail/resources/views/html/message.blade.php` | メッセージテンプレートの構造（全27行） |

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

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | layout.blade.php | `src/Illuminate/Mail/resources/views/html/layout.blade.php` | メール全体のHTML構造（行1-58） |
| 4-2 | header.blade.php | `src/Illuminate/Mail/resources/views/html/header.blade.php` | ヘッダー部品の実装（行1-12） |
| 4-3 | footer.blade.php | `src/Illuminate/Mail/resources/views/html/footer.blade.php` | フッター部品の実装（行1-11） |
| 4-4 | subcopy.blade.php | `src/Illuminate/Mail/resources/views/html/subcopy.blade.php` | サブコピー部品の実装（行1-7） |

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

```
Mailable::send()
    │
    ├─ Mailable::buildView()
    │      └─ Mailable::buildMarkdownView()
    │             ├─ Mailable::buildMarkdownHtml()
    │             │      └─ Markdown::render()
    │             │             └─ View::make('mail::message')
    │             │                    ├─ x-mail::layout
    │             │                    │      └─ layout.blade.php
    │             │                    ├─ x-mail::header
    │             │                    │      └─ header.blade.php
    │             │                    ├─ x-mail::subcopy
    │             │                    │      └─ subcopy.blade.php
    │             │                    └─ x-mail::footer
    │             │                           └─ footer.blade.php
    │             └─ Mailable::buildMarkdownText()
    │
    └─ Mailer::send()
```

### データフロー図

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

Mailableクラス ───▶ buildMarkdownView() ───▶ HTMLメール
(markdown, viewData)     │
                         │
                    Markdown::render()
                         │
                         ├─▶ message.blade.php
                         │      │
                         │      ├─ $slot（本文）
                         │      ├─ $subcopy（補足）
                         │      └─ config値参照
                         │
                         └─▶ CssToInlineStyles
                                │
                                └─▶ 最終HTMLメール
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| message.blade.php | `src/Illuminate/Mail/resources/views/html/message.blade.php` | テンプレート | メールメッセージ本体 |
| layout.blade.php | `src/Illuminate/Mail/resources/views/html/layout.blade.php` | テンプレート | メール全体レイアウト |
| header.blade.php | `src/Illuminate/Mail/resources/views/html/header.blade.php` | テンプレート | ヘッダー部品 |
| footer.blade.php | `src/Illuminate/Mail/resources/views/html/footer.blade.php` | テンプレート | フッター部品 |
| subcopy.blade.php | `src/Illuminate/Mail/resources/views/html/subcopy.blade.php` | テンプレート | サブコピー部品 |
| Mailable.php | `src/Illuminate/Mail/Mailable.php` | ソース | メール送信の基底クラス |
| Markdown.php | `src/Illuminate/Mail/Markdown.php` | ソース | Markdownレンダリング処理 |
| MailServiceProvider.php | `src/Illuminate/Mail/MailServiceProvider.php` | ソース | メールサービスの登録 |
