トーク / 閲覧・検索
トーク / 閲覧・検索
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
トークルーム一覧、ルーム内トーク一覧、および検索の閲覧導線を提供する機能。受講者・講師は本機能を使って参加ルームを把握し、ルーム内の過去のやり取りを辿って目的の発言を探す。
主な閲覧モード:
- ルーム一覧(講座単位): 講座詳細のトークタブで、その講座のトークルームをカテゴリー別に表示(v2.31.0 で集約表示に対応、詳細は
./category.md) - ルーム一覧(全講座横断): 自分が関わる全講座のトークルームを横断で取得する経路。FE 側ではユーザー向け画面では使われず、外部から検索エンジンが参照する用途等の限定的な経路
- ルーム内トーク一覧: 単一ルームに入ったときの過去発言の表示。ページング・期間指定・検索ワードで絞り込み可能
- 検索: 講座内全ルーム横断、または単一ルーム内のテキスト・ファイル名・キャプションをキーワードで部分一致検索
並び順は、ルーム一覧では「表示順(講師が定めた順)」と「最新投稿日時」で切替可能(講座単位のみ)。トーク一覧では昇順 / 降順を指定できる。
講座横断のトーク検索は実装なし: 複数の講座を契約しているユーザーが「全講座のトークを 1 つの検索窓で探す」操作はできない(CS 問い合わせで稀に挙がる論点)。
📝 レビュー観点(draft 段階の記述ヒント、完成時に削除):
- 目的: 過去のトークを探す導線。一覧・検索・期間指定で目的の発言にたどり着く
- 誰が使うか: 受講者・メイン講師・サブ講師
- どこで使うか: トークタブのルーム一覧 / ルーム内トーク一覧 / 検索モーダル
- 隣接機能との関係: 投稿(
./post.md)/ ルーム設定による閲覧制限(./room.md:公開状態・アーカイブ)/ 未読バッジ(./unread.md)- CS 問い合わせで頻発する論点: 「過去のトークが見つからない」(過去トーク制限の影響)「ページサイズ大きくしたい」「並び順変えたい」「他講座のトークを横断検索したい」(→ できない)
- [本機能特有] 検索スコープ: 講座内全ルーム横断 or 単一ルーム内のみ。講座横断検索は実装なし
- [本機能特有] ルーム一覧の並び順: 表示順 (
displayOrder) または最新投稿日時 (lastPostDateTime) で切替(講座単位のみ、全講座横断版は固定)- [本機能特有] 期間指定:
latest_daysで「直近 N 日」絞り込み(DB サーバーローカル時刻基準のため要時刻整合確認)- [本機能特有] page_size 上限ガードなし: FE/BE 両方に上限バリデーション未実装
利用シナリオ
シナリオ 1: 受講者が参加ルーム一覧を確認する
受講者が講座詳細のトークタブを開くと、左ペインに該当講座のトークルームがカテゴリー別に表示される。DM が最上部、続いて講師定義カテゴリー、最後に固定「チャンネル」の順で並ぶ(./category.md 参照)。各カテゴリーパネルは展開・折りたたみ可能で、状態はブラウザに記憶される。
シナリオ 2: 過去のトークをキーワードで検索
受講者がルームに入って「特定のキーワードを含む過去の発言」を探す。ルーム内検索バーにキーワードを入力するとそのルーム内のトークがキーワード部分一致で絞り込まれる。投稿テキストはもちろん、ファイル投稿のファイル名・キャプションも検索対象になる。講座内のすべてのルームから探したい場合は、講座内検索モーダルでキーワード指定(講座内全ルーム横断)。
シナリオ 3: 期間で絞り込む
受講者が「直近 30 日のトーク」を確認したい。期間指定の絞り込みで「直近 N 日」の範囲のトークだけを取得できる。期間外の古いトークは表示されない。
シナリオ 4: 講師が削除済み含むトークを確認
CS 対応で運営アドミン経由で削除済みトーク含む一覧を取得し、削除された投稿の本文を確認する。受講者・講師には削除済みトーク取得の経路はない(運営アドミン専用)。
よくある失敗ケース
- 過去トーク制限の影響: ルーム設定で「過去トーク制限」が有効な場合、受講者は契約開始日以前のトークを取得できない。古いトークが見つからない問い合わせの典型原因
- 未契約ルームへのアクセス: 講座未契約 / プラン限定外の受講者がルームの中身を取得しようとするとアクセス拒否扱い
- 講座横断のトーク検索: 実装なし。CS で「他の講座のトークを横串で検索したい」要望は受けられない
📝 レビュー観点:
- 受講者がトークタブを開いて参加ルーム一覧を確認
- ルーム内で検索ワードでトークを絞り込み
- 「直近 30 日」のトーク一覧を取得(latest_days=30)
- 講師が削除済み含むトーク一覧を運営アドミン経由で確認
- 失敗ケース: 過去トーク制限により受講者が古いトークを取得できない、未契約者がルームに入れない
権限別仕様
権限定義は ../user-roles.md 参照。用語は ../terminology.md。
講座権限軸
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 全講座横断のルーム一覧取得 | ○ | ○ | ○ | ○ |
| 講座単位のルーム一覧取得 | ○(公開・非アーカイブのみ) | ○ | ○ | ○ |
| ルーム詳細(管理用)取得 | × | × | ○ | ○ |
| 講座内全ルーム横断のトーク一覧取得 | × | ○(契約者) | ○ | ○ |
| 単一ルーム内のトーク一覧取得 | × | ○(契約者・閲覧権限あり) | ○ | ○ |
| 検索ワード指定 | × | ○ | ○ | ○ |
| 削除済み含むトーク一覧取得 | × | × | ×(運営アドミン経由のみ) | ×(運営アドミン経由のみ) |
横断軸
| 操作 | 運営アドミン | テストユーザー | 投稿禁止 |
|---|---|---|---|
| 削除済み含むトーク閲覧 | ○(運営アドミン経由) | × | × |
| 通常閲覧 | (通常と同じ) | (通常と同じ) | (通常と同じ、閲覧は可) |
📝 レビュー観点:
- 過去トーク制限(
block_past_talks)の閲覧範囲への影響- DM ルームの閲覧範囲(DM 相手 + 講師のみ)
- 講師が他講座を受講者として閲覧する場合の挙動
機能詳細(ふるまい)
ルーム一覧
ルーム一覧は 2 種類:
- 講座単位: 講座詳細トークタブで表示。カテゴリー単位の集約 + DM 最上部固定(v2.31.0 〜、
./category.md参照)。フィルタとして「チャンネル除外」「DM 除外」「アーカイブ除外」を指定可能。並び順は「表示順」または「最新投稿日時」で切替 - 全講座横断: 自分が関わるルームを講座横断で取得する経路。ユーザー向け画面では使われず、検索エンジン向け sitemap 等の限定用途のみ
返るルームは閲覧者の権限により異なる:
- 受講者・未受講者: 公開済み・非アーカイブのチャンネル + 自分宛の DM
- メイン講師・サブ講師: 該当講座は非公開・アーカイブ含めて全ルーム
ルーム内トーク一覧
単一ルームを開いたときに表示される過去のトーク一覧:
- ページング: デフォルト 20 件 / ページ。スクロールで過去側にページを追加読み込み
- 並び順: 昇順(古い順)/ 降順(新しい順)
- 期間指定: 「直近 N 日」絞り込み(後述「期間指定」参照)
- 検索ワード指定: ルーム内のトークをキーワードで絞り込み(後述「検索」参照)
検索
ルーム内のトーク本文・ファイル名・キャプションをキーワードでキーワード部分一致検索する:
- テキスト投稿: 本文を検索対象
- PDF 投稿: ファイル名を検索対象
- 画像 / PDF / 動画: 投稿時の補足メモ(キャプション)も検索対象
スコープは 2 段階:
- 講座内全ルーム横断: 該当講座の参加可能ルーム全部を対象
- 単一ルーム内: 開いているルームのみを対象
検索スコープ
- 講座内全ルーム横断(
GET /talk?plan_id=&search_word=) - 単一ルーム内(
GET /talk/{talk_room_id}?search_word=) - 講座横断検索は実装なし
期間指定
ルーム内トーク一覧で「直近 N 日」のトークだけ取得する絞り込み。N に整数を指定すると、現在から N 日遡った範囲のトークのみが対象になる。期間外のトークは表示されない(取得もされない)。
並び順
- ルーム一覧(講座単位): 「表示順」(講師が定めた順)または「最新投稿日時」で切替可能。受講者ごとの設定ではなく講座共通
- ルーム一覧(全講座横断): 表示順固定(切替なし)
- トーク一覧: 昇順(古い順)/ 降順(新しい順)。降順がデフォルト
ページング
- デフォルトページサイズ: 20 件 / ページ
- ページサイズ上限: 現状ガードなし(任意の値を指定でき、極端に大きい値だと負荷リスク)— 今後の改善課題
削除済み含むトーク一覧
運営アドミン経由でのみ取得できる。CS 対応で削除されたトークの本文・投稿者を確認するための運用経路として利用される。詳細は ../admin/talk.md 参照。受講者・講師には削除済みトーク取得の経路はない。
📝 レビュー観点:
- 入力 → 処理 → 出力: ページング + 検索ワード + 期間 + 並び順 → 結果一覧
- エッジケース: 期間外の投稿、アーカイブルーム、削除済みトーク、過去トーク制限超過
- エラー表示: 未契約ルームの取得試行
- [本機能特有] 時刻基準:
latest_daysは DB サーバーローカル時刻基準、UTC 保存値との整合に注意- [本機能特有] page_size 上限ガード不在: 大きい値を直接指定できる(dev 改善課題)
admin 操作
できる操作
- 削除済み含むトーク一覧: 運営アドミン経由で取得可能(CS 対応用)
- トーク本文内容の確認: 削除済みトークも参照可
詳細は ../admin/talk.md 参照。
実装されていない / 不明
- 講座横断検索: 実装なし — 今後の改善課題
- page_size 上限バリデーション: 現状なし
📝 レビュー観点:
- 削除済みトーク参照の運用フロー
- 講座横断検索の必要性(検索性能との trade-off)
品質 / 約束事項
- 応答性: 一覧取得・検索は同期処理、ページサイズ次第で数秒以内
- 信頼性: 受講者の閲覧範囲は権限・契約状態・ルーム設定(公開状態・アーカイブ・過去トーク制限)でフィルタされ、参照不可なトークは検索結果にも出ない。削除済みトークは受講者・講師からは見えず、運営アドミン経由のみで参照可能
- 制限値:
- デフォルトページサイズ: 20 件
- page_size 上限: 制限なし(要 dev 改善)
- 検索範囲: 講座内全ルーム横断 or 単一ルーム
- データ保持: 削除済みトークは論理削除、運営アドミン経由で参照可
📝 レビュー観点:
- 応答性: 大量トーク(数万件)でのページング性能
- 検索性能: LIKE 中置検索のパフォーマンス、インデックス活用
- [本機能特有] 過去トーク制限: 受講者の閲覧範囲を契約開始日で絞る挙動の biz 表現
変更履歴(リリースノート候補)
v2.31.0: 2026-05-04
- [修正] 受講者の左トークルーム一覧で DM 群が最上部固定で表示されないデグレを修正(FIN-446)。元々 DM は最上部固定の仕様
- [変更] ルーム一覧をチャンネルカテゴリー単位で集約表示するように変更。固定カテゴリー(「チャンネル」「DM」)と講師定義カテゴリーを表示順統合(FIN-282 / FIN-283 / FIN-284 / FIN-445)。詳細は
./category.md参照 - [修正] DM パネルで未読のみフィルタ時に未読チップが表示されない不具合を修正(FIN-453)
- [修正] 未読フィルタ中のカテゴリーパネルで未読チップ表示・3 点メニューの未読フィルタ対応を改善
v2.29.2: 2026-05-02(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
📝 レビュー観点:
- 過去の主要変更(検索機能追加 / 期間指定追加 / 並び順切替追加 等)
関連ドキュメント
- 権限定義:
../user-roles.md - 用語辞書:
../terminology.md - 関連 PSD:
./post.md— 投稿./room.md— ルーム設定(公開状態・アーカイブ・過去トーク制限)./unread.md— 未読バッジ・既読判定../admin/talk.md— 運営アドミンによるトーク管理