コンテンツ / 動画
コンテンツ / 動画
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
講座のメイン教材としての動画の配信機能。受講者の受講、講師の動画アップロード・編集・公開、外部埋め込みプレイヤーまでを統合する。
主な特徴:
- HLS 配信(自動ビットレート切替対応): 受講環境の通信状況に応じて画質が自動調整される
- マルチパートアップロード: 大容量動画でも段階的にアップロード可能
- チャプター: 動画内の章立てを設定でき、再生中にチャプタージャンプができる
- 受講履歴・完了判定: 受講中に進捗が自動記録され、最後まで再生したら受講完了として記録される
- 埋め込みプレイヤー: 別 URL で埋め込み専用 UI を提供、外部サイトに iframe 形式で組み込み可能(要 Fincs ログイン)
- 公開範囲: 一般公開 / 受講者限定 / プラン限定公開 / 入会後 X 日制限 で柔軟に制御
- ダウンロード: プラン設定で許可された場合のみ受講者がダウンロード可(講師は常時可)
主な使い方:
- メイン講師 / サブ講師: 配信メニュー > 動画から作成・アップロード・チャプター設定・公開・編集・削除
- 受講者: コンテンツタブの動画一覧から個別動画へ遷移して再生
- 未受講者: 一般公開設定の動画のみ再生可(マーケティング動画用途)
最近のリリースで動画再生に関する不具合修正が複数行われている(v2.30.0 で iPad 再生失敗修正・受講済み動画の再生ハング修正、変更履歴参照)。
📝 レビュー観点(draft 段階の記述ヒント、完成時に削除):
- 目的: 講座のメイン教材としての動画配信。受講者が再生・チャプター移動、講師がアップロード・編集
- 誰が使うか: 受講者・未受講者(公開設定次第)/ メイン講師・サブ講師(作成・編集)
- どこで使うか: 講座コンテンツタブから動画一覧 → 個別動画、外部埋め込み(
embedルート)- 隣接機能との関係: 記事(
./article.md)/ ライブ(./live.md)/ ライブアーカイブ(./livearchive.md)/ ライブラリ(./library.md)- CS 問い合わせで頻発する論点: 「動画が再生できない」「アップロードできない」「埋め込みプレイヤーで認証エラー」「受講完了したのに進捗が反映されない」
- [本機能特有] FE/BE のアップロード上限大きく乖離: FE 100GB / BE 900MB(直アップロード経路では BE 検証が効かないケースあり、要 dev 確認)
- [本機能特有] 受講完了判定: 最後まで再生(duration 到達)で完了。閾値 90% 等の比例判定はなし
- [本機能特有] 埋め込みプレイヤー: 通常受講と同じ認可を流用、専用認証なし
- [本機能特有] HLS 配信: 変換は外部ジョブで生成済み前提、システムは
.m3u8を発見して再生
利用シナリオ
シナリオ 1: 講師が動画をアップロード → 公開
メイン講師が配信メニューから「動画を作成」→ MP4/MOV ファイルをアップロード(マルチパート対応で大容量も段階的に転送)→ サムネイル設定 → チャプター登録 → 公開設定で「受講者限定」「公開」を選んで公開。受講者には即時に配信される。
シナリオ 2: 受講者が動画を視聴して完了登録
受講者がコンテンツタブから動画を選んで再生。再生中は内部的に進捗が記録され、最後まで再生し終えると「受講完了」として履歴に登録される。チャプター単位での移動・速度変更等の操作も可能。
シナリオ 3: 埋め込みプレイヤーで外部サイトに動画を貼る
外部の Web サイト(ブログ等)に動画を埋め込みたい場合、埋め込み専用 URL を取得して iframe で貼る。閲覧時に Fincs へのログインと該当講座の受講権限が確認され、権限がない場合はメッセージが表示される。
シナリオ 4: 動画ファイルの差し替え
既存動画の内容を更新したい場合、編集画面から動画ファイルを差し替え。受講履歴は新ファイルにそのまま引き継がれる。
よくある失敗ケース
- 「動画が再生できない」: 受講環境のブラウザ・通信状況・端末の組み合わせ。最近の修正(v2.30.0)で iPad 再生失敗・受講済み動画のハングは解消されている
- 「アップロードできない」: 通信切断や形式・サイズ制約。マルチパートのため再開可能だが、長時間中断後は再アップロードが必要なケースあり
- 「埋め込みプレイヤーで認証エラー」: Fincs 未ログイン or 該当講座の受講権限がない場合
- 「受講完了したのに進捗が反映されない」: 受講中の通信切断・タブを閉じるタイミングの影響。最後まで再生し直すか、CS 経由で運営側で受講履歴の整合性を確認
📝 レビュー観点:
- 講師が動画をアップロードしてチャプター設定 → 公開する標準フロー
- 受講者が動画を受講 → 完了登録される
- 埋め込みプレイヤーを外部サイトに貼って再生(要ログイン)
- 失敗ケース: アップロード中の通信切断、HLS 変換失敗、再生途中の認証期限切れ
権限別仕様
権限定義は ../user-roles.md 参照。用語は ../terminology.md。
講座権限軸
受講
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 動画再生(一般公開) | ○ | ○ | ○ | ○ |
| 動画再生(受講者限定) | × | ○ | ○ | ○ |
| 動画再生(プラン限定) | × | ○(指定プラン契約者のみ) | ○ | ○ |
| 受講履歴の記録 | × | ○ | ○ | ○ |
| 受講完了登録 | × | ○ | ○ | ○ |
| ダウンロード | × | ○(プラン設定で有効時) | ○ | ○ |
作成・編集
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 動画アップロード | × | × | ○ | ○ |
| メタ情報編集(タイトル等) | × | × | ○ | ○ |
| サムネイル変更 | × | × | ○ | ○ |
| チャプター設定 | × | × | ○ | ○ |
| 動画ファイル差し替え | × | × | ○ | ○ |
横断軸
| 操作 | 運営アドミン | テストユーザー | 投稿禁止 |
|---|---|---|---|
| 動画閲覧 | (通常と同じ) | (通常と同じ) | (通常と同じ) |
| 動画削除 | ○(運営アドミン専用機能) | × | × |
| 無料公開フラグ切替 | ○ | × | × |
| 動画再生時間の運営アドミン更新 | ○(要確認) | × | × |
📝 レビュー観点:
- 未受講者がプラン限定動画を開いた時のメッセージ
- サブ講師の編集権限の制約(要確認)
- ダウンロード可否のプラン設定(
is_downloadable_video)の確認
機能詳細(ふるまい)
動画アップロード
- 対応形式: MP4 / MOV
- マルチパートアップロード: 大容量動画の転送に対応、進捗表示でユーザーに状態を通知
- アップロード進捗: ファイル全体に対するパーセンテージ表示
- サムネイル: 動画ファイルから自動生成、または講師が手動でアップロードして差し替え可
HLS 配信
動画は HLS 形式で配信され、自動ビットレート切替に対応する:
- 受講環境の通信状況に応じて自動的に画質が切り替わる
- 低速回線では低画質、高速回線では高画質で再生され、再生中断や読み込み待ちが減少
- 主要ブラウザ・iOS / Android で再生対応
チャプター
動画内に章立て情報(チャプター)を設定できる:
- 講師が編集画面でチャプターを登録(時刻 + ラベル)
- 受講者は再生中にチャプター一覧から目的の章へジャンプ可能
- 動画の長尺コンテンツでも目的の箇所へ素早くアクセスできる
受講履歴・受講完了判定
- 受講履歴: 受講開始時に履歴が記録され、進捗が一定間隔で自動保存される
- 受講完了判定: 動画を最後まで再生することで「受講完了」として履歴に記録される(再生時間の総量が動画の総時間に到達した時点)
- 一度完了になった動画は受講履歴上で完了状態が保持される
サムネイル
- アップロード時に動画ファイルから自動生成
- 講師が任意の画像を手動でアップロードして差し替え可
- 編集画面でいつでも変更可能
公開範囲
- 一般公開: 未受講者も再生可
- 受講者限定: 該当講座の入会者のみ
- プラン限定公開: 受講者の中でも特定の料金プラン契約者のみ
- 入会後 X 日制限: 契約開始から N 日以内の受講者には非表示
- 下書き / 公開状態: 編集中は下書きで保存し、準備完了後に公開へ切替
ダウンロード
- プラン設定で講座ごとに有効化: ダウンロード可否は講座運営側で設定
- 受講者: 設定で許可された講座のみダウンロード可
- 講師: 常時可(設定によらない)
埋め込みプレイヤー
外部 Web サイト(ブログ等)に動画を埋め込むための専用 URL を提供:
- 埋め込み用 URL を iframe で外部サイトに組み込み
- 認可は通常受講と同じ(Fincs ログイン + 該当講座の受講権限)
- 未ログインや権限なしの場合は再生不可メッセージが表示される
- 専用ドメイン制限はなし(不特定の Web サイトに貼り付け可)
📝 レビュー観点:
- 入力 → 処理 → 出力: アップロード → HLS 変換 → 再生
- エッジケース: アップロード中の通信切断(マルチパート再開可能か)、HLS 変換失敗時の挙動、受講中のセッション期限切れ
- エラー表示: 再生不可時のメッセージ、アップロード失敗時のメッセージ
- 編集・削除の挙動: 動画ファイル差し替え時の旧ファイル削除、削除後の再生不可化
- [本機能特有] 受講完了判定: duration 到達で完了。10 秒間隔の進捗送信
- [本機能特有] 埋め込み認証: 通常と同じ JWT セッション、専用ドメイン制限なし
admin 操作
できる操作
- 動画削除: 運営アドミン専用機能で対応
- 無料公開フラグ切替: 受講者限定 ↔ 一般公開
- Firestore 同期再実行: コンテンツ Firestore 投影の再同期
- 動画再生時間の更新: 集計再計算用(運営アドミン専用機能)
詳細は ../admin/contents.md 参照。
実装されていない / 不明
- HLS 変換完了の通知 webhook: 受信経路未検出(変換は外部ジョブ前提、システムはファイル存在をポーリング)
- 動画再生時間の自動補正: バッチでの再計算経路は未確認
📝 レビュー観点:
- 不適切動画の強制非公開化の運用フロー
- HLS 変換失敗時の運営側対応経路
品質 / 約束事項
- 応答性: アップロードは外部直 PUT、再生開始は HLS マニフェスト取得から数秒以内
- 信頼性: 動画ファイルは 2 系統(Wasabi / S3)に保存、片方障害時はもう一方から配信
- 制限値:
- アップロード上限: 1 ファイルあたり 100GB(画面表示の上限値。実運用では数 GB 規模が中心)
- 対応形式: MP4 / MOV
- 受講完了判定: 最後まで再生(duration 到達)
- データ保持: 削除は論理削除、ファイル本体は当面保持
📝 レビュー観点:
- 応答性: アップロード時間(100MB / 1GB / 10GB 規模での体感時間)、再生開始までの遅延
- 信頼性: Wasabi 障害時の S3 フォールバック、再生中の経路切替
- [本機能特有] FE/BE 上限の乖離: 実質ユーザーに適用される値の確定(dev 改善課題)
変更履歴(リリースノート候補)
v2.30.0: 2026-05-05
- [修正] iPad で動画の再生に失敗するケースがあった不具合を修正(FIN-277)。一部の Safari/iPadOS 環境で HLS マニフェストの読み込み時に再生開始できなかった問題を解消
- [修正] 受講履歴のある動画を再度開いた際に再生がハングするケースがあった不具合を修正(FIN-412)
v2.29.2: 2026-05-01(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
📝 レビュー観点:
- 過去の主要変更(HLS 化 / Wasabi 二重化 / マルチパートアップロード追加 / 埋め込みプレイヤー追加 等)
関連ドキュメント
- 権限定義:
../user-roles.md - 用語辞書:
../terminology.md - 関連 PSD:
./article.md— 記事./live.md— ライブ./livearchive.md— ライブアーカイブ./library.md— ライブラリ../platform/media-pipeline.md— HLS 変換・Wasabi 連携の基盤../admin/contents.md— 運営アドミンによるコンテンツ管理