運営アドミン / コンテンツ管理
運営アドミン / コンテンツ管理
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
運営アドミン向けのコンテンツ管理機能群。受講者・講師の通常運用では行わない代理操作・運営判断によるデータ補修・URL 一括移行などをまとめて扱う。
主な対象操作:
- 無料公開フラグの切替: 受講者限定 ↔ 一般公開を運営アドミンが代理切替
- コンテンツ削除(論理削除): 受講者・第三者からの通報対応や規約違反コンテンツの強制非公開化
- コンテンツ情報の再同期: 表示用の最新情報を内部キャッシュへ再投影し、表示崩れの解消やライブラリ情報の整合性メンテナンス
- URL 内コンテンツ識別子の一括置換: 記事本文・講座紹介文・配信メール本文に含まれるコンテンツ識別子(旧形式の数値 ID)を、新形式の識別キーへまとめて置換
主な利用想定は、CS 案件で「特定コンテンツを一時的に無料化したい」要望対応、不適切コンテンツの強制削除、表示崩れ・整合性破綻の補修、新 URL 形式への一括移行など。すべて運営アドミン専用の経路で、講師・受講者からは行えない。
置換実行のセーフガード: URL 一括置換は事故防止のため、デフォルトで「実行前のプレビュー(dryRun)」モードで動作し、実際の更新は明示的にプレビュー解除を指定したときのみ行われる。プレビュー時には、置換対象件数・置換前後の URL 一覧をレスポンスで確認できる。
📝 レビュー観点:
- 目的: コンテンツ運用の代行・URL 移行(識別キー化)
- 誰が使うか: 運営アドミン
- どこで使うか: 運営アドミン汎用ツール経由
- 隣接機能との関係: コンテンツ機能(
../contents/)、講師による配信編集(../contents/)- CS 問い合わせで頻発する論点: 「無料/有料切替の即時性」「削除コンテンツの復旧」「ID 置換の影響範囲」「サムネイル再生成経路」
- [本機能特有] dryRun 既定 true: 置換系は事故防止でデフォルト dryRun
- [本機能特有] 運営側削除では Firestore 削除が走らない: 講師経路と挙動差
- [本機能特有] サムネイル再生成専用経路は未検出: 別経路で実施
利用シナリオ
シナリオ 1: 特定コンテンツを期間限定で無料公開する
講師からの依頼や運営判断で、特定コンテンツを一時的に一般公開(無料)に切り替える。運営アドミンが対象コンテンツの無料公開フラグを切替操作で ON にすると即時反映される。期間終了時に再び OFF に戻す運用。
シナリオ 2: 不適切コンテンツの削除依頼に対応する
受講者・第三者からの通報、または運営判断で不適切と認められたコンテンツを削除。運営アドミンによる削除は内部的に論理削除として処理され、画面上から見えなくなる。
シナリオ 3: 表示用情報を再同期する
整合性破綻や表示崩れが発生した場合、運営アドミンが表示用情報の再同期処理を実行。コンテンツ全体・ライブラリ全体のいずれも再同期可能で、CS 対応で「コンテンツリストに古い情報が表示される」「ライブラリの並びがおかしい」といった相談時の補修手段。
シナリオ 4: 新 URL 形式への一括置換(プレビューモード)
旧形式の数値ベースのコンテンツ識別子から、新形式の識別キーへの URL 移行を運営アドミンが実行。まずプレビューモード(dryRun)で件数と置換前後を確認し、影響範囲が想定通りであることを確認してから本実行する。
シナリオ 5: 新 URL 形式への一括置換(本実行)
プレビューで内容を確認した後、本実行モードで実際の更新を行う。記事本文・講座紹介文・配信メール本文(一斉配信 / ステップ配信)の 3 種類が対象で、それぞれに個別の経路が用意されている。
よくある失敗ケース
- 識別キー未設定コンテンツの置換スキップ: 新形式の識別キーが未設定のコンテンツは置換対象から外れる(プレビュー結果に記録される)
- 範囲指定の誤入力: 置換対象範囲(先頭 ID / 末尾 ID)を誤って指定すると、想定外のコンテンツに影響する可能性
- 削除取消(運営アドミン経路)の未提供: 運営アドミンによる削除を取り消す経路は未提供。誤削除を取り消したい場合は内部対応が必要
- 大量データの再同期処理: 全件再同期は規模次第で時間がかかる。実行タイミングに注意
権限別仕様
権限定義は ../user-roles.md 参照。用語は ../terminology.md。
横断軸
| 操作 | 運営アドミン | 受講者 | 講師 |
|---|---|---|---|
| コンテンツ無料化切替 | ○ | × | × |
| コンテンツ削除(論理) | ○ | × | △(自講座のみ別経路) |
| Firestore 再投影 | ○ | × | × |
| コンテンツ ID 置換(URL 内) | ○ | × | × |
📝 レビュー観点:
- 講師経路と運営経路の挙動差: 削除時の Firestore 反映が異なる
機能詳細(ふるまい)
コンテンツ無料公開切替
- 指定講座の指定コンテンツについて、無料公開フラグの ON/OFF を切替
- 受講者画面では即時反映され、無料化期間中は未受講者を含めて閲覧可能
- 切替対象は単一コンテンツ単位
コンテンツ削除(論理削除)
- 指定コンテンツを論理削除として処理(内部にデータは保持)
- 受講者画面・講師画面のコンテンツ一覧から非表示になる
- 講師による通常削除と運営アドミンによる削除では、内部の関連処理経路に若干の差異があるため、CS 対応時は dev 確認が必要なケースあり
コンテンツ情報・ライブラリ情報の再同期
- 表示用の最新情報を内部キャッシュへ再投影する処理
- 「全コンテンツの最新化」「コンテンツの初期登録(全件再投入)」「ライブラリの初期登録」の 3 種類
- 表示崩れ・整合性破綻の補修手段として運営アドミンが実行
- 全件規模の再同期は処理時間がかかるため、実行タイミングは運用判断
コンテンツ識別子の URL 一括置換
旧形式の数値ベース識別子から新形式の識別キーへ、URL を一括で置換する機能。対象は 3 種類:
- 記事本文内 URL: 記事の本文中に含まれる旧形式 URL を新形式へ置換
- 講座紹介文内 URL: 講座の紹介文(サブ紹介文)に含まれる URL を新形式へ置換
- 配信メール本文内 URL: 一斉配信・ステップ配信のメール本文に含まれる URL を新形式へ置換(2 系統一括処理)
各置換機能には共通で:
- プレビューモード(dryRun): デフォルト ON。実際の更新を行わず置換対象件数・置換前後の URL 一覧のみ確認可能
- 対象範囲指定: 先頭 ID / 末尾 ID で対象を限定可能(任意。指定しない場合は全件対象)
削除済みコンテンツの参照
- 削除(論理削除)済みコンテンツの一覧・単体取得用の運営アドミン専用経路は未提供
- 必要な場合は内部対応で個別確認
📝 レビュー観点:
- 入力 → 処理 → 出力: 経路入力 → 即時実行 → 置換系は件数・差分一覧をレスポンス
- エッジケース: 識別キー未設定のコンテンツがスキップされる、範囲指定(headId/tailId)の妥当性
- エラー表示: 講座 ID と コンテンツ owner_plan_id 不一致で 404
- [本機能特有] 同期実行: 件数規模で長時間化のリスク
admin 操作
本ページ全体が運営アドミン操作の集約。
該当なし / 実装されていない
- サムネイル再生成の専用経路: 未検出(Firestore 投影で間接反映のみ)
- 削除取消の運営アドミン経路: 未実装(講師経路にはあり)
- 講師による削除との挙動統一: 運営アドミン削除では Firestore 削除が走らない
📝 レビュー観点:
- サムネイル再生成の手段確認
- 運営アドミン削除と講師削除の挙動差の整合
品質 / 約束事項
- 応答性: 即時実行(同期)。Firestore 全件投影は件数規模次第で長時間化
- 信頼性: 置換は dryRun デフォルト、実行後はトランザクション内で更新
- 制限値:
- dryRun: デフォルト true
- headId / tailId: 任意(バリデーションなし)
- データ保持: 論理削除(内部的に保持)
📝 レビュー観点:
- [本機能特有] dryRun 既定 true: 安全側
- [本機能特有] Firestore 投影が同期実行: タイムアウトリスク
変更履歴(リリースノート候補)
v2.29.2: 2026-05-04(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
📝 レビュー観点:
- 過去の主要変更(identifier_key 導入 / 配信メール置換対応 等)
関連ドキュメント
- 権限定義:
../user-roles.md - 用語辞書:
../terminology.md - 関連 PSD:
../contents/— コンテンツ機能(受講者・講師視点)./talk.md— トーク管理(Firestore 同期)