# Monaka ファネル・ページ編集 マニュアル

最終更新: 2026-05-13（ファネル状態遷移設計・ページ種別）

エンドユーザー・運用者向けの手順です。詳細な技術仕様は `docs/funnel-spec.md` を参照してください。`docs/` 内の各ファイルの説明は `docs/README.md` を参照してください。

---

## 0. ログイン・新規登録（管理画面）

- トップ（`/`）にアクセスすると **ログイン画面**（`/login`）に移ります。
- メールアドレス・パスワードでログインし、成功すると **ダッシュボード**（`/dashboard`）へ進みます。
- 画面下の **新規登録** リンクは **`/register`** です（登録完了後もダッシュボードへ）。
- **管理画面**（`/login`）と **会員サイト**（`/member/{サイトslug}/login`）は別の認証です。会員でログインしてもダッシュボードには入れません。

### メール・パスワードは合っているのにログインできないとき（管理）

- データベースの **`users` テーブルにユーザー行が無い**（検証用に `migrate:fresh` を実行した・バックアップ未復元、など）と、どの認証情報でも失敗します。**`/register` で新規ユーザーを作る**か、**DB をバックアップから復元**してください。
- `users.plan` は **`trial` / `standard` / `premium`** のいずれかです（空や任意文字列では INSERT できません）。
- **ファネル・読者・LINE 登録などが一斉に無い／テーブル自体が無い** ときは、アプリの不具合というより **データベースが空になった・別 DB を向いている** 可能性が大きいです。**サーバ管理者**は **`docs/funnel-spec.md`** の「**データが一斉に消えたように見えるとき**」を参照し、**バックアップからの復元**を最優先で検討してください。

### ログイン画面・ダッシュボードが真っ白（フォームや統計が表示されない）とき

- 表示はあるが **中身がまったくない**（HTTP は成功しているように見える）場合、サーバ側の **Blade のコンパイルキャッシュ**が壊れていることがあります（**ディスク容量不足のあと**、**`view:cache` を Web サーバと別ユーザーで実行した** など）。
- まずブラウザで **スーパーリロード**（Windows: Ctrl+Shift+R / Mac: Cmd+Shift+R）を試してください。
- 開発者ツールの **ネットワーク**で `/dashboard` の応答を開き、**本文のバイト数が 0 に近い**ときはサーバ側の不具合です。**数千文字以上**あるのに画面だけ白いときは、拡張機能やブロックされた CDN（Bootstrap 等）を疑ってください。
- サーバ管理者向けの対処例: **`sudo -u apache php artisan view:clear`**（続けてキャッシュする場合も **apache ユーザー**で **`view:cache`**）。それでも直らないときは **ディスク空き容量**と **`storage/framework/views` の所有者・権限**（下記「Permission denied」節）を確認してください。

### サーバ管理者向け：MySQL 論理バックアップ（最新1ファイル＋任意で日時付き）

- アプリは **`php artisan putage:db-snapshot`** で接続先 MySQL の **`.env` の `DB_DATABASE` スキーマ全体**を **`mysqldump` → gzip** します（**テーブル単位の抜き取りではない**）。**ストアドルーチン・イベント**も含めます（`--routines --events`）。出力の既定は **`storage/backups/putage-latest.sql.gz` を上書き**です。
- 実行時、**ダンプ直前**に **`information_schema` で BASE TABLE 件数**を表示します。**件数が異常に少ないのに gzip が小さい**ときは、接続先 DB が空に近い・別 DB を向いている等を疑ってください。
- **手動で「その瞬間のコピー」をファイル名で残す**: **`php artisan putage:db-snapshot --dated`**。成功後に **`storage/backups/putage-YYYYMMDD-HHmmss.sql.gz`** も作ります（最新上書きに加えて保持）。スケジューラでも日時付きを毎回残す場合は `.env` の **`PUTAGE_DB_BACKUP_DATED_EACH_RUN=true`**（**ディスクが埋まるので世代削除は別途必須**）。
- **0:00 と 12:00** に動かすには、すでに本番で回している **`php artisan schedule:run` の cron（毎分）** があれば十分です。`config/putage.php` の **`db_backup_enabled`**（`.env` の **`PUTAGE_DB_BACKUP_ENABLED`**、既定 true）がオンのとき、スケジューラが **`putage:db-snapshot`** を **1日2回** 登録します。
- `mysqldump` が無い場合は **`mysql-client`**（または MariaDB クライアント）を入れるか、`.env` の **`PUTAGE_DB_BACKUP_MYSQLDUMP_PATH`** に実行ファイルのフルパスを書いてください。
- **リストア（概略）**: サービス停止 → `gunzip -c putage-latest.sql.gz | mysql -u… -p… 対象DB名`（運用ポリシーに合わせ DB 名を確認）。**上書き前に現行 DB の別名ダンプを取る**ことを推奨します。
- **cron を `root` で回すと** `storage/backups` の所有者が `root` になり、**`apache` ユーザーでの `schedule:run` が書き込めない**ことがあります。本番では **`apache`（または PHP を動かすユーザー）の crontab** に `schedule:run` を置くか、バックアップ後に **`chown apache:apache storage/backups`** など権限を揃えてください。

---

## 運用者へ（繰り返し・重要）

- **「サーバで `.env` を都度書き換えろ」とエンドユーザーに伝えない。** 送信ドメイン認証の運用側の既定は **`config/putage.php` とデプロイ**で揃える。利用者の作業は **DNS に画面の表をコピーするだけ**。
- 短い正本: **`docs/mail-auth-ops-defaults.md`**（サポート・ドキュメント・AI が同じ説明を繰り返さないための索引）。

---

## 送信ドメイン認証（DNS設定）に関する補足（SPFのIP表示）

- 送信ドメイン認証（SPF/DKIM/DMARC）の全体像を「まず理解したい」場合は、非エンジニア向け説明書 **`docs/mail-auth-for-nonengineers.md`** を先に読んでください（何を設定し、なぜ必要で、設定すると何が起きるか）。
- SPF は本来「この送信元IPからのメールを許可する」ための設定ですが、一般ユーザーに IP アドレスを見せずに設定してもらいたい場合があります。
- その場合、このシステムは SPF の値を **`include:` 方式**で案内します（例: `v=spf1 include:_spf.tools.monaka-app.com -all`）。ユーザーは **IP を扱わず**に済みます。
- `include:` の **参照先（`_spf.tools.monaka-app.com`）の TXT** は、運用側（monaka側）の DNS に登録します。アプリサーバでは次で運用側 TXT の中身（ip4）を出力できます。
- 送信元メールアドレスに **サブドメイン**（例: `infomail.maspis.com`）を使う場合は、そのサブドメインが DNS 上で **存在**している必要があります。レジストラによっては、**A/AAAA が無いサブドメインを NXDOMAIN 扱い**として認証で弾くことがあるため、必要に応じて A（または AAAA）を入れてください。

```bash
php artisan putage:spf-include-export
```

運用 DNS が **Cloudflare** のときは、上記の値どおり TXT を API で登録するコマンドも使えます（送信 IP を変えたあとの更新にも便利です）。

```bash
php artisan monaka:spf-include-sync-cloudflare
```

### サーバで `Permission denied`（`storage/framework/views`）が出るとき

`php artisan` を **root** で実行すると、生成ファイルが `root` 所有になり、PHP-FPM（例: `apache` ユーザー）がビューを書き換えられずエラーになります。**デプロイや artisan のあと**に、サーバで次を実行してください（Web ユーザーが `apache` でない場合は `WEB_USER` を変える）。

```bash
sudo /var/www/html/putage.maspis.com/bin/fix-storage-perms.sh
```

---

## 1. ファネルを作る

1. ダッシュボードから **ファネル構築** を開く（画面上部の機能ナビと左メニューのラベルは揃えている）。
2. **ファネルを作成** を押す。作成画面では **テンプレートから作成**（17種＋ファネル名など）か **チャットで作成する**（ファネル情報の入力欄は出さず、チャットのみ。送信後に「この内容でファネルを作成する」。ページ自動生成は順次対応）を選べます。
3. 名前と、必要に応じて **テンプレ（17種のいずれか）** を選ぶ。
   - テンプレを選ぶと、定義に沿ったページがあらかじめ作成されます。
4. 保存するとファネル一覧に戻ります。

---

## 2. ページを追加する（通常）

1. ファネル内の **ページ** 一覧から **ページを追加**。
2. **ページ名** を入力する。
3. **URLから取り込む** をオフのまま **作成する**。

空のページができます。編集画面でブロックを追加してください。

### 公開ページの URL（ゲスト閲覧）・メディア

- ページを **公開** にすると、一覧に **`https://（あなたのドメイン）/p/（ページの uid）`** が表示されます。ゲストが **ログインなし**で閲覧できるのはこの **`GET /p/{uid}`**（公開ルート）です。
- エディタのメディア（画像・動画・PDF）アップロードは **`POST /api/media/upload`**（要ログイン）です。サーバ側では **`media_files` テーブル**にメタデータを保存します。**アップロードやサムネイル URL が失敗する**ときは、多くの場合 **マイグレーション未適用**（`media_files` が無い）か **`public/storage` リンク未作成**です。これらは **デプロイ時に運用または CI が `php artisan migrate`・`php artisan storage:link` を実行**するものであり、**画面から利用しているだけの人が SSH で直す前提にはしない**（開発・協働ではサーバに入れる担当または AI が実行。詳細は `docs/funnel-spec.md` と `.cursor/rules/ai-collaborative-development.mdc`）。レガシーの画像専用アップロードは **`POST /funnel/{ファネル}/page/upload-image`** です。

---

## 3. ページを追加する（URLから取り込む）

外部の公開LPなど、HTMLが取得できるURLから本文を取り込めます。

1. **ページを追加** で **URLから取り込む** をオンにする。
2. **取り込むページのURL** を入力（`https://...`）。**取り込みを確認** で、ブロック変換できるか事前に確認できます。
3. **遷移先のURLも登録する**
   - **オン**: 取り込み後もリンク先（`a` の `href` 等）をそのまま残す。
   - **オフ**: **遷移リンクだけ**外します（UTAGE ブロック取り込み時）。
4. ブロック変換に失敗したときだけ、**HTMLのみでも作成する** にチェックを入れると単一 HTML ブロックで作成できます（レイアウト編集は限定的）。通常はオフのままにしてください。
5. **作成する**。

取り込み済みページは一覧に **取込: ブロック変換** または **取込: HTMLのみ** と表示されます。**↻** ボタンで同じ取込元 URL から再取り込みできます（編集内容は上書きされます）。

取り込んだ **画像**（ブロックの画像・セクション背景・吹き出しアイコン・HTML 内の `img` など）は、作成時に Monaka のストレージへ保存し、ページ内では **`/storage/media/（あなたのユーザーID）/import/...`** を参照します。元サイト（UTAGE の S3 等）の URL のままにはしません。ダウンロードに失敗した画像だけ、元の URL が残ることがあります。

取り込みに成功したページは、**ファネル内のページ一覧**でページ名の下に **取込元：URL** が表示されます。リンクをクリックするか右の **開く** アイコンで元ページを新しいタブで確認できます（**コピー** アイコンで URL をクリップボードにコピーできます）。この表示は **この機能追加以降に URL 取り込みで作成したページ**のみです（以前取り込んだページは記録が無いため表示されません）。

### UTAGE（utage-system.com 等）について

- UTAGE の多くのページは、本文が HTML ではなく **Vue の `v-bind:data` 内の JSON** にあります。
- ページによっては `window.__INITIAL_STATE__` 形式で同等データを持つため、同様に検出して取り込みます。
- 本システムはそれを検出し、**画像・テキスト・ボタン・動画などをブロック単位**にできるだけ変換します。
- UTAGE の `row/col`（2〜4カラム）は、可能な限り **2/3/4カラムとして保持**し、取り込み直後のレイアウト崩れを減らします。
- UTAGE の画像ボタン（`button` + `img_src`）は、Monaka でも **ボタンブロック（背景画像ボタン）** として取り込みます。
- UTAGE ボタンのアニメーション（`animation=scale`）は、Monaka のボタン設定「ズームイン・ズームアウト」として取り込みます。
- テキストの寄せ位置は UTAGE の `align` / `text-align` を優先して取り込み、未指定時は左寄せで再現します。
- テキスト色は `#hex` だけでなく `rgb()/rgba()/hsl()/hsla()/var()` 形式も取り込み対象です。
- **UTAGE の登録フォーム（`form`）** は、同じ位置に Monaka の **登録フォーム** ブロックを自動で置きます（シナリオは未設定）。エディタ・プレビューでは「**登録フォームは Monaka のページエディタから設置してください**」と表示されます。右のプロパティで **使用するシナリオ** を選び、シナリオ側で登録フォームを有効にしてください。
- **箇条書き（`bullet`）** はボレットブロックに変換します（色付き HTML リストも可能な範囲で保持します）。
- UTAGE ページに含まれる **`<style>`（固定バナー用 CSS 等）** は、取り込み時にページ設定の **カスタム CSS** に入ります（再取り込みで更新）。完全一致までは保証しません。必要ならエディタで調整してください。
- UTAGE の **ページ全体の背景画像**（ヘッダー付近の大きな背景など）は **ページ設定の背景画像** に、セクションの **`section_img_src`** は該当セクションの **背景画像** に取り込みます。見た目が違う場合は **同じ URL で再取り込み（↻）** してください。
- **特定商取引法などの「ラベル｜本文」テンプレート**は、UTAGE では灰背景の上に幅 800px の白カード＋**左 23％／右 77％** の 2 列＋区切り線の繰り返しです。Monaka でも同趣旨で取り込みます（`col_width_1`・区切り線の `section_lead_elements`・`.tokusho_title` 用カスタム CSS）。まだ違う場合は一覧の **↻ 再取り込み** を試してください。
- UTAGE の **登録ボタン（form の画像）** は取り込み時に **画像ブロック＋登録フォームの案内** として表示されます（グラデーションボタン画像は保持）。実際の送信はページエディタで **シナリオを選び** 登録フォームを有効にしてください。
- **LINE 公式連携**は UTAGE JSON に無いページでは自動では付きません。必要なら Monaka の **LINEブロック** を手で置き、シナリオを設定してください。
- 取り込み直後に見た目が完全一致しない場合があります。編集画面で調整してください。
- **既に取り込んだページ**を昔のロジックのままにしていると、プレビューと実装の差が出ることがあります。同じURLで **ページを作り直して取り込み直す**と最新の変換が適用されます。

---

## 4. ページの編集（ブロック）

- **登録フォームブロック（シナリオ連携）**: 左または「+ ブロックを追加」から **登録フォーム** を置き、右のプロパティで **使用するシナリオ** を選びます。フォームの項目・公開設定はシナリオの **登録フォーム・読者項目** / **登録・解除フォーム** で編集します（LP 上では選んだシナリオのフォームが表示されます）。任意で **登録経路**（メール用 `?rt=`）を選べます。同じシナリオが別ファネルページですでに使われている場合は確認が出ますが、続行すれば複数ページで共有可能です。保存後、プレビューまたは公開 URL で送信まで確認してください。
- **決済フォームブロック（商品プラン）**: **決済フォーム** を置き、右のプロパティで **初期設定→商品登録** にある **商品プラン** を選びます。商品が1件もないときは「決済フォームを使用するには **初期設定→商品登録** を実施してください。」と表示されます。プレビュー／公開では **購入ページ（`/buy/…`）と同じ申込フォーム**（氏名・メール・電話）が LP 上に表示されます。**送信ボタン（決済へ進む）** はプロパティの **送信ボタン** セクションで、文言・配置・ボタン色・文字色・文字サイズ・太さ・角丸・余白・幅を変更できます（キャンバス上でも反映）。テレコム・一括・公開中・決済連携済みのプランのみ実フォームが出ます。プラン側の設定は商品登録画面で行います。
- **コメントブロック**: **インタラクション** から **コメント** を配置します。**リスト / 吹き出し / カード** の表示形式、送信フォームの有無・文言・ボタン色、**入力項目**（お名前・メール・コメント／お名前・コメントのみ）、メール収集時の **シナリオ連動**（任意）、**返信者名・返信者アイコン**（アップロード／メディア一覧から選択。他ブロックの画像と同系）、事前コメントのアイコンも同様に選択できます。コメント返信では **返信者名** と **管理者返信** を別入力し、返信画面で名前・アイコンを変えた場合は **そのコメントのみ** に反映されます。公開ページでは訪問者がフォームからコメントを送ると **コメント一覧** に追記されます（メールアドレスは一覧に表示しません）。**ページ一覧**の操作列から **コメント返信** 画面を開き、訪問者コメントへ管理者返信できます（返信は公開ページにも表示）。管理プレビューでは送信テストはできません（公開 URL で確認してください）。
- **次へ進むブロック**: **次へ進む** を置き、右のプロパティで **リンクの文字** と **遷移先** を設定します。**次のページへ** は、ファネル内でこのページの**直下にあるページ**へ進みます（ページ一覧の並び順）。直下にページがないときは **遷移先を指定** が既定になり、「ファネル内で次のページを指定してください。」と表示されます。**遷移先を指定** を選ぶと URL を入力できます。
- **購入ボタンブロック（商品プラン）**: **購入ボタン** を置き、右のプロパティで **商品プラン** を選びます（商品未登録時は初期設定→商品登録の案内）。**この LP には申込フォームは表示されません**。設定したボタンをクリックすると、**申込ページ（`/buy/…`）が別タブで開きます**。ボタンの文言・色・サイズなどは右パネルの **ボタン見た目** で変更できます。テレコム・一括・公開中・決済連携済みのプランのみリンクが有効です。
- **決済フォームブロック**の **決済完了後のリダイレクト先**: ラジオで **①ファネル内の別ページ**（一覧から選択。他にページが無いときは「他のページがありません。」で①は選べません）または **②指定URL** を設定できます。テレコム決済完了後、購入者はその先へ遷移します（①は対象ページが公開中である必要があります）。未設定・無効時は従来の購入完了ページです。

- **ページエディタの画像**: 右のプロパティで **画像URL** の右の **↑（アップロード）** を押すか、**画像URLが空のブロック**をキャンバスでクリックしてモーダルを開きます。ファイルを選んでアップロードしたあと、**一覧で当該サムネイルが自動で選ばれた状態**で **「選択」** を押すとブロックに反映されます（手動でグリッドをクリックしなくても可）。一覧が「読み込みに失敗」のときは **再ログイン**を試してください。**サーバ側の DB／ストレージ未整備**（`media_files` や `storage:link`）は **運用・デプロイ担当が直す領域**です（上記「エディタのメディア」および `docs/funnel-spec.md` 参照）。

1. ページ一覧から **編集** を開く。
2. **ブロックの追加**
   - キャンバスは **プレビューに近い見た目**（＋用の余白は出しません）。**段の中**に足す → ブロック間または段先頭の **＋**（マウスを近づけると表示）。**段と段のあいだ**（例: ヘッダー背景の段と画像の段の間）→ その境界の **＋**（新しい段が挟まります）。**ページいちばん下** → **「ここにブロックを追加（下に新しい段）」**。
   - 追加する種類（ヘッドライン、テキスト、画像、動画、PDF など）を選びます。
   - **左サイドバー**からドラッグ＆ドロップ、またはクリックで追加することもできます。
3. **セクション／2カラム** は、キャンバス末尾の追加エリアなど、**セクション内ではなくページ全体の追加**から選ぶと表示されます（セクションの中ではレイアウト追加は選べません）。
4. 右のプロパティで各ブロックの内容・色・余白を編集し、**保存** します。
   - **ページ設定**では、ページ種別（LP、登録ページ、LINE登録ページ、セールスページ、決済ページ、アップセル、サンクス、ウェビナー、イベント予約、会員誘導など）、公開状態、背景、幅、フォント、SEO情報を保存できます。ページ種別は「このページで読者をどの状態へ進めるか」を管理するための目印です。
   - **ファネル設定**では、ファネルの目的、状態遷移設計メモ、ラベル・停止条件メモを残せます。例: `LP閲覧 → メール登録 → 教育シナリオ → イベント予約 → リマインド → 決済 → 会員サイト開放`。
   - 編集画面上部に **Undo / Redo**（元に戻す / やり直し）を配置しています。
   - ショートカット: `Ctrl+Z`（Macは`Cmd+Z`）でUndo、`Ctrl+Shift+Z` / `Ctrl+Y`（Macは`Cmd+Shift+Z`）でRedo。
   - ヘッドライン/サブヘッド/テキストは、プロパティでのHTML直接編集ではなく、**キャンバス上の直接編集**を基本にしています。
   - 2/3/4カラムは、セクション見出しをクリックするとプロパティで**列幅比率**を設定できます。
   - セクション内では、ブロック間にマウスを乗せると **＋** が出て、その位置に挿入できます。要素一覧には **レイアウト**（セクション・2/3/4カラム）もあり、選ぶと **新しい段**として挿入されます（段の中にネストはしません）。
   - **全ブロック共通**で、外側の余白（margin）/ 内側の余白（padding）は **0px〜100px の選択式**です（px単位固定）。
   - **セクション（段）を選んだとき**は **「外側の余白（margin）」**（上・下・左・右）だけを変えます。ブロックを選んだときも同様に margin を設定できます（ブロックには内側 padding もあります）。
   - 余白を変更すると、**編集キャンバス側にも即時反映**されます。
   - **セクションは必須ではありません**。ヘッドラインや画像を置いただけでは **紫の「セクション」枠は出ません**（データ上の入れ物だけ）。**背景や2カラム**が欲しいときは、左の **レイアウト** から **セクション** または **2/3/4カラム** を追加し、右パネルの **背景** で設定します。
   - **子要素の追加**: セクション内の **＋（ホバー時）**・**空セクションの追加ボタン**・ツールバーの **＋**・右パネル **「このセクションにブロックを追加」** から、**ヘッドライン（H1）**・**サブヘッド（H2）**・テキストなどを **そのセクションの中** に追加します。
   - **ブロックの編集**: 追加したブロックを **クリック** すると、右パネルが「セクション設定」から **ヘッドライン／テキスト** などの設定に切り替わります（選択時のみ紫の枠が出ます）。本文はブロックをクリックしてキャンバス上で直接編集できます。
   - **ヘッドライン／サブヘッド／テキスト／ボレット**の **背景・枠線** は、文字まわりの帯用です。背景が単色またはグラデーションのとき **「背景帯の太さ（上下）」** で帯の高さ（0〜64px）を変更できます。
   - 上記4種の **文字サイズ** は、**デフォルト + 8px〜100px** の選択式です。
   - 色設定は、**カラーピッカーとテキスト値（`#RRGGBB` / `rgb(...)`）が相互に連動**します。
   - キャンバス上で文字を選択すると出る装飾ツールバーは、文字に被らないようブロックの上または下に表示されます。ツールバー内のボタン・色・サイズ・フォントを触っても、選択中の文字装飾が続けられます。
   - ボレットの記号は **5種類（チェック、太チェック、三角、星、丸）** から選べます。
   - ボタンブロックには **アクション種別**（URL遷移、ページ内スクロール、ポップアップ、LINE登録、シナリオ登録、決済ページ遷移、イベント予約、会員サイト誘導）と設計メモを保存できます。現時点で実際に動く遷移先は従来どおりリンク先URLです。シナリオ登録や決済などの自動処理は、後続で専用設定として接続します。
   - 画像／動画／音声／PDF ブロックは、**URL未設定時のみ**クリックで対応するメディア選択モーダルを開けます（設定済みは開きません）。
   - メディア選択モーダルは **画像 / 動画・音声 / PDF** のタブで表示を切り替えできます。
   - 音声では `m4a` / `mp4` も選択・アップロード可能です。
   - 音声ブロックの自動再生は、**編集キャンバスでは無効**です（公開ページ側は設定値を使用）。
   - テキスト装飾ツールバーの色選択は、**「文字色」** と **「ハイライト」** のラベル付きで区別できます。

---

## 4.1 画面レイアウト（管理画面）

- メイン列の **一番上** に **機能ナビ（初期設定 / ファネル構築 / シナリオ作成 / 会員サイト / イベント・予約 / パートナー / 契約書 等）** を表示し、その直下に **ページタイトルとログアウト** の行があります。**ファネル構築 / シナリオ作成 / 会員サイト / イベント・予約 / パートナー / 契約書** はホバーまたはフォーカスで、できることの説明ツールチップを表示します。**シナリオ作成** はファネル構築の横から開けます。**メール・LINE配信（送信用アカウント一覧）** は上部の機能ナビには出さず、**左メニューの「配信」** または **初期設定ハブの「メール設定」「LINE設定」** から開きます。
- 左メニューは、選択中の機能に応じて **必要な項目だけに絞って表示** されます。
  - メール・LINE配信: **入口＝左メニュー「配信」または初期設定のメール／LINEカード**（画面上部の機能ナビには含めない）／**中項目＝トップバーで「送信用アカウント｜送信ドメイン認証」**（通常の配信画面のみ）／**小項目＝一覧画面では本文先頭の「送信用アカウント一覧｜アーカイブ済」タブ**。初期設定の **メール設定**／**LINE設定**（`setup_channel=mail|line`）では、ページ見出しを **メール設定**／**LINE設定** とし、**小項目タブ（一覧／アーカイブ済）は本文先頭に表示**する。トップバーの中項目タブ（送信用アカウント／シナリオ／送信ドメイン認証）と左サイドバーの **シナリオ**・**送信ドメイン認証** は出さない。左メニューは **メール設定**（または LINE設定）と **初期設定トップへ戻る** のみ。通常の配信画面では、左メニューに **メール・LINE配信 → 送信用アカウント → 一覧／アーカイブ** と **送信ドメイン認証** のツリーを表示する。
  - 会員サイト: サイト未選択時は **サイト一覧**。サイト選択後は **コース / コースの結合 / 受講生管理 / ラベル設定 / お知らせ管理 / URL管理 / サイト設定 / ページ設定** を左メニューに表示します。各項目にカーソルを合わせると、役割の説明ツールチップが右側に出ます（上部の機能ナビと同様）。**ページ設定** を開いているときは、コースページ・レッスンページ・ログインページ・固定ページの子メニューにも説明があります。コース一覧は **コース設定** のみ（レッスン・編集・削除のボタンは置きません）。各コースカードに **コメントON/OFF**・投稿数・**未回答**（あればコメント管理へリンク）を表示します。**会員サイト一覧**の各サイトカードには、サイト全体の **未回答コメント件数**（1件以上のとき）を表示します。サイト構築画面の上部には **未回答コメント（サイト合計）** の件数カードがあります。**コース設定** を押すと初期設定と同型の **カード一覧**（グループ管理 → レッスン設定・受講生・コース基本設定など）が開き、各作業はカードから進めます。コースの削除は **コース基本設定** 画面の下部です。**コメント**はコース基本設定の**レッスン基本設定**で有効化し、**コース設定 → コメント**で返信・表示/非表示・削除ができます。**コース設定 → 受講状況** で、付与済み受講生ごとの **受講完了数／公開レッスン数（％）**・最終完了日時・受講可否を一覧できます（会員画面の進捗と同じ集計）。
  - イベント・予約: イベント一覧中心
  - パートナー: 案件一覧中心
  - 契約書: **契約書トップ**（`/contract`）の **契約を締結** で **文書を選択**（PDF 複数可）または **テンプレートから選択**。**次へ** の前に **対応会社** を選ぶ画面が開きます（会社が1件だけでも選び直し可能）。文書のみの場合は **ステップ1** で **送付件名** と **PDF ごとの文書名** を編集し、PDF の追加・削除ができます。各 PDF は **1ページ目のサムネイル**が表示され、**クリックで全文プレビュー**できます。確認後 **署名依頼情報の入力へ** → **ステップ2**（**対応会社**（変更可）・封筒名・送信担当者は会社情報から選択または手入力・保管先フォルダ・**自社ワークフロー**・**署名者**・**受領者** など）。**契約書一覧**は上部タブで **すべて**／**会社ごと** に切り替えられます。**自社ワークフロー**は送付前の社内チェック、**受領者**は締結後の再確認送付。いずれも **設定する** を ON にして **＋** から追加。署名者は **＋** から追加。**署名方法は契約印タイプのみ**。**署名位置の設定**（ステップ3）では左のパーツを選び PDF 上に配置（ドラッグで移動）。**確認して送信**は準備中。**アクセスコード**は署名画面を開くときのパスワード（任意）。**署名者変更を許可する**にすると、送信先担当者が実署名者を差し替え可能（送信処理は未接続）。**文書一覧**の **フォルダ管理** で保管先フォルダを登録。**契約書一覧**・**テンプレート**・**契約書設定**。`docs/contract-spec.md`
- 画面内の基本配置は **タブ → 操作ボタン → 一覧/フォーム** の順で統一しています。
- **コース基本設定** など会員サイトの設定フォームは、グレー背景の上に白い **card** を並べ、見出しは **card-header**、各項目は **ラベルを上・入力欄をその下** に縦に並べます（ラベルと入力を左右2列に分けるレイアウトは使いません）。項目の説明は入力の下に小さく表示されます。保存は画面左下の緑ボタンです（**サイト設定** と同じ並びです）。

### 4.1.2 イベント・予約・会員サイト（概要）

- **イベント・予約**: 一覧からイベントを作成すると、説明・開催場所・Zoom URL・定員・申込開始/締切・公開設定が保存されます。イベントを開いた左メニュー **申込フォーム・申込者項目** では、シナリオの **登録フォーム・読者項目** と同様の表形式で、お名前・メール・電話の出し分けとカスタム項目（名称・必須・入力形式・選択肢）を編集できます。公開ページには説明、開催場所、申込受付期間が表示され、受付期間外は予約枠を出さずに「申込受付開始前」「申込受付は終了しました」と案内します。受付中の枠は **カレンダー（初期表示は週）** と **一覧** で選べます（カレンダーは開催中は当月・開催前は最初の枠がある週を含む月を基準に表示）。イベント作成だけでは予約枠は作られないため、左メニュー **日程設定** で曜日・時間帯などを設定し **保存して予約枠を生成** を実行します。**日程の表示期間**は、枠を一括生成する日付の範囲（「自動」＝「いつから」＋「何日分」、「期間を指定」＝カレンダーで開始〜終了日を直接指定）です。公開中のイベントは、ファネル **ページ一覧** と同様、一覧・ワークスペース上部に **公開URL（リンク＋コピー）** を常時表示し、URLまたは **公開ページ** アイコンからそのまま開けます。生成した枠は **予約枠一覧** で **カレンダー**（既定）と **表** をタブ切替できます（緑＝予約可、橙＝残席あり、赤＝満席、灰＝受付終了）。枠をクリックすると詳細・削除ができます。イベント設定で **「公開ページを有効」** にすると、ゲスト向けの予約ページ **`/e/{イベントuid}`** が開きます（流入分析用に URL に **`?rt=任意トークン`** を付けてもよい）。イベントをシナリオに連携すると、シナリオ左メニュー **リマインダ配信** で、イベント開始日時を基準にしたメールリマインド（例: 前日20時、1時間前、終了後フォロー）を追加できます。自動送信にはサーバで **`PUTAGE_EVENT_REMINDERS_ENABLED=true`** と **`php artisan schedule:run`**（cron）が必要です（詳細は `docs/funnel-spec.md`）。
- **会員サイト**: サイト設定まわりの設計一覧（何がどの画面にあるか・未実装項目）は **`docs/membership-site-settings-design.md`** を参照。サイトを作成後、**サイト設定**でロゴ画像（ドラッグ＆ドロップまたは **メディアから選ぶ**／png・jpg・gif・webp・5MB以下）、ヘッダー文言、**ヘッダー右上リンク**（表示名とリンク先URLを両方入れたときだけ会員画面右上に表示）、**テーマカラー**（ファネルと同様のカラーピッカー＋#RRGGBB）、公開状態を整えます。左メニューの **コース** で**教材コース**を作成すると、**「メイングループ」** が自動で1件できます（すぐレッスン追加に進めます）。**コースを追加** のとき、同じサイトに既存コースがあれば **コース基本設定のコピー** で受講スタイル・オファー・レッスン既定などを引き継げます（任意）。**コース基本設定** 画面上部からも、別コースの設定を後からコピーできます。**受講生管理**でコース名を選んで付与すれば、コース1本だけの開放は完了です（コースの結合は不要）。**複数コースをセット**で渡すときだけ **コースの結合** でまとめを作り、コースの結合を付与します。いずれも付与するまで会員には見えません。コースの**サムネイル画像**は追加時または**コース基本設定**で、ドラッグ＆ドロップ・**画像をアップロード**・**メディアから選ぶ**（png・jpg・gif・webp・5MB以下。URLの手入力は不要）で指定します。画像は**会員のコース一覧**（マイページからコースの結合を開いた先の教材コースカード）の**カード上部いっぱい**に大きく表示されます（16:9・高さはおおよそ 180〜280px・未設定時は同じ高さで「画像なし」のプレースホルダ）。公開/下書きも同画面で設定します。コースの **グループ管理** でレッスンをまとめるグループを作成・編集し、一覧の **↑↓** で**グループの表示順**を変えて **表示順を保存** できます（ファネル一覧の「グループ管理」と同じ呼び方）。そのあと **レッスン設定** でグループごとにレッスンを追加・編集します（レッスンの **表示順** は各レッスン編集で変更）。グループの**サムネイル画像**も、コースと同様にドラッグ＆ドロップ・**画像をアップロード**・**メディアから選ぶ**で指定します（URLの手入力は不要）。**登録受講生** は当該コースを含むコースの結合に付与済みの会員一覧、**サイト設定** の **コースカテゴリ** で「初級・上級」などの分類名を登録できます（閲覧権限は変わりません）。**ラベル設定** で受講生に付けるラベル名を登録し、**受講生管理** の **ラベル** から会員ごとに付与します（登録一覧にない名前は付与できません）。**コース基本設定** でコース名・管理名称・種類・サムネイル・**ボタンテキスト**（「受講する」またはカスタム文言）・**カテゴリ**（サイトで登録したものから選択）・**受講対象者**（指定しない／コース付与から〇日後／ラベルで絞り込み）・進捗表示・**受講スタイル**（全レッスン開放／**受講完了にすると次のレッスンが受講可能**）・動画視聴率（順番ロック時・HTML5動画の自動完了基準）・開放日・締切・公開状態などを編集します。順番ロック時、会員はレッスン画面で **受講完了にする** を押すか、HTML5動画を規定の視聴率まで見ると次が解放されます。会員のコースの結合一覧では、ページ設定で「コースの結合で絞り込み」が ON かつカテゴリ登録があるとき、コース一覧上で教材カテゴリの絞り込みが使えます。レッスンには本文、YouTube/Vimeo/動画URL/埋め込みHTML、ボタン、添付ファイル、関連リンク、**ドリップ日数**（付与日起算で何日後から見せるか）と **公開フラグ** を設定します。**コースの結合** では各コースの結合に含まれるコース数、付与済み受講生数、商品プランとの紐づきを確認します。**受講生管理** ではメールアドレスとパスワードを指定して会員を追加し、**コースの結合単位でアクセスを付与/削除**します。**教材コース**を削除すると、そのコースだけを含むコースの結合への受講生付与も自動で解除されます（マイページに「含むコース: 0件」だけ残る状態を防ぐ）。既に残っている場合は運用側で `php artisan putage:prune-orphan-course-bundles` を実行できます。**お知らせ管理** で公開中にしたお知らせは受講生のマイページに表示されます。**公開対象**は「全体」または「指定したコースの登録者」（コースの結合単位。当該コースの受講権限を持つ会員のみ）。**公開日時**のほか **公開終了日時** を設定でき、終了は「未設定（永続的に表示）」も選べます。追加・編集画面の **リッチテキスト** では、文字色・配置・リスト・画像・動画・表・引用・HTMLソース表示などが使えます（画像はメディアライブラリへアップロード）。**コンテンツエディター** は HTML を直接編集するモードです。編集画面の **プレビュー**（または一覧のプレビュー）で、会員サイトと同じ見た目を別タブで確認できます。本文の文字色・サイズ・フォント・表などは会員画面でも反映されます。**ページ設定** では **コースページ / レッスンページ / ログインページ / 固定ページ** の4区分で編集します（左メニュー「ページ設定」および配下の子メニュー）。会員のログインURLは **URL管理** に **`/member/{サイトslug}/login`** として表示されます。下書き中のサイトはログインURLを開けません。**プレビューURL**（1本・既定90日間有効）も同画面に表示されます。URLを開くと会員ログインなしでサイト内を閲覧でき、マイページからコース・レッスンへも通常どおりリンクで移動できます。**プレビューでは公開中のコースがすべて表示されます**（付与の有無は見ません）。実際の受講生は **受講生管理で付与したコースだけ** が表示されます。画面上部にプレビュー帯が出ます。受講完了・コメント・テスト送信などの操作はできません。別ブラウザや期限切れのときは URL管理 からURLを開き直してください。削除はサイト一覧のゴミ箱またはサイト設定の **削除する** から確認画面へ進み、**「削除すると元に戻すことはできません。削除します。」のチェックを入れた場合だけ**実行できます。削除すると受講生・コースの結合・トラック・レッスン・お知らせも消え、商品プランの「購入後に開放するコースの結合」は未設定に戻ります。商品プランの「購入後に開放するコースの結合」は保存できますが、Stripe/UnivaPay/銀行振込の購入完了から自動で会員作成・開放する処理は未接続です。
- **ページ設定（コースページ）** では、**サイトのヘッダ設定**・**コース一覧（トップページ）設定**・**フッター設定** に分かれています。ヘッダーのロゴ画像は、一度設定したあとも **別の画像を選んで保存するだけで差し替え**できます（削除チェックは画像を消すだけのときに使います）。ヘッダー色とフッター色は **フッターと合わせる** / **ヘッダーと合わせる** ボタンで相互にコピーできます（保存前の画面内操作。フッター背景が透明のときはヘッダーへは文字色のみコピーします）。会員マイページ上部中央に **「お知らせ」ボタン**（お知らせ一覧へ・横長）を常時表示し、旧「学習コンテンツ」見出しは出しません。**ログイン後の左メニューは常に非表示**です。フッターは色・文字色・メニュー（URL／お知らせ一覧／公開済み固定ページ・最大10件・並べ替え可）を設定でき、会員画面の最下部に表示されます。トップページ説明文の設定項目は残していますが、マイページでは表示しません。**プレビュー**で会員画面の見え方を別タブで確認できます。
- **ページ設定（レッスンページ）** では、全レッスン共通の **下部案内文**（リッチテキスト）・**前後レッスンへの導線**・サイト共通の **カスタムCSS** を設定します。会員がレッスンを開いたとき、**左にコース内レッスン一覧**（グループ別・受講済みはチェック表示・現在のレッスンを強調）が出ます。スマホでは画面上部の **レッスン一覧** ボタンから開けます。個別レッスン設定で **会員ヘッダー／サイドバーを非表示** にした場合は、この一覧も非表示になります。下部案内文は、動画・本文のカードの下（前へ／次へボタンの上）に **「案内」** 見出し付きで表示されます。
- **レッスン設定（個別）** … **コース設定** → **グループ管理**（必要なら）→ **レッスン設定** → 各グループから **レッスン追加** / **編集**。**レッスン種別**で **通常（教材）** または **テスト（択一クイズ）** を選べます。テストは **合格点（％）** と設問（問題文・選択肢・正解のラジオ）を登録します。会員は回答を送信し、合格点以上で受講完了になります（不合格は何度でも再挑戦）。順番受講のコースでは、テスト合格後に次のレッスンが解放されます。**URL（スラッグ）**はページ名から自動（「自分で変更する」で上書き可）。**アイキャッチ**・**資料ファイル**はアップロード/メディア（URL手入力なし）。アイキャッチは会員の **レッスン閲覧画面**（タイトル下）と **コース内レッスン一覧** に表示されます（未設定時は出しません）。**受講完了ボタン**（文言は **コース基本設定 → レッスン基本設定**・会員レッスン画面の本文下に常に表示）・**押した後の動作**（同画面でラジオ選択・既定は「次のレッスンに進む」。最終レッスンやすでに受講済みの場合はレッスン一覧へ。「その画面にとどまる」も選べます）・**新規レッスンの公開状態**の既定は同画面でコース単位に登録。**次のレッスンを完了で解放**するかどうかは **コース基本設定 → 自動化** の受講スタイルで選びます。**本文下のボタン**は各レッスンの編集で個別設定。コース一覧の「受講する」等とは別です。**資料ダウンロード**と**関連リンク**は表示名＋ファイル/URLで会員にリスト表示。**このレッスンだけの公開タイミング**（ドリップ日数・公開開始日時）と、**コース基本設定の自動化**（受講対象・順番受講・コース開放日など）の違いは画面内に案内あり。レッスン画面の共通CSS・前後導線は **ページ設定 → レッスンページ**。**コメント承認**はコース基本設定 → レッスン基本設定（コメント機能）。会員がレッスンを見るには **コースの結合の付与** が必要です。
- **ページ設定（ログインページ）** では、ページタイトル・案内文（リッチテキスト）・ロゴ/背景・独自 CSS/JS を設定します。ロゴ・背景画像は、一度設定したあとも **別の画像を選んで保存するだけで差し替え**できます（削除チェックは画像を消すだけのときに使います）。ログインフォームは常に表示、ログイン後はコース一覧へ遷移、共通ヘッダー/フッターは出しません。
- **ページ設定（固定ページ）** では、利用規約・FAQ などのページを **追加・編集・削除** します。URL はタイトルから **自動付与**（必要なときだけ「URLを自分で指定する」）。会員画面は `/member/{サイトslug}/page/{ページslug}` です。**左メニューに表示**にチェックを入れると、会員サイトの左サイドメニューに載ります（閲覧権限のない会員には出しません）。**閲覧制限**は「全体公開」「会員限定」「特定コースの結合限定」から選びます。

### 4.1.1 メール・LINE配信の階層（UTAGEとの用語の対応）

UTAGEのヘルプでは **「アカウント一覧」** とだけ書かれていることが多く、**ログイン用のユーザーアカウント** と誤解されやすいです。Monaka では次のように呼び分け、画面上にも短い説明を出します。

| 階層 | Monakaでの呼び方 | ざっくりした中身 | UTAGEで言いがちな言い方 |
|------|-------------------|------------------|-------------------------|
| 第1階層 | **送信用アカウント一覧** | メール・LINEを送る「箱」。公式LINE・送信元メール・SMTPなどの単位 | 多くの文脈で **「アカウント一覧」** |
| 第2階層 | **シナリオ一覧** | 読者の流れ・ステップ配信などのまとまり。作成後にメール/LINEアカウントを紐づける | **シナリオ一覧** |
| 以降 | 読者一覧・ステップ配信など | 各シナリオの中身 | （シナリオ名の下のメニュー） |

導線のイメージは **メール・LINE配信 → シナリオ → シナリオ追加 → メール/LINEアカウントを選ぶ** です。従来どおり **送信用アカウント一覧で箱を選ぶ → そのアカウントに関係するシナリオを見る** 入口も残しています。

- **初期設定**（`初期設定` ハブ）からも、**メール設定**／**LINE設定** のカードで同じ「箱」を用途別に開けます（メール系・LINE系に一覧を絞り込み。複数登録可。この用途別一覧では、通常の配信画面向けの上部タブは表示しません。**メール+LINE** の併用タイプは、送信用アカウント一覧の通常の **追加** から作成してください）。**決済連携** では、テレコム、UnivaPay（新システム）、UnivaPay（旧システム）の接続情報を登録します。秘密情報は保存後に画面へ再表示しません。変更するときだけ再入力してください。
- **通知設定**（`初期設定` → **通知設定**）では、運営向け **Chatwork** を最大5アカウント・各5ルームまで登録します。どのイベントで通知するかは各機能側で随時設定します。各アカウントの **テスト送信** で、選んだルームへ試せます（保存前の入力内容でも可）。**テスト送信が成功**したルームは、入力枠の下に **ルーム名** が表示され DB に保存されます。**ルーム ID が誤っている**等の失敗時は当該枠下に **＜エラー＞** と表示されます（APIトークン誤りはテスト送信欄下の説明文）。ルーム ID を変更するとその枠のルーム名／エラー表示は消えます。
- **オペレーター管理**（初期設定ハブ）では、サブ担当者用のログインを追加・**編集**（名前・メール・パスワード・有効/無効・権限）・削除できます。**アクセス権限**の名称は画面上部の機能ナビと同じです。**チェックを外した機能は、そのオペレーターでは操作できません**（メニュー非表示・URL 直アクセスも不可）。**同じメールアドレスを、別の契約（会社）のオペレーターにも使えます**（2社目を追加するときは、1社目で設定したパスワードを入力）。ログインは契約者と同じ画面から行い、複数契約に登録されている場合は **ログイン後に会社を選びます**。ログイン後、画面上部の **契約** プルダウンで会社を切り替えられます。**要再登録** の行は一度削除して作り直してください。
- **会社情報・法務** では、同じMonakaアカウントで複数の会社・屋号を登録できます。画面は送信用アカウント一覧と同じく **追加**・**グループ管理**・**グループ別一覧（未分類含む）** で管理します。複数社で運用する場合は、登録済み会社の中から **既定** を1件選んでください。ファネル作成/編集、シナリオ追加では **使用する会社** を選択できます。既定会社は新規作成時の初期選択になります。
- **初期設定のメール送信用ドメイン**（`setting.mail-domain`）では、メール送信時の送信元アドレスのドメイン（@マーク以降）を設定します。ドメイン追加後、画面に表示される DNS の設定値を登録し **設定確認** します。**メール設定**の前に進めます。配信メニューの **送信ドメイン認証** と同じ操作で、初期設定の左メニュー・ハブカードからも開けます。
- **初期設定のドメイン**（`setting.domain`）では、ファネル・会員サイトなど **公開 URL 用** の独自ドメインを登録します（メールの送信元ドメインとは別です）。サブドメインを追加し、画面の **CNAME** を DNS に登録します。**追加した直後は自動で詳細画面**（`setting.domain.show`）へ進み、DNS 表・トップページ・ファビコンを続けて設定できます。詳細では **「DNS を確認」** ボタンで公開 DNS を照会し、問題なければ **利用可能（active）** に更新され、**続けてトップページを選んで保存する**旨のメッセージが表示されます。**接続状態が「利用可能」でも「トップに出すページ」が未設定のままでは、ゲスト向けファネルは表示されません**（一覧上部に警告が出ます。歯車アイコンの **設定** から公開中のファネルページを選びます）。**一覧の見た目**はファネル「ページ一覧」と同様（`card`・薄いヘッダ・操作は小さな **btn-group** とアイコン）に揃えています。ファビコンは **ファイル指定**（png / jpg / gif / webp / ico、512KB 以下）で保存します（初回のみ **`php artisan storage:link`** で `public/storage` → `storage/app/public` のシンボリックリンクが必要な場合があります）。ドメイン詳細で **ドメインのトップ（/）に表示するファネルページ** を選び、DNS が **利用可能** かつ **公開（`public`）** のページを選ぶと、`https://（そのサブドメイン）/` を開いたゲストにそのページが表示されます。トップに指定したページが未公開の場合は、詳細画面の警告内に出る **「このトップページを公開する」** で、そのページの公開ステータスを直接 `public` にできます。**ブラウザでサブドメインを開いたとき「ファイル一覧」のような画面だけが出る／別サイトが表示される**場合は、DNS または Web サーバの **Apache vhost / ServerAlias / SSL vhost のドキュメントルートがこの Monaka の Laravel `public` を向いていない**ことが多いです。HTTPS で使う場合は、DNS だけでなく **そのサブドメイン名の証明書** も必要です（アプリに届いていれば、トップ未設定時は「トップに表示するページが未設定です」、非公開ページ指定時は「このページは公開されていません」という案内が出ます）。詳細は `docs/funnel-spec.md` §9.1。

- メール・LINE配信の「送信用アカウント一覧」では、次を利用できます。
  - **トップバー**の **送信用アカウント | 送信ドメイン認証**（中項目。マウスを乗せると説明。**ⓘ** で画面全体の説明）
  - **送信用アカウント一覧 | アーカイブ済**（小項目。本文先頭のタブ。ツールチップ付き）
  - 初期設定の **メール設定**／**LINE設定** から開いた用途別一覧（`account.index?setup_channel=mail|line`）では、画面上部の見出しは **メール設定**／**LINE設定** とし、本文先頭に **送信用アカウント一覧**／**アーカイブ済** のタブを表示します。左サイドバーの **シナリオ**・**送信ドメイン認証** は出しません（通常の配信画面から開いたときのみ表示）。トップバーの **送信用アカウント／シナリオ／送信ドメイン認証** タブも省略します。
  - **左メニュー**のツリー、または URL `?archived=1` でも一覧／アーカイブを切替（解除は **各種設定** の **アーカイブ済みにする** チェックを外す）。チェック直下に「アーカイブすると、一覧から非表示になり一時的に利用できなくなります。（データは削除されず、後からいつでも元に戻せます）」の説明を表示する。
  - **LINE設定**（`account.edit?setup_channel=line`）では、各種設定画面で **STEP 1: Messaging API**（[LINE公式アカウント管理画面](https://manager.line.biz/) の設定 → Messaging API）→ **STEP 2: LINEログイン**（[LINE Developers コンソール](https://developers.line.biz/console/) で別チャネル作成）→ **STEP 3: 設定を確認**（Monaka から LINE API へ接続確認。保存前の入力値でも可。結果・**総合判定**・**最終確認日時**は DB に保存し再読み込み後も表示。総合 **OK** のとき一覧にアイコン・`@` ID・友だち数を表示）の順で進めます。**STEP 1** には **Messaging API メモ**（任意・最大2000文字）があり、複数の LINE 公式アカウントを運用するときに「どのアカウントか」を記録できます（送信用アカウント一覧の LINE 系行にも表示）。**STEP 1 / STEP 2 はそれぞれ「STEP ○ を保存」**で段階ごとに DB へ反映します（上部カードの **基本情報を保存** はアカウント名・アーカイブのみ）。シナリオワークスペースの **LINEアカウント設定** にも同種の詳細項目があります。
  - メール設定は一覧の **各種設定**。トップバーの **送信ドメイン認証** は DKIM・DMARC 用で SMTP とは別
  - **グループ管理**（グループ追加・名称変更・削除）※通常一覧のみ
  - **表示順変更**（一覧順を保存）※通常一覧のみ
  - 各アカウント行の **グループ選択**（未分類/既存グループ）
  - 各アカウント行の **各種設定**（メール送信・基本情報。LINE 種別では **STEP 1〜3** の LINE 連携フォーム）。メール種別では **外部SMTPの利用する／しない**を選び、**利用する**ときだけ SMTP ホスト等を入力（**利用しない**はサーバー既定の `MAIL_*`。詳細は `docs/funnel-spec.md`）。画面下部の **送信テスト** で自分宛に 1 通試せる。
  - **送信用アカウントを追加**では配信タイプに応じてメール項目の必須を切り替えます。**LINEのみ / メール+LINE** で作成した直後は、通常は **シナリオ一覧** に遷移し、次の作業（シナリオ追加・LINEアカウント設定）へ進みやすくします。**初期設定の「LINE設定」** から追加した場合は、同じ一覧（LINE 系に絞り込み）へ戻ります。
- 左メニューまたは**トップバーのタブ**の **送信ドメイン認証**（**SMTP や各種設定とは別**。ドメイン会社の DNS に載せるなりすまし対策。画面見出しは「DKIM・DMARC」相当の内容を本文で案内）では、次を利用できます。
  - 認証用ドメインの **追加 / 削除**
  - ドメインごとの **DNS設定値（タイプ・レコード名・値）** の確認。**流れは** ドメイン追加 → 表示されたレコードを DNS に転記 → 反映後にテスト送信で確認（追加後にシステムが **セレクター** を自動発行し、CNAME の値は `{セレクター}.{署名側ホスト名}` の形）。DMARC の値は **`MONAKA_DMARC_POLICY`**（`none` / `quarantine` / `reject`）と任意 **`MONAKA_DMARC_RUA`** に応じて画面が **`v=DMARC1; p=…`**（必要なら **`rua=mailto:…`**）を表示する（運用で `.env` と DNS を揃える）。署名側ホスト名は環境変数 `MONAKA_DKIM_SIGNING_HOSTNAME` で運用側と合わせる。**テスト送信**は **そのドメインの行を開いた内側**にあり、送信経路は **外部SMTP利用時はその SMTP、利用しないときはサーバー既定メール**（各種設定と同じルール）。一覧ではアカウント名が出るが、**送信元メールのドメインがその認証ドメインと一致するアカウントだけ**選べる。画面の説明は **お名前.com 等の DNS 画面へコピペする手順** をやさしい言葉で案内し、レコード名が **FQDN 全体かホスト部分のみか**は DNS 業者によって違う旨も脚注する
  - 「**設定確認**」を押すと、サーバー側で公開DNSを問い合わせて、各行の **状態（設定完了/未設定）** を表示します。DNSは反映に時間がかかるため、押した時刻が **最終確認** として画面に残ります（保存直後は **10分〜最大24時間**ほど待ってから再確認します）。
  - **テストメールが Gmail 等に届かないとき**: 画面上の成功は **送信サーバが受け付けたこと**まで。迷惑メール・プロモーション・遅延を確認する。**外部SMTPをオフ**のとき、サーバの **`MAIL_MAILER` が `log` / `array` だと実送信されない**構成があり得る（この場合は画面でエラーになるよう制御済み）。届かないままのときは **送信元の生メールのヘッダ**（受信側で「オリジナルを表示」等）で DKIM / SPF / DMARC を確認し、運用側では **`putage:opendkim-sync`** と MTA ログを確認する。MTA ログに `no signing table match` が出る場合は OpenDKIM 同期漏れ、Gmail の `not authorized to send email directly` が出る場合は SPF に載せたIPと実送信IP（IPv4/IPv6）がずれている可能性が高い。
  - **運用者（monaka・署名ゾーン）**: 顧客の CNAME 先 `{セレクター}.{署名ホスト}` に **DKIM 用 TXT** が必要。**推奨**: `tools.monaka-app.com` を Cloudflare に置き NS 委任し、`.env` で `MONAKA_CLOUDFLARE_*` を有効化すると **公開鍵 TXT を自動登録**（手順は `docs/monaka-dkim-cloudflare.md`）。**フォールバック**: `php artisan monaka:dkim-signing-zone-export` の出力を権威 DNS に手登録。レジストラが A 必須のときは `--with-a=送信元サーバのIP` 等で A 行も出せる。
- 送信用アカウントの種類が **メールのみ / メール・LINE併用** の場合は、**送信者名** と **送信元メールアドレス** の設定が必須です（一覧で未設定警告を表示）。
- 送信元メールアドレスは、UTAGE準拠で **独自ドメインメールアドレス** の利用を推奨します。
- メール・LINE配信の「シナリオ一覧」でも、同様に次を利用できます。
  - 上部機能ナビの **シナリオ作成** から、送信用アカウントを先に選ばずにシナリオを追加できます。この画面はファネル一覧と同じく通常見出しに **シナリオ作成** と表示し、その下に **シナリオ一覧｜アーカイブ済み** タブを置きます。**追加** は、初期設定の **メール設定** または **LINE設定** でアカウントを1件以上作成済みの場合だけ使えます。未作成の場合は追加ボタンを無効化し、メール設定/LINE設定の追加導線を表示します。追加時に **メール送信用アカウント** と **LINEアカウント** を選びます。どちらか一方だけでも作成できます。「紐づけない」を選んだチャネルは、シナリオ概要や左メニューにその管理項目を表示しません。
  - 独立シナリオ一覧でも **グループ管理** を使えます。**グループ管理** でグループを追加し、各シナリオ行のグループ選択で **未分類 / 登録済みグループ** を切り替えます。送信用アカウント配下のシナリオグループとは別枠です。
  - 既存の送信用アカウント配下のシナリオ一覧では、そのアカウントがメールまたはLINEに紐づいているシナリオも表示します。
  - **グループ管理**（シナリオグループ追加・名称変更・削除）
  - **表示順変更**（シナリオの並び順を保存）
  - 各シナリオ行の **グループ選択**（未分類/既存グループ）
  - 各シナリオ行の **メール設定済 / メール未設定**、**LINE設定済 / LINE未設定** バッジ。設定済みならアカウント名や送信元メール、LINE表示名も表示します。
  - **アーカイブ済みタブ**（`?archived=1`）でアーカイブ済みシナリオを表示
  - 一覧上部の **送信用アカウント／LINE（共通）** 帯と、各シナリオ行の **読者数（メール／LINE）**・**グループ** のみ（**読者一覧**・**ステップ配信** のショートカットボタンは置かない。各機能はシナリオ名クリック後の概要・左メニューから）。メール紐づけがある行は **メール** 人数（`@line.local` の仮メールは除く）、LINE 紐づけがある行は **LINE** 人数（`line_user_id` あり）を別表示。同一読者が両方持つ場合はそれぞれの件数に含まれる。
  - **シナリオ名をクリック**すると **`/account/{id}/scenario/{id}/workspace`**（シナリオ概要）へ進みます。シナリオ選択後の上部見出しと左サイドバーの選択中表示は **シナリオグループ名 / シナリオ名** になり、送信用アカウント名は前面に出しません。シナリオ内の移動は左サイドバーに集約し、本文上部に横タブは出しません。左サイドバーには **メール管理**（読者一覧・読者数推移・メール一斉送信・ステップ配信・予約中・送信済・メール配信エラー等）→ **LINE管理**（チャット・LINE一斉送信・友だち・自動応答・リッチメニュー等。**LINEチャット**は Webhook で保存された受信メッセージの閲覧。**LINEアカウント**は送信用アカウントのワークスペースへ遷移して連携設定）→ **シナリオ設定**（登録フォーム・読者項目・登録経路・登録解除・LINE登録ページ・独自置き換え文字・シナリオ設定等）の順で表示されます。概要ページも同じ3区分のカードです。概要本文のボタンは **シナリオ一覧へ戻る** のみ（読者一覧・ステップ配信はメール管理カード・左メニューから）。登録・解除フォーム設定は **独立行に出さず**、左の「登録・解除フォーム」からサブメニュー／タブで進みます。
  - **シナリオ概要**では **アーカイブに移す**（確認モーダルに上記と同じ説明文）で通常のシナリオ一覧から隠せます。アーカイブ済みのシナリオを開くと画面上部に **アーカイブを解除** が出ます。一覧の **アーカイブ済み** タブからも開けます。**シナリオ設定**の **アーカイブ済みにする** にも同じ説明文を表示する。
  - **シナリオ設定**（左メニュー「共通」内の「シナリオ設定」）では、区分ごとに **シナリオグループ**（**シナリオ作成**のグループ管理で追加したものも含む）・**管理用シナリオ名**・**メモ**・**アーカイブ**、**メール送信用アカウント**、**LINEアカウント**、および拡張として **メールアドレス登録時の同一個人の判定**（デフォルト／端末情報＋メール／メールのみ。いずれも現状は保存のみで、公開登録の重複可否は「登録・解除フォーム設定」と連動）、**デフォルト URL 置換ドメイン**（メールやステップ本文で短いリンク・計測用パスを出すときに使う**既定のホスト名**。例: `link.example.com`。将来、送信時の URL 書き換えや `%cancel%` などシステム置き換えのリンク生成と組み合わせる想定。**現状は保存のみ**）、**LINE 友だち追加後フォーム経由のメール情報の統合**、**登録当日の配信が配信時刻を過ぎている場合**（配信しない／翌日にずらして配信。保存のみ）、**メール既定**・**List-Unsubscribe**・**メール/チャット通知** を保存できます。画面上部に、**送信エンジン未接続で保存のみ**の項目がある旨を表示しています。**置き換え文字** の読者項目は **登録フォームに設置している項目（フォーム利用オン）だけ**を表示します。解除 URL 等のシステムタグも参照表として表示し、**独自置き換え文字** を登録済みならその一覧もリンク付きで表示します（詳細は `docs/funnel-spec.md` の `scenario-settings`）。
  - **独自置き換え文字**（左メニュー「独自置き換え文字」）では、**送信用アカウント共通**の定義として **管理名称**・**`%original-…%` 形式の ID**（手動は接尾辞のみ入力、オフ時は `original-` に続くキーを自動採番）・**全シナリオ共通の値** を追加・編集し、**このシナリオだけ**の **シナリオ固有の値**（利用しない／利用する＋上書きテキスト）を保存できます。**削除**するとその定義は**同じ送信用アカウントの全シナリオ**から消えます。システム予約語および、当アカウント配下のいずれかのシナリオの「登録フォーム・読者項目」と同じキーは使えません。テンプレへの**実展開は未接続**（`docs/funnel-spec.md` の `placeholders`）。
  - **ラベル設定**（左メニュー「ラベル設定」）では、このシナリオ向けに **ラベル名の一覧** を登録できます（表示順の上下・名前の変更・削除）。**LINE友だち**の絞り込み候補やモーダルのクイック追加では、ここで登録した名前が**先頭**に出ます。友だちに実際に付くラベルは従来どおり読者のラベル欄に保存され、一覧から名前を消しても**既に付いているラベル文字列は自動では消えません**（`docs/funnel-spec.md` の `label-settings`）。
  - **登録フォーム・読者項目** では、よく使う既定の読者項目一覧があり、**フォーム利用**・**必須**・表示順・名称・**入力形式**（日付・メール・リスト選択など、分かりやすい日本語ラベル）・初期値/選択肢（リスト形式のとき）を保存できます。**フォーム利用**をオンにした項目だけが登録フォームに設置され、ステップ配信やメール一斉送信の読者項目置き換え候補にも出ます。**他シナリオ連携**をオンにした項目は、**公開登録または読者手動追加で読者が新規作成されたとき**、同一送信用アカウント内の**他シナリオで同じメールアドレスの読者**に、同一キー・同一格納先で連携オンになっている項目があれば値が反映されます（空は送らない。詳細は `docs/funnel-spec.md`）。**項目追加**でカスタム項目を追加でき、カスタムのみ削除可能です。**キーを自分で設定する**は任意（既定オフ）。キーは外部ツール連携などで指定しやすくするためのもので、オフならシステムが自動付与します。
  - **登録経路**（左メニュー「登録経路」、メール/LINE 両方があるシナリオは **共通** に1つ）では、画面上部の **「メールの登録経路」** と **「LINEの登録経路」** タブで分けて管理します。各タブに **管理名称** の入力と **追加** があり、一覧から **入口 URL**（メールは `/r/{uid}/register?rt=…`、LINE は `/line/open/{uid}?rt=…`）をコピーして LP や SNS に貼ります。一覧の **ファネルでの使用** 列に、ファネルページの **登録フォームブロック**でその経路を選んでいる場合は **ファネル名・ページ名** が表示されます。**削除**するとき、使用中なら確認に使用箇所が出ます。削除を確定すると、該当ページの登録フォームは **経路なし** になります（既に登録済みの読者の経路ラベルは変わりません）。LINE タブには **ページ表示・友だち紐づけ・読者数** の列もあります。**メール**経路はその URL から登録した読者に判別用の `registration_route` が付きます。**LINE**は **`/line/open/…?rt=…` を開いた記録**と、その後の **友だち追加（Webhook）** などで反映されます。同一送信用アカウントに**未処理の LINE 流入が同時に複数**あると自動では付かないことがあります（詳細は `docs/funnel-spec.md` の `registration-routes`）。
  - **登録・解除フォーム** では、UTAGE に近く **登録フォーム / 解除フォーム / 登録・解除フォーム設定 / フォームタグ** の選択メニューから進めます。**解除フォーム** は公開URL `https://{ドメイン}/r/{シナリオuid}/unsubscribe`（メール入力で配信停止＝読者の `inactive`）。API は `POST https://{ドメイン}/api/r/{シナリオuid}/unsubscribe` に JSON `{"email":"..."}`。
  - **フォームタグ** では、外部サイトに貼る用の HTML を **読み取り専用テキストエリア** に表示し、**HTML をコピー** でクリップボードへ入れられます。断片の先頭に **Monaka 公式の既定 CSS**（`public/css/scenario-register-embed.css`）を **`<style>` でインライン** したものが入るため、設置先が別ドメインでも見栄えが付きます。**フォームタグ用スタイル**で追加のスタイルシート URL や追加 CSS を保存すると、コピー用 HTML に `<link>` / `<style>` がさらに追記されます。内容は **UTAGE のフォームタグに近い形**（`POST https://{ドメイン}/r/{シナリオuid}/store` 等）で、項目の `name` は「登録フォーム・読者項目」の**キー**です。**登録経路**を使うときは、コピーしたフォーム内に **`<input type="hidden" name="rt" value="（登録経路画面のトークン）">`** を自分で足してください。さらに寄せたい場合は設置先で **Bootstrap 4** の CDN を足しても構いません。末尾コメントの **iframe** は公開登録ページをそのまま埋め込む別案です。フォーム利用の項目が無い、またはメール列がオフのときは警告のみです。
  - **LINE登録ページ** … 公開URL `https://{ドメイン}/line/open/{シナリオuid}`（UTAGE の `/line/open/...` に相当）。**登録経路付き**（`?rt=`）のときは QR が **このページ自身**を指し、先にページを開いてから友だち追加する導線になります。左メニュー「LINE登録ページ」→ **LINE登録ページ設定** で、重複登録の可否（保存のみ・現状フロー未使用）と head/body 用 JavaScript を編集できます。QR は QuickChart で生成します。送信用アカウントに **ベーシックID**（Messaging API 連携で取得）が無い場合は案内文のみ表示されます。
  - **登録・解除フォーム設定** では、公開用シナリオ名・重複登録の可否・確認画面の有無・フォーム前後のHTML・タグ用JavaScript・公開/下書き・サンクス／重複時のURL・HTML などを保存できます。登録完了後は設定したURLへ飛ばすか、標準の完了ページ（`/r/{uid}/register/thanks`）を表示します。
  - **公開登録** … 画面に表示する URL `https://{あなたのドメイン}/r/{シナリオuid}/register`（例は [UTAGE の登録ページ](https://utage-system.com/r/zj9XgD3Ir8iE/register)）。API は `POST https://{ドメイン}/api/r/{シナリオuid}/register` に JSON（キーは各項目の「キー」）で送れます。メール項目が「フォーム利用」でオンになっている必要があります。入力形式 **radio** / **checkbox** は選択肢（1行1件）必須。checkbox は JSON で **配列**（例: `"hobby": ["A","B"]`）で送ります。メールは既定で **形式（RFC）に加え、ドメインに MX または A があるか（DNS）** をサーバ側で検証します（`.env` の **`PUTAGE_REGISTRATION_EMAIL_DNS_VALIDATION`** で `false` にすると DNS 参照なし）。**受信箱が実在するかまでは判定しません**。ゲスト向けの登録ページ本文には DNS の技術説明は出しません。読者一覧の **「有効」**も同様に、配信対象フラグでありメール実在の証明ではありません（詳細は `docs/funnel-spec.md`）。
  - **読者数推移**（左メニュー **メール管理**）では、期間を指定して（フォームの開始・終了・**表示**。省略時は直近30日）日別の **新規登録数・解除数・当日増減（新規−解除）・日末の有効読者数・総読者数** を表示します。解除数は配信停止にした日時（内部では `inactive_at`）を暦日に振り分けた件数です（詳細は `docs/funnel-spec.md` の `reader-trends`）。
- 「読者一覧」では **検索（名前/メール/電話/LINE userId）**・**登録経路の絞り込み（登録フォーム / LINE / 手動追加 / その他）**・**ステータス絞り込み**・**読者の手動追加（モーダル）**・**一覧の複数選択による一括ステータス（有効/停止）**・**削除** ができます。シナリオは URL の送信用アカウントと一致しないと **404** になります（他アカウントのシナリオ ID を指定しても参照できません）。
- 「ステップ配信」は **メールステップのみ**（タイプの切り替え UI はなし）。一覧は **ステップを登録した順ではなく、送信タイミングの時間軸順**（登録直後 → 登録から〇時間〇分後 → 〇日後＋時刻）で表示します。**ステップを追加**は **`/step/create` の専用ページ**で **配信条件・送信者・件名・本文（HTML/テキスト）・プレビュー一行・送信タイミングの種類・既存読者ポリシー・送信後アクション**などを入力できます（保存後は **ステップ編集**へ進み、URL 置換・テスト送信 UI など続きを設定）。各ステップの **編集** / **詳細設定を開く** でも同様に変更できます。**ステップ編集**画面上部の **削除** で当該ステップを削除できます（一覧へ戻ります）。**配信条件**では必須ラベル・除外ラベルを設定でき、送信予定時刻になった読者に対して条件を満たすかを判定します。**送信後アクション**では、メール送信成功後にラベル付与/除外、現在シナリオの停止、別シナリオへの登録を実行できます。**実際の自動送信**は、`.env` で **`PUTAGE_STEP_MAIL_DISPATCH_ENABLED=true`** にしたうえで、サーバの **cron** に `* * * * * php /path/to/artisan schedule:run` のように **Laravel スケジューラ**を登録すると、**毎分** `putage:step-mail-dispatch` がバッチ送信します（手動なら `php artisan putage:step-mail-dispatch --force`）。未来日時の次回ステップは左メニュー **予約中** に表示され、送信成功後は **送信済** に移ります。読者の配信停止、ステップ停止、ラベル条件の変化などで送信前に対象外になることがあります。送信処理中に SMTP 接続・認証・送信拒否などを検知した場合は、左メニュー **メール配信エラー** にメールアドレス・検知元・エラー内容・検知日時を表示します。受信サーバーから後で返るバウンスメールの自動取り込みは、受信用メールボックスや Webhook 連携が必要な別機能です。**対象者プレビュー**・**画面のテスト送信**は未接続または制限あり（詳細は `docs/funnel-spec.md` のステップ関連）。
- **リマインダ配信**（左メニュー **メール管理**）では、シナリオに連携済みのイベントを対象に、イベント開始日時から「開始前/開始後」「日数・時間・分」「日数指定時の固定時刻」を指定してメールリマインドを作れます。必須ラベル・除外ラベル、キャンセル済み除外、件名、本文を保存できます。本文と件名では `{{name}}` / `{{event_name}}` / `{{event_date}}` / `{{event_time}}` / `{{zoom_url}}` を使えます。対象読者はイベント予約済みで、同じシナリオの読者として有効、かつ条件に一致する人です。未来の配信予定は **予約中**、送信成功後は **送信済** に表示されます。LINEリマインダ、LINE未登録診断、Googleカレンダー/Zoom API の自動連携は後続拡張です。
- **メール一斉送信**（左メニュー **メール管理**、またはシナリオ概要のメール管理から）では、**有効かつメールアドレスがある読者**へ、件名・本文（HTML またはテキスト）を一括送信します。送信元は **シナリオ設定のメール既定**があればそれを、なければ **シナリオに紐づけたメール送信用アカウント** の送信者名・送信元メールを使います（ステップの「空欄時の既定」と同じ考え方）。作成画面の **配信日時** を空欄にすると今すぐキューに入り、日時を指定するとその時刻以降に送信されます。**送信処理はキュー**（`jobs` テーブル）に載るため、サーバで **`php artisan queue:work`**（または同等の常駐ワーカー）が動いていないと完了しません。読者ごとの処理は送信直前に **予約中**、SMTP 送信成功後に **送信済** として記録されます。送信済は「メールサーバーへの送信処理が成功した」意味で、受信箱への到達保証ではありません。SMTP が空でプラットフォーム既定メールも使えない場合は失敗として記録されます。チャンク件数は任意で **`.env` の `PUTAGE_SCENARIO_BROADCAST_CHUNK_SIZE`**（既定 25、詳細は `docs/funnel-spec.md`）。
- **LINEチャット**（シナリオワークスペースの **LINEチャット**）では、左に **Webhook で受信した LINE userId** を最終トーク順に並べ、**Messaging API で友だちプロフィール（名前・アイコン）**を取り込みます（チャネルアクセストークンが無い／取得失敗時は名前・アイコンが省略されることがあります）。右には **Webhook のフォロー・受信メッセージ**、**この画面から送ったテキスト**（Messaging API push・送信ログに保存）、**「外部送信を記録」で手入力した文面**（公式や別ツールで送った内容のメモ。実際の LINE 送信はしません）を時系列で並べます。**LINE公式の画面だけで送った応答**は自動では取り込めないため、必要なら外部記録で残してください（GET `q` で検索、GET `u` で選択中の友だち）。**未読・ピン**は未接続です。
- **LINE通知設定**（LINE管理の **LINE通知設定**）では、3つの通知カテゴリ（LINEメッセージ通知、LINE上限アラート通知、LINEアカウントBAN通知）ごとに通知先を選んで保存できます。選択肢は「通知しない」「Chatwork」「Slack」「Discord」です。**LINEアカウントBAN通知**は、公式アカウントの停止（Suspend）を Monaka が検知したときに **自動送信** します（最大約5分ごとの API 確認・送信 API エラー・モジュール Webhook の `botSuspended`）。詳細は `docs/line-account-ban-detection.md`。メッセージ通知・上限アラートは保存とテスト送信のみ（自動送信は後続）。各ブロックの **テスト** ボタンで疎通確認できます。
- **LINE自動応答**（LINE管理の **LINE自動応答**）では、`管理名称`、`応答タイプ`（キーワード応答 / 一律応答）、`一致`（部分一致 / 完全一致）、`キーワード`（複数行）、`動作`（メッセージ送信 / アクション実行 / テンプレート送信）を登録・編集できます。LINEからテキストが届いたとき、キーワード応答を先に判定し、該当なしなら一律応答を1件実行します。
  - **メッセージ送信**: 設定した本文を返信
  - **アクション実行**: 付与ラベル（複数行）と配信ステータス変更（配信対象 / 配信除外）を実行
  - **テンプレート送信**: 現在は暫定でテンプレ本文をテキスト返信（専用テンプレート連携は後続）
- **LINE友だち**（シナリオワークスペースの **LINE友だち**）では、`LINE登録名` と `ラベル` で絞り込み、友だち一覧（**LINE登録名 / ステータス / ラベル / 登録経路 / 登録日**）を表示できます。ステータスは Webhook の最新状態（フォロー中 / ブロック中）と読者ステータス（配信対象 / 配信除外）を合成して表示します。各行の `...` メニューから **チャットを開く**、**ラベルを編集**（登録ラベルのクリックで付与・チップの × で削除）、**ラベルを追加**（既存付与に登録ラベルを追記）、**配信対象/除外の切替** ができます。モーダル内では「一覧を編集」と「追加のみ」を切り替え可能です。ラベルの付与は **ラベル設定に登録した名前からのみ**（自由入力なし）。過去に付いていた未登録名はチップで警告表示され、保存時に外れます。フィルタ欄の「よく使うラベル」は登録名を先頭にしたうえで読者ラベルの頻度をマージした候補です。ラベル色は同じ文字列なら同じ色になるよう固定化しています。**Webhook のみで読者にまだいない友だち**でも、ラベル編集や配信切替をすると **読者が自動作成**されます（メールは内部用のダミー）。CSV出力ボタンは準備中です。
- LINE 連携のある送信用アカウントでは、ワークスペース **LINEアカウント設定** で UTAGE に近い構成（**連携中のLINE公式アカウント**／**Messaging API設定**／**シナリオ設定**／**経路分析設定**／**LINEログイン チャネル設定**）のフォームを表示します。Messaging API の **Channel ID / Channel secret** の案内文言は **LINE公式アカウント管理画面**（設定 → Messaging API）の表記に合わせています。**Webhook URL**（`/api/webhook/line/{アカウントuid}`）は読み取り専用で表示し、**保存**時に Messaging API 経由で LINE 側の Webhook エンドポイントへ自動登録します（成功日時・直近エラー・Messaging API の `GET /v2/bot/info` に基づく表示名・ベーシックID（@形式）・プロフィール画像は画面上部の連携バナーに反映。`.env` の `APP_URL` は **https** 必須）。公式アカウント管理画面の **設定 → 応答設定** で Webhook を「利用する」にする操作は引き続きユーザー側で行います（画面内のステップ7案内）。サーバでは **Channel secret** を用いた `X-Line-Signature` 検証を行い、検証に失敗したリクエストは **400**、該当アカウントがない場合は **404** を返します（未設定時は **400**）。**チャネルアクセストークン（長期）** は任意入力のほか、長期トークン未入力時は同期処理で得た短期トークンを保存する場合があります（LINEチャットの push 送信でも利用）。検証成功後、`events` に含まれる各イベントは **`line_webhook_events` テーブル**に保存されます（種別・送信元ID・生ペイロード。LINEチャット等の土台用）。
- UTAGE 公式の連携手順・注意点（同一LINEを複数配信アカウントに載せない、Messaging と LINEログインの別チャネル、応答設定の Webhook オン等）の要約は **`docs/delivery-line-utage-roadmap.md`** に記載しています。一次情報は [LINE公式アカウント連携方法（UTAGE）](https://help.utage-system.com/archives/1820) を参照してください。
- **LINE公式アカウントの追加（連携）** は、送信用アカウントを選んだあとのワークスペース **LINEアカウント設定** 画面の冒頭チェックリストと各ブロック（`#line-panel-messaging` 等）で案内します。送信用アカウントの新規「作成」画面とは役割が別です。

---

## 4.2 決済連携と商品プラン

- 初期設定ハブ（`/setup`）の **商品登録** から、販売商品とプランを登録できます（推奨順: **決済連携** → **商品登録**）。商品追加後は **プラン管理** 画面で **プランを追加** を押すと、項目の多い設定は **専用ページ**（モーダルではなく全画面フォーム）で行います。価格・決済方法・決済連携・**購入後に開放するコース**（サイトごとに **コース（単体）** と **コースの結合** を選択）・**購入後に登録するシナリオ**（任意）を設定します。既存プランの **編集** も同様の専用ページです（決済タイプ・決済方法は作成後は変更できません）。テレコム単発の入金確定後に会員サイトの付与とシナリオ読者登録が実行されます（初回ログイン用パスワードの自動メールは未実装）。公開プランの **購入URL** でテストできます。
- 初期設定の **決済連携** で、テレコム、UnivaPay（新システム）、UnivaPay（旧システム）を追加できます。決済代行ごとに入力項目が異なります（UTAGE の連携設定に合わせた項目名です）。
  - **テレコム**: **クライアントIP**（契約時に発行）を Monaka に保存します。保存後、同じ画面の **テレコムクレジットで設定する項目** に、代行側へ転記する **送信元IP**・**決済データ送信先URL**・**退会データ送信先URL** が表示されます（コピーボタン付き）。送信元IPはサーバ管理者が `.env` の **`MONAKA_SENDING_IP`**（または **`PUTAGE_SENDING_IP`**）に設定した値です。未設定のときは「未設定」と表示されます。
  - **UnivaPay（新システム）**: **店舗ID**、**本番モード**のアプリトークン・シークレット、**テストモード**のアプリトークン・シークレット（両方必須）。
  - **UnivaPay（旧システム）**: **店舗ID** のみ。テスト／本番の切替は UnivaPay 管理画面で行います。
- アプリトークン・シークレットは保存後に再表示しません。編集時に空欄のまま保存すると、登録済みの値を維持します。
- 商品の **プランを追加 / 編集** では、クレジットカード決済に使う **決済連携** を選択できます。銀行振込や無料プランでは使用しません。
- **テレコムの単発決済（クレジット・公開中プラン）**: 商品詳細のプラン一覧に **購入URL** が出ます。購入者は氏名・メールを入力し、テレコムの決済画面へ進みます。決済完了後、テレコムから Monaka の通知URLへ結果が送られ、注文が **支払済** になります。完了後はサンクスページへ戻ります。
- **まだ Monaka 側で自動化していないもの**: 継続課金・分割払い、UnivaPay／Stripe、銀行振込の入金確認、決済完了後の会員サイト開放・シナリオ登録・ラベル付与・領収書・管理者メール通知（プランに設定があってもログ記録のみ）。

---

## 5. プレビュー

- 編集画面上部の **プレビュー** で、公開に近い表示を確認できます。
- ページが **ゲスト向けに公開されている** とき（公開、または公開日時指定で開始日時を過ぎており、表示期限前）は、**プレビュー** の隣に **公開ページ** が表示されます。こちらは **`/p/…` の実際の公開 URL** を新しいタブで開きます（一覧の公開ページアイコンと同じ内容）。**保存していない編集は公開ページには出ません**（先に **保存** してください）。
- プレビューを押すと、編集内容を先に保存してから別タブで開きます。
- プレビューURLには都度タイムスタンプを付与し、さらにレスポンスを no-cache で返すため、古いキャッシュを表示しにくい仕様です。
- プレビュー上部バーに **最終保存時刻** を表示し、最新データで開けているかを判別できます。
- 取り込みページのセクション背景画像不透明度は、`1` を 100% として扱います（意図せず薄くなる不具合を修正済み）。
- セクションの **背景（グラデーション含む）**・**余白** はプレビューでも反映されます。
- 動画・音声・PDF は URL が正しい場合に表示されます（形式・ドメインによりブラウザで再生できないこともあります）。
- PDF はブロック内 `iframe` で埋め込み表示します（表示不可時は「別タブで開く」リンクを利用）。

---

## 6. 操作後のメッセージ

- ページ削除など成功時の緑の通知は、**画面先頭に1つ**だけ表示されます（二重表示しない仕様です）。

---

## 7. 困ったとき

- 取り込めない・真っ白に見える
  - URLが公開されているか、Bot対策でブロックされていないか確認してください。
  - UTAGE の白文字は、背景が無いと見えません。セクション背景が取り込まれているかプレビューで確認してください。
- 仕様の詳細・開発者向けの受け入れチェックリストは **`docs/funnel-spec.md`** を参照してください。
  変更を入れた翌日以降の確認では、同ファイルのチェックリストを**退行（デグレ）防止**のために通すと安全です。

---

## 8. 開発者向け：Git / SSH について

**このサーバ上のターミナル（含む Cursor 統合ターミナル）では SSH クライアントは利用できます。** GitHub との同期は HTTPS だけに限定されません。

- **`git pull` / `git push` で HTTPS（`https://github.com/...`）を使う**と、環境によっては対話でのユーザー名・トークン入力ができずエラーになることがあります。
- **回避策**: `origin` を SSH URL に切り替えます（例）。

  ```bash
  git remote set-url origin git@github.com:NaoyaOshima708/putage.git
  ```

  接続確認: `ssh -T git@github.com`（鍵が GitHub に登録されていること）。

- 初回 clone から SSH を使う場合は、リポジトリの **Code → SSH** に表示される URL を使ってください。

- **HTTPS で詰まったとき**は、`origin` の URL だけでなく **`main` が実際に引く URL**（`git config --get branch.main.remote`）まで含めて確認してください。切り分け手順は **8.2** を参照。

### 8.1 何度も話題になるポイントの整理（履歴メモ）

同じ説明が繰り返しになる原因は、**接続の「向き」が別物だから**です。

| 向き | 例 | 意味 |
|------|-----|------|
| **手元 PC → このサーバ** | Cursor の「SSH: root@…」 | ファイルが見える・ターミナルが使える状態になる |
| **このサーバ → GitHub** | `git pull` / `git push` | **別途** GitHub 用の認証（HTTPS トークン、SSH 鍵、エージェント転送など）が要る |

前者が通っていても、後者用の鍵やトークンがサーバ上に無ければ **`ssh -T git@github.com` は失敗**します。これは矛盾ではありません。

### 8.2 このリポジトリで `git pull` が通る／通らない差

`git remote -v` の **`origin` だけ**を見て判断すると齟齬が出ます。`main` の追跡設定は **`git config branch.main.remote`**（および `branch.main.merge`）も併せて確認してください。

- **`origin` が認証なしの `https://github.com/...` だけ**の場合、`git pull origin main` 等が **ユーザー名・トークン入力を求めて失敗**することがあります（非対話環境では特に）。
- 一方、**`branch.main.remote` に認証付き HTTPS（例: `https://x-access-token:<トークン>@github.com/...`）が設定されている**構成では、**単に `git pull` とだけ打つと**そちら経由で取得でき、`Already up to date.` などで成功することがあります。

トラブル時は次を実行して状況を揃えます。

```bash
git remote -v
git config --get branch.main.remote
git config --get branch.main.merge
```

### 8.3 自動チャット／エージェントのターミナルとの差

Cursor の AI 用シェルでは **`SSH_AUTH_SOCK`（ssh-agent 転送）が付いていない**ことがあります。手元の統合ターミナルでは `git pull` が成功しても、**別プロセスのエージェントでは同じ結果にならない**ことがあります。判断は「そのシェルで `git pull` を実行した結果」で行ってください。

### 8.4 サーバ反映前の差分チェック（デグレ防止）

サーバへ反映（push / pull / デプロイ）する前に、必ず次を確認します。

```bash
git status
git diff
git diff --staged
```

- 修正対象ファイルが想定どおりか
- 余計な変更（デバッグコード、不要ファイル、別機能の差分）が混ざっていないか
- 反映対象の差分がレビュー可能な状態か

### 8.5 開発・反映の必須フロー

開発作業は、必ず次の順で進めます（省略不可）。

1. **修正する**
2. **修正前バージョンと比較して、修正箇所をチェックする**（`git status` / `git diff` / `git diff --staged`）
3. **アップロードする**（push / pull / デプロイ）
4. **確認する**（問題があれば再度修正に戻る）
5. **報告する**

### 8.6 セキュリティ（必読）

- **`git config` に personal access token を直書き**すると、流出時にリポジトリまで触られうるため、**失効・ローテーション**と **credential helper / 環境変数 / SSH 鍵**等への移行を推奨します。
- **`.git/config` はリポジトリにコミットされません**が、スクリーンショット・ログ・チャットに**トークンを貼らない**でください。漏れた場合は **GitHub 側で即トークンを revoke** してください。
