トーク / 未読管理
トーク / 未読管理
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
トークルームでの新規投稿・スレッドへの追記・自分へのメンションを 「未読」 として可視化し、既読化のタイミングと連動して画面上のバッジを点灯・消灯する機能。
未読は次の 3 軸で独立して管理される:
- ホーム未読: ルーム単位の未読(チャンネル / DM 共通)
- スレッド未読: スレッド(特定トークの返信群)単位の未読
- メンション未読: 自分宛のメンション投稿単位の未読
講座詳細画面では、3 軸のいずれかに未読があれば該当講座の「トークタブ」に未読バッジが点く。講座一覧では未読バッジは出ない(講座一覧側へ未読をロールアップする仕組みは現状存在しない。CS 問い合わせで「他の講座の未読が一覧で見えない」となるケースの根拠)。
判定はサーバー側に保存された 「ルームの最新投稿 ID」 と ユーザーごとの「最終既読投稿 ID」 の比較で行う。最終既読は受講者・講師のどちらも、原則として 画面でルーム / スレッドを開いたタイミング で更新される。DM の最新投稿がメイン / サブ講師宛の DM 配信投稿 だった場合、講師側ではそれを既読扱い相当に維持する例外がある(受講者一斉配信の DM が講師の未読バッジを大量に点灯させないため)。
利用シナリオ
シナリオ 1: 新規投稿で未読バッジが点く
メイン講師がチャンネルへ投稿 → 数秒後、購読中の受講者がアプリを開くとそのチャンネル名にバッジが点く。受講者がチャンネルを開いた時点で既読扱いとなり、バッジが消える。
シナリオ 2: スレッドの未読
受講者 A が親トークに返信を投稿 → 親投稿者・既存のスレッド参加者・メンション対象がスレッドタブで未読バッジを確認できる。スレッドを開いた時点で当該スレッドの未読が消える。スレッド外のチャンネル一覧からは未読として浮かない。
シナリオ 3: メンション通知 + メンションタブ
別の受講者が自分をメンションして投稿 → メンションタブに当該投稿が未読として並ぶ。ルームを開いて当該投稿まで到達した時点で既読化される(ルーム既読化と連動する)。
シナリオ 4: 受講者宛 DM 配信での講師側挙動
メイン講師が受講者全員に DM 配信を行う → 各受講者の DM ルームには未読バッジが点くが、講師側でその DM ルームが既読だった場合、配信トークで未読化されない。配信前から未読が残っていた場合は、その未読状態が維持される。
シナリオ 5: 講座詳細画面のトークタブへの集約
講座詳細画面では、ホーム / スレッド / メンションの 3 軸のいずれかに未読があるとトークタブにバッジが点く。講座一覧側にはバッジが出ないため、複数の講座を契約している受講者は、未読の有無を確認するには各講座詳細画面を開く必要がある(CS 問い合わせで「一覧で未読が見えない」と挙がるケースの根拠)。
権限別仕様
権限定義は ../../user-roles.md、用語は ../../terminology.md 参照。
未読管理は同一ユーザーが「未読を発生させる側(投稿)」と「未読を消費する側(閲覧・既読化)」の両方になり得るため、操作の性質で分けて整理する。
講座権限軸
未読の発生(投稿者視点)
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 投稿により他ユーザーへ未読を発生させる | × | ○ | ○ | ○ |
| 自分の投稿で自分自身に未読が立つ | — | × | × | × |
- 自分の投稿で自分自身は未読化されない(投稿時点で投稿者自身の最終既読 ID を更新する)
- 未受講者は投稿そのものができないため、未読発生の起点になり得ない
未読の消費(閲覧者視点)
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| ホーム未読バッジ(ルーム単位)の表示 | × | ○ | ○ | ○ |
| スレッド未読バッジの表示 | × | ○ | ○ | ○ |
| メンション未読バッジの表示 | × | ○ | ○ | ○ |
| 講座トークタブへの未読ロールアップ | × | ○ | ○ | ○ |
| ルームを開いて既読化 | × | ○ | ○ | ○ |
| スレッドを開いて既読化 | × | ○ | ○ | ○ |
| 過去トーク制限を超えた古い投稿を未読対象にする | × | ×(※1) | ○ | ○ |
| DM 配信トークによる自身の未読バッジ抑止 | — | — | ○(※2) | ○(※2) |
- ※1: 過去トーク制限が有効なルームでは、受講者は契約開始日以前の投稿を閲覧できない。閲覧不可な範囲のトークは未読にもならない(既読化操作も発生しない)。講師は常に閲覧可能で、未読対象にもなる
- ※2: 講師宛の DM ルームに最新投稿として DM 配信トーク が入った場合、その配信投稿だけで講師側の未読バッジは点かない。投稿前から残っていた未読は維持される
横断軸
| 操作 | 運営アドミン | テストユーザー | 投稿禁止 |
|---|---|---|---|
| 自身の未読バッジ受信 | ×(通常ユーザー経路は未実装) | (通常と同じ) | (通常と同じ。受信側の挙動には影響しない) |
| 他ユーザーの未読を強制既読化 | ×(運営アドミン経由の専用操作経路は存在しない) | × | × |
| 投稿による未読発生 | (運営アドミン経由の直接投稿はなし) | (通常と同じ) | × |
投稿禁止フラグの影響範囲: 投稿入口で弾かれるため、そのユーザーが起点の未読は発生しない。受信側として未読を表示・既読化する挙動には影響しない。
機能詳細(ふるまい)
未読の 3 軸
ホーム未読(ルーム単位)
- 対象: チャンネル / DM すべて
- 判定: ルームに新規投稿があり、自分の最終既読がそれより前であれば未読
- 既読化: ルーム画面を開いて投稿を表示すると、その時点で最新投稿まで既読化される
スレッド未読
- 対象: 自分が関与したスレッド(投稿・参加・メンション対象)
- 判定: スレッドに新規返信があり、自分のスレッド既読がそれより前であれば未読
- 既読化: 該当スレッドを開いて投稿を表示すると、当該スレッド内が既読化される
- スレッドタブには自身に関係するスレッド未読のみが集約される
メンション未読
- 対象: 自分がメンションされた投稿(チャンネル / スレッド どちらでも)
- 判定: 当該投稿の最終既読が記録されていなければ未読
- 既読化: メンション元の投稿を含む位置までルームまたはスレッドを開くと既読化される(ルーム既読化・スレッド既読化と連動)
講座トークタブへの集約
- 講座トークタブ: 同一講座内のホーム / スレッド / メンションの 3 軸のいずれかに未読があれば点灯
- 講座一覧側へのロールアップは未実装: 講座一覧では未読バッジを出していない。複数講座を契約している受講者は各講座詳細画面を開いて確認する必要あり(今後の改善課題: 講座一覧への未読集約)
トークタブへの集約は保存値ではなく計算結果。3 軸の元データが既読化された瞬間に集約表示も消える。
既読化のタイミング
| トリガー | 影響範囲 |
|---|---|
| ルームを開いて投稿を表示 | ホーム未読クリア + 表示範囲のメンション既読 |
| スレッドを開いて投稿を表示 | 当該スレッド未読クリア + スレッド内のメンション既読 |
| 自分の投稿が完了した瞬間 | 自身のホーム未読クリア(自分の投稿で自分が未読化されないための更新) |
| 講師宛 DM ルームに DM 配信トークが投入された瞬間(講師側のみ) | 配信前に既読だった講師側ルームの最終既読を配信トーク ID へ更新(未読化抑止) |
既読化は前進のみ: より新しい投稿で既に既読化済みのルームに、古い既読位置が上書きされることはない。
DM ルームの未読チェック対象絞り込み
ユーザーが多数の DM ルームを抱える講座(例: 講師として大量の受講者と 1:1 ルームを持つ)でも未読チェックを軽くするため、DM ルームの未読チェックは次のように絞られる:
- ルーム最新投稿日時 > 自分の DM 既読基準日時 のルームのみが未読チェック対象
- そのうち最新投稿日時の降順で先頭 100 件 に限定
- 既読確認が完了したルームについては DM 既読基準日時を更新(次回はそれ以降のみチェック)
100 件超の DM ルームに残った未読は、新しい投稿が増えて 100 件に入った時点で再度未読として浮上する設計。100 件圏外で滞留した古い未読は表示されない可能性がある(ユーザー影響としては「古すぎる DM の未読バッジが消えることがある」)。
過去トーク制限との関係
ルーム設定で「過去トーク制限」が有効な場合、受講者は 契約開始日以前 の投稿を閲覧できない。閲覧できない範囲の投稿は未読対象にもならず、既読化操作も発生しない。講師(メイン / サブ)は常に閲覧可能で、過去トーク制限の影響を受けない。
投稿の編集・削除と未読
- 編集: 既読 / 未読の状態は変わらない。新規通知も発火しない
- 削除(論理削除): 既読 / 未読の状態は変わらない。最新投稿 ID 自体は削除されたトークから 1 つ前へ巻き戻り、判定ロジック上は既読扱いになり得る
admin 操作
できる操作
- ルーム最新トーク情報の再計算: ルーム最新投稿 ID のキャッシュ不整合(投稿が一覧に出ない / 出続ける)対応に使用。未読判定の基準値を正しい状態に戻す効果がある
- Firestore 側ユーザー情報の同期(
dryRunオプション付き): 未読判定が依存するユーザー情報の整合性メンテナンス
実装されていない / 不明(CS 判定に有用)
- 特定ユーザーのトーク未読を運営から強制既読化: 実装不在(CS で「バッジが消えない」問い合わせ時、運営側で強制クリアする経路はない)— 今後の改善課題
- 未読件数の確認・棚卸し系のレポート機能: 実装不在 — 今後の改善課題
- DM 既読基準日時のリセット(古い DM 未読をユーザー側で全部既読にしたいケース): 実装不在 — 今後の改善課題
品質 / 約束事項
応答性
- 投稿後、相手側の未読バッジは 数秒以内 に反映される(投稿 → サーバー登録 → 受信側のリアルタイム監視で反映)
- ルームを開いて既読化すると、自分の他デバイス・他タブにも数秒以内で反映される
制限値
- DM 未読チェック対象数: 1 講座あたり最大 100 件(最新投稿日時の降順)
- スレッド / メンション未読の同時監視件数: それぞれ最大 100 件(既読基準日時より新しいレコードのうち最新 100 件)
データ保持
- 最終既読位置: ユーザーがルーム / スレッドを開くごとに更新(前進のみ)
- DM 既読基準日時 / スレッド既読基準日時 / メンション既読基準日時: 講座 × ユーザー単位で保持
- 退会・契約終了時の既読データの扱いは 未確認(dev 課題)
信頼性
- 未読判定経路で一時的な障害が起きても、内部的にバックアップ経路へ切り替えて判定を継続する(ユーザー視点では結果が変わらない)
- ネットワーク切断時は最終既読の更新がスキップされる(次回オンライン復帰時にユーザーが再度ルームを開けば既読化される)
変更履歴(リリースノート候補)
v2.31.0: 2026-05-04
- [修正] 受講者の左トークルーム一覧で DM 群が最上部固定で表示されないデグレを修正(FIN-446)。元々 DM は最上部固定の仕様だったが、トークチャンネルカテゴリー機能導入の過程で表示位置が崩れていたものを正しい仕様に戻したもの。未読判定ロジック自体は変更なし
- [修正] DM パネルで「未読のみ」フィルタ ON 時に未読チップが表示されない不具合を修正(FIN-453)
- [改善] カテゴリーパネル(v2.31.0 で追加、
./category.md参照)で「未読のみ」フィルタ ON 時の未読チップ表示・3 点メニューの未読フィルタ対応を改善
v2.29.2: 2026-04-28(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
関連ドキュメント
- 権限定義:
../../user-roles.md - 用語辞書:
../../terminology.md - 関連 PSD:
./room.md— ルーム設定(過去トーク制限・DM)と未読の関係./post.md— 投稿時の最終既読更新./thread.md— スレッド構造(未作成)./mention.md— メンション記録(未作成)./notification.md— プッシュ通知(未読バッジとは別経路)./listing.md— ルーム一覧表示と未読の関係(未作成)