Fincs

コンテンツ / 動画

コンテンツ / 動画

本ページは 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 二重化 / マルチパートアップロード追加 / 埋め込みプレイヤー追加 等)

関連ドキュメント


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