emo ballet — 廿日市市

📧 メールマガジン配信システム

管理者向け 機能・利用フロー ガイド
📗 Google スプレッドシート連携 🔐 パスキー認証 📧 Amazon SES emoballet.com 運用
📋 目次
1 システム概要 2 システム構成 3 ログイン認証 4 ユーザーとロール 5 初回セットアップ 6 スプレッドシートの構成 7 テンプレート管理 8 メール送信フロー 9 送信ログ管理 10 セキュリティ 11 データベース設計 12 技術スタック
1

システム概要

📗
顧客データ
Google スプレッドシートで管理。サーバーには保存しない。
✉️
個別配信
氏名・クラス・個別メッセージなどを差し込んだパーソナルメールを一括送信。
👩‍🏫
講師別管理
講師ごとにスプレッドシートとテンプレートを分離管理。

emo ballet の管理者・講師が、Google スプレッドシートで管理する生徒情報をもとに、個別メッセージを差し込んだメールマガジンを安全・簡単に配信するための Web システムです。スプレッドシートはGoogleアカウントで管理者・講師自身が編集し、送信後はステータスがシートに自動で書き戻されます。

2

システム構成

管理者・講師(ブラウザ)
👩‍💼
管理者 / 講師
ブラウザで操作
📗
Google スプレッドシート
顧客データ・属性・ステータス
↕ パスキー認証(システムログイン)+ Google OAuth2(シート認可)
emoballet.com サーバー
🖥️
PHP アプリ
管理画面・送信制御
🗄️
MySQL
テンプレ・ログ・ユーザー
(顧客データなし)
↓ Sheets API(読み取り・ステータス書き戻し)  ↓ メール送信
外部サービス
📗
Google Sheets API v4
読み取り・書き戻し
/
🔑
Google OAuth2
講師ごとの認可
/
📧
Amazon SES
メール配信
3

ログイン認証

🔐 第1層:パスキー(システムログイン)
  • 📱 iPhone の Face ID / Touch ID
  • 🤖 Android の指紋・顔認証
  • 💻 Mac の Touch ID、Windows Hello
  • ✅ パスワード不要・フィッシング耐性あり
  • ✅ 管理画面へのアクセス制御
📗 第2層:Google OAuth2(シート連携)
  • 🔗 初回のみ「Googleでサインイン」で認可
  • ✅ 自分のGoogleアカウントのシートのみ操作可
  • ✅ シートの読み取り・ステータス書き込みを許可
  • ✅ 他の講師のシートへのアクセスは不可
  • ✅ 2回目以降は自動でトークン更新

📱 ログイン対応デバイス

📱 iPhone(Safari) 🤖 Android(Chrome) 💻 Mac(Safari / Chrome) 🖥️ Windows(Chrome / Edge)
4

ユーザーとロール

👑 管理者(Admin)
  • ✅ 全講師のテンプレート・ログを閲覧
  • ✅ 講師アカウントの招待・削除
  • ✅ 全体の送信ログ・統計を確認
  • ✅ 自分のシート管理・テンプレート作成・送信
  • ✅ Googleアカウント連携の管理
  • ✅ システム全体の設定
🎓 講師(Instructor)
  • ✅ 自分のスプレッドシートを登録・管理
  • ✅ 自分のテンプレートを作成・編集
  • ✅ 担当生徒へのメール送信
  • ✅ 自分の送信ログを確認
  • ❌ 他の講師のシートは見えない
  • ❌ 他の講師のテンプレートは見えない
5

初回セットアップ(講師ごと)

🗓️ 講師の登録フロー

① 管理者が講師メールを登録
② 招待メール受信
③ パスキー登録(生体認証)
④ Googleアカウント連携
⑤ スプレッドシートURL登録
⑥ 利用開始
📗 ④⑤は初回のみ。以降はパスキーでログインするだけで全機能が使えます。

📗 スプレッドシートの登録

  • 担当クラスごとに別のスプレッドシートを登録可能(例:初級・中級・上級)
  • 登録はスプレッドシートのURLを貼り付けるだけ
  • シートを追加・変更しても同様の操作で対応完了
  • システムがOAuth2トークンでシートへアクセスするため、共有設定の変更は不要
6

スプレッドシートの構成

📗 列構成とルール

1行目のヘッダー名がそのままメールの差し込みタグになります。列は管理者・講師が自由に追加できます。「送信ステータス」「送信日時」列は送信後にシステムが自動で書き戻します。

📗 emoballet_初級クラス_2026
🔗 システム連携済み
氏名 メールアドレス クラス 個別メッセージ 保護者名 入会年 + 自由に列追加可 送信ステータス
自動書き戻し
送信日時
自動書き戻し
山田 花子 hanako@example.com 初級 先月の発表会、素晴らしかったです! 山田 幸子 2023 ✅ 送信済 2026/04/15 10:23
鈴木 さくら sakura@example.com 初級 ポワントの上達が目覚ましいです! 鈴木 明子 2022 — 未送信
佐藤 れな rena@example.com 初級 次の発表会が楽しみですね。 佐藤 洋子 2024 — 未送信
🔄 送信完了後、PHPがGoogle Sheets APIを通じて該当行のステータスと日時を自動で書き戻します。ダウンロード作業は不要で、シートを開けばいつでも最新状態を確認できます。

⚙️ 列追加のルール

  • メールアドレス列は必須(列名は「メールアドレス」で固定推奨)
  • 列名は日本語・英語どちらでも可
  • 列を追加すると、次の送信時にタグとして自動で使用可能になる
  • 列を削除した場合、そのタグが含まれるテンプレートは空白で差し込まれる(エラーにはならない)
  • 列の順番は自由(ヘッダー名で照合するため)
7

テンプレート管理

✏️ テンプレートの作成・編集

管理画面のブラウザ上でテンプレートを作成します。スプレッドシートのヘッダー列名を {{列名}} 形式で本文に差し込めます。

件名:emo ballet 4月のクラスのご案内

{{氏名}}

いつもemo balletをご利用いただきありがとうございます。

{{個別メッセージ}}

4月の {{クラス}} についてご案内します。
保護者の {{保護者名}} 様にもご確認ください。
使えるタグはシートのヘッダーから自動検出・表示。クリックで本文に挿入できます:
{{氏名}} {{クラス}} {{個別メッセージ}} {{保護者名}} {{入会年}} + 追加した列は自動で表示

📋 テンプレート一覧と履歴

テンプレート名件名作成日最終使用使用回数
春のお知らせ4月のクラスについて2026/03/102026/04/153回
発表会案内発表会のご案内2026/02/012026/02/201回
月謝のご案内今月の月謝について2026/01/052026/04/014回
テンプレートは講師ごとに分離されています。他の講師のテンプレートは表示・使用できません。
8

メール送信フロー

📗
Step 1
スプレッドシートを選択
登録済みのシート一覧から送信に使うシートを選びます。ファイルのアップロードは不要です。
🔄
Step 2
シートデータを読み込み
Google Sheets APIを通じてヘッダー行と顧客データを取得します。列名を自動検出し、使える差し込みタグを一覧表示します。
📝
Step 3
テンプレートを選択
自分のテンプレート一覧から使用するものを選びます。この画面から新規作成も可能です。
👁️
Step 4
プレビュー確認
1件目の差し込みサンプルを実際の内容で表示します。件名・本文・送信件数を確認してから進みます。
✅ 誤送信防止のため、必ずプレビューで内容を確認してください。
🚀
Step 5
送信実行
「送信開始」ボタンを押すと、Amazon SESを通じて1件ずつ個別メールを送信します。進行状況がリアルタイムで表示されます。
✍️
Step 6
シートにステータスを自動書き戻し
送信完了した行に「✅ 送信済」と送信日時をSheets APIで直接書き込みます。ダウンロード作業は不要です。
🔄 Googleスプレッドシートを開けば、いつでも最新の送信ステータスを確認できます。
📋
Step 7
送信ログに自動記録
送信日時・テンプレート名・送信件数・担当講師をサーバーのMySQLに自動記録します。氏名・メールアドレスは保存しません。
9

送信ログ管理

📈 ログ画面で確認できること

送信日時講師テンプレート名件名件数メモ
2026/04/15 10:23田中講師春のお知らせ4月のクラスについて22件初級クラス
2026/04/15 11:05山本講師春のお知らせ4月のクラスについて26件中・上級
2026/03/01 09:30田中講師発表会案内発表会のご案内22件
  • 管理者は全講師のログを閲覧できます。講師は自分のログのみ閲覧可能です。
  • ログはCSV形式でエクスポートできます。
  • 氏名・メールアドレスなどの個人情報はログに含まれません。
10

セキュリティ

🔑
パスキー認証
生体認証・フィッシング耐性・パスワードレス
📗
Google OAuth2
自分のシートのみアクセス可。他講師のシートには触れない
🔒
HTTPS通信
全通信を暗号化
🗑️
データ非保存
顧客データはサーバーに一切残らない
👤
ロール分離
講師は自分のデータのみ。相互参照不可
⏱️
自動ログアウト
30分操作なしで自動セッション終了
11

データベース設計(MySQL)

サーバーに保存するのはテンプレート・ログ・ユーザー情報のみです。顧客データは一切保存しません。

📋 users
id
name
email
role(admin / instructor)
google_token(暗号化保存)
created_at
🔑 passkeys
id
user_id
credential_id
public_key
last_used_at
📗 user_sheets
id
user_id
sheet_name(表示名)
spreadsheet_id(Google ID)
sheet_tab(シート名)
created_at
✏️ templates
id
user_id
name
subject
body
created_at
updated_at
📈 send_logs
id
user_id
template_id
sheet_id(user_sheetsのid)
sent_count
sent_at
memo
12

技術スタック

🖥️
PHPバックエンド・管理画面
🗄️
MySQLテンプレート・ログ・ユーザー管理
📧
Amazon SESメール配信インフラ
📗
Google Sheets API v4シート読み書き
🔑
Google OAuth2シートへのアクセス認可
🔐
WebAuthn / Passkeys生体認証ログイン
🌐
emoballet.com既存サーバーで運用
⚙️ Google Cloud Console でプロジェクトを作成し、Sheets API と OAuth2 を有効化する初期設定作業が1回必要です。