コンテンツ / 記事
コンテンツ / 記事
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
講座のコンテンツ形式の 1 つとして記事(テキスト + 画像 + 動画埋め込み)を配信する機能。受講者・未受講者が記事を閲覧する経路と、講師が記事を作成・編集・公開する経路を統合的に扱う。
主な特徴:
- リッチエディタ: 見出し / 太字 / 斜体 / 下線 / 色 / リスト / 引用 / リンク / 画像(リサイズ可)/ 埋め込み動画 / 受講者限定ブロック(記事の一部だけ受講者限定にできる)
- 公開範囲は 3 軸: 受講者限定 / 一般公開、プラン限定公開、公開設定(公開 / 下書き)+ 公開日時予約
- 自動保存: 編集中は 1 秒間隔で下書きが自動保存される(ブラウザを閉じても直前まで保存済み)
- タイトルは 100 文字まで、本文は実質無制限
- 添付ファイル: 記事に補足ファイルを添付可能
主な使い方:
- メイン講師 / サブ講師: 配信メニュー > 記事から作成・編集・公開・プレビュー・削除
- 受講者: コンテンツタブの記事一覧から個別記事へ遷移して閲覧
- 未受講者: 一般公開設定の記事のみ閲覧可(マーケティング情報用途)。受講者限定ブロックは未受講者には非表示
公開状態は「受講者限定」「一般公開」「プラン限定公開(受講者の中でも特定プラン契約者のみ)」「下書き」「公開日時予約」「入会後 X 日制限」を組み合わせて細やかに制御できる。
📝 レビュー観点(draft 段階の記述ヒント、完成時に削除):
- 目的: 講座のコンテンツとして記事(テキスト + 画像 + 動画埋め込み)を配信し、受講者が閲覧する経路
- 誰が使うか: 受講者・未受講者(閲覧、公開設定次第)/ メイン講師・サブ講師(作成・編集・公開)
- どこで使うか: 講座コンテンツタブから記事一覧 → 個別記事、講師は配信メニューから
- 隣接機能との関係: 動画(
./movie.md)/ ドキュメント(./document.md)/ ライブラリ(./library.md)/ 配信メッセージ(../plan-management/bulk-delivery.md)- CS 問い合わせで頻発する論点: 「下書きが消えた」「公開予約が反映されない」「受講者限定ブロックの表示」「画像が貼れない」「文字数上限」
- [本機能特有] リッチエディタ(Tiptap): 見出し / 太字 / 斜体 / 下線 / 色 / リンク / 画像(リサイズ可)/ 埋め込み動画 / 受講者限定ブロック(部分的に受講者限定)
- [本機能特有] 公開範囲 3 軸: 受講者限定 / 一般公開 + プラン限定公開(料金プラン契約者のみ)+ 公開設定(公開 / 下書き)+ 公開日時予約
- [本機能特有] 自動保存: 編集中は 1 秒間隔で下書き自動保存
- [本機能特有] FE/BE 文字数制限の不在: タイトル 100 文字以外、本文の文字数制限が FE/BE 両方に存在しない(dev 改善課題)
利用シナリオ
シナリオ 1: 講師が新規記事を公開
メイン講師が配信メニューから「記事を作成」→ タイトル入力 → リッチエディタで本文作成(見出し・太字・画像挿入・受講者限定ブロック等) → プレビュー確認 → 公開設定で「受講者限定」「公開」を選んで公開。受講者には即時公開され、配信通知が届く。
シナリオ 2: 公開日時予約
講師が記事を編集後、「公開日時予約」で未来日時を指定して保存。指定日時まではプレビューでのみ閲覧可、指定日時に自動的に公開状態に切り替わる。
シナリオ 3: 一般公開記事をマーケティング材料に
講座の魅力を伝えるサンプル記事として「一般公開」を選んで投稿。未受講者も閲覧可能で、講座詳細ページや SNS シェアからのアクセスを通じて入会導線につなげる。受講者限定ブロックを記事内に部分的に挿入することで「続きは入会後にお見せします」という構成も可能。
シナリオ 4: 編集途中で離脱 → 再開
講師が編集中にブラウザを閉じる。1 秒間隔の自動保存で直前の状態が下書きとして保存されているため、再開時はそのまま続きから書き続けられる。
シナリオ 5: プラン限定公開
「上位プラン契約者のみが見られる記事」を作成したい場合、「受講者限定」+「プラン限定公開 ON」+ 該当料金プランを選択して投稿。指定プラン外の受講者には記事自体が見えない。
よくある失敗ケース
- 「下書きが消えた」: 自動保存が通信エラー等で失敗していた可能性。CS で復旧不可の場合は再作成
- 「公開予約が反映されない」: 公開日時の指定ミス(過去日時)等。再保存で解決
- 「受講者限定ブロックの表示」: 同じ記事でも未受講者と受講者で見える内容が違うため、未受講者目線でのプレビューを別途案内
- 「画像が貼れない」: 画像形式・サイズの制約。サポート形式の確認が必要
- 「文字数上限」: 本文は実質無制限、タイトルは 100 文字まで
📝 レビュー観点:
- 講師が新規記事を作成 → プレビュー → 公開する標準フロー
- 公開日時予約(未来日時を指定)→ バッチ適用
- 一般公開記事を未受講者がマーケティング情報として読む
- 受講者限定ブロックを含む記事を、未受講者が読んだ場合の表示(ブロック部分が見えない)
- プラン限定公開記事を契約プラン外の受講者が開いた場合
- 失敗ケース: 自動保存中の通信エラー、下書きから公開時の権限エラー
権限別仕様
権限定義は ../user-roles.md 参照。用語は ../terminology.md。
講座権限軸
閲覧
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 公開(一般公開)記事の閲覧 | ○ | ○ | ○ | ○ |
| 公開(受講者限定)記事の閲覧 | × | ○ | ○ | ○ |
| プラン限定公開記事の閲覧 | × | ○(指定プラン契約者のみ) | ○ | ○ |
| 下書き(DRAFT)記事の閲覧 | × | × | ○ | ○ |
| 受講者限定ブロックの表示 | × | ○ | ○ | ○ |
作成・編集
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 記事作成 | × | × | ○ | ○ |
| 記事編集(自講座のみ) | × | × | ○ | ○ |
| プレビュー表示 | × | × | ○ | ○ |
| 公開状態変更 | × | × | ○ | ○ |
| 公開日時予約 | × | × | ○ | ○ |
| 削除(論理削除) | × | × | ○ | ○ |
横断軸
| 操作 | 運営アドミン | テストユーザー | 投稿禁止 |
|---|---|---|---|
| 記事閲覧 | (通常と同じ) | (通常と同じ) | (通常と同じ) |
| 記事削除 | ○(運営アドミン専用機能) | × | × |
| 無料公開フラグ切替 | ○ | × | × |
| 記事内 URL の識別キー差し替え | ○(移行用機能) | × | × |
📝 レビュー観点:
- 公開記事を未受講者が見られる範囲(マーケティング目的)
- 受講者限定ブロックの仕組み(同じ記事内で部分的に閲覧制御)
- 講師が他講座の記事を編集できないこと
機能詳細(ふるまい)
リッチエディタの装飾要素
リッチエディタで使える装飾要素:
- 見出し: H1 / H2 / H3 の 3 段階
- テキスト装飾: 太字 / 斜体 / 下線 / 色変更
- 構造: リスト(順序あり / なし) / 引用ブロック / コードブロック
- リンク: 任意の URL へのリンク
- 画像: 画像のアップロード + リサイズ可
- 埋め込み動画: 外部動画サービス等の埋め込み
- 受講者限定ブロック: 記事の一部分だけを受講者限定にできる特別なブロック
公開範囲(3 軸構成)
公開範囲は複数の軸の組み合わせで決まる:
| 軸 | 値 | 意味 |
|---|---|---|
| 受講者限定 / 一般公開 | true / false | 一般公開なら未受講者も閲覧可 |
| プラン限定公開 | OFF / ON + プラン選択 | 受講者限定 + ON のとき、指定プラン契約者のみ閲覧可 |
| 公開設定 | 公開 / 下書き | 下書き中は受講者から見えない |
| 公開日時予約 | 未指定 / 未来日時 | 未来日時を指定すると、その時刻まで非公開 |
| 入会後 X 日制限 | 0 / N | 契約開始から N 日以内の受講者には非表示 |
公開日時予約
未来日時を指定して、その時刻まで非公開にできる:
- 編集画面で「公開日時」を未来日時に設定 → 保存
- 指定日時まで受講者には見えない(講師にはプレビューで確認可)
- 指定日時を過ぎると自動的に公開状態に切り替わる
- 即時公開に変更したい場合は再編集で公開日時を未指定に戻す
下書きと公開の使い分け
- 下書き保存: 受講者から見えない状態で内容を蓄積。途中保存・公開準備中の運用に
- 公開保存: 即時に公開状態となり受講者から閲覧可能(公開日時予約と組み合わせ可)
- 既存公開記事の編集中も、編集途中の状態を「下書きに戻す」ことが可能
自動保存
編集画面では1 秒間隔で下書きが自動保存される:
- ユーザーが手動で保存ボタンを押す前に、編集内容が自動的に下書きとして保存される
- ブラウザを閉じても、編集中の最後の状態が下書きとして残る
- 通信エラー等で自動保存に失敗した場合はユーザーに通知される
文字数制限
- タイトル: 100 文字まで(必須)
- 本文: 文字数制限なし(実質無制限。リッチエディタの HTML 文字列をそのまま保存)
- タグ: 最大 5 件
- 本文の制限がないため、極端に長い記事も保存可能(運用上の上限を入れるかは将来課題)
添付ファイル
記事に補足ファイルを添付可能:
- 編集画面で添付ファイルを追加すると、記事閲覧時にダウンロードリンクとして表示される
- ファイル形式・サイズの制約は運用設定(dev 確認)
- 受講者限定 / 一般公開の設定に従って公開範囲が制御される
📝 レビュー観点:
- 入力 → 処理 → 出力: タイトル(100 文字)+ 本文(HTML 文字列、リッチエディタで装飾)+ 添付ファイル
- エッジケース: 自動保存中の重複保存、下書きから公開への遷移、公開日時予約の手動キャンセル
- エラー表示: プラン限定公開で未選択時のエラー、自動保存失敗時のメッセージ
- 編集・削除の挙動: 編集後の通知、削除時の閲覧履歴の扱い、論理削除の取消可否
- [本機能特有] 受講者限定ブロック: 同一記事内の部分的な閲覧制御、未受講者には該当部分が非表示
admin 操作
できる操作
- 記事削除: 運営アドミン専用機能で対応
- 無料公開フラグ切替: 受講者限定 ↔ 一般公開 の運営アドミン代理切替
- 記事内 URL の識別キー差し替え: 移行用バッチ機能(
ReplaceArticleUrlContentIdUseCase) - Firestore 同期再実行: コンテンツ Firestore 投影の再同期
詳細は ../admin/contents.md 参照。
実装されていない / 不明
- 運営アドミンによる記事の代理編集: 専用経路なし(講師に依頼が必要)
- 削除済み記事の復旧: 論理削除のためデータは残るが、復旧経路の有無は要確認
📝 レビュー観点:
- 不適切記事の強制非公開化の運用フロー
- 識別キー差し替えの典型用途(旧 ID → 新 ID への移行)
品質 / 約束事項
- 応答性: 編集・公開は同期処理、自動保存は 1 秒間隔
- 信頼性: 自動保存失敗時はユーザーに通知
- 制限値:
- タイトル: 100 文字以内(FE/BE 一致)
- 本文: 文字数制限なし(FE/BE 両方)
- タグ: 最大 5 件
- データ保持: 削除は論理削除、内部的に保持
📝 レビュー観点:
- 応答性: プレビュー表示の体感速度、自動保存の安定性
- 信頼性: 自動保存失敗時の再試行、ブラウザクラッシュ時の復旧
- [本機能特有] 本文文字数制限の不在: 制限を入れるか、運用で許容するか方針確定(dev 改善課題)
変更履歴(リリースノート候補)
v2.29.2: 2026-05-01(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
📝 レビュー観点:
- 過去の主要変更(リッチエディタ Tiptap 化 / 受講者限定ブロック追加 / 公開日時予約 / 自動保存 等)
関連ドキュメント
- 権限定義:
../user-roles.md - 用語辞書:
../terminology.md - 関連 PSD:
./movie.md— 動画./document.md— ドキュメント./library.md— ライブラリ../plan-management/bulk-delivery.md— 一斉配信(記事公開通知)../admin/contents.md— 運営アドミンによるコンテンツ管理