Fincs

運営アドミン / コンテンツ管理

運営アドミン / コンテンツ管理

本ページは 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 導入 / 配信メール置換対応 等)

関連ドキュメント


このページの内容を AI に質問しますか?
関連 spec を自動抽出して ChatGPT / Claude などに渡せます。
AI Prompt で開く →