name: metadata-audit
description: "Use when ローカル descriptions.md と YouTube 上のメタデータが整合しているかを監査したいとき。「メタデータ監査」「説明欄ずれてない?」「タグ確認」「アップ済み動画の整合性チェック」「/metadata-audit」など、collections/live/ 配下のドリフト検出に関わる場面で使用すること。修正は対象外(/video-description が責務)"
Overview
yt-metadata-audit のラッパー。collections/live/<col>/20-documentation/descriptions.md と workflow-state.json の整合性、および YouTube API 側 snippet/localizations の整合性を読み取り専用で監査する。
修正は範囲外。差分検出後の更新は /video-description で descriptions.md を再生成し、必要に応じて yt-bulk-update-desc 経由で push する。
When to Use
- 一括アップロード後に YouTube 側にメタデータが正しく反映されたか確認したいとき
- descriptions.md を手で編集したあと、live 動画と差分が出ていないか調べたいとき
- 多言語ローカライゼーションが期待通り反映されているか確認したいとき
- scene_phrases の言語抜けを検出したいとき
Quick Reference
| コマンド | 説明 |
|---|---|
uv run yt-metadata-audit |
local + remote の両方を監査 |
uv run yt-metadata-audit --local |
descriptions.md / workflow-state.json のみ(API call 不要) |
uv run yt-metadata-audit --remote |
YouTube API 側 snippet/localizations のみ |
uv run yt-metadata-audit --strict |
1 件でも issue が見つかれば exit 1(CI 用途) |
Instructions
Step 1: 監査の実行
引数なしで uv run yt-metadata-audit を実行する。collections/live/ 配下を全件走査し、以下を検出する:
LOCAL チェック:
descriptions.mdのタイトル案/Complete Collection 概要欄セクション欠落- タイトル 100 文字超過
- タイムスタンプ数 < 3 もしくは > 12(後者は variation expansion regression 検出)
- chapter 名のローマ数字(pattern I / II / III ... = variation expansion)
workflow-state.jsonのscene_phrases言語抜け- タグ件数・YouTube タグ文字数制限
- master mp4 が残っている場合の動画尺チェック(target_duration_min/max)
REMOTE チェック(OAuth 必要):
- video_id が YouTube 上に存在するか
- YouTube 側 title 100 文字超過
🎧 🌧のように scene_phrase が脱落して空白だけ残った title- description のタイムスタンプ数 > 12
- ja localized title に日本語文字が含まれていない
- zh コードが
['zh-CN', 'zh-TW']以外の組合せ(旧zh-Hans/zh-Hant残骸検出)
Step 2: issue がある場合の対応
監査出力に基づき、ユーザーに次のアクションを案内する:
descriptions.md側の問題(タイトル長すぎ、timestamp 過多など) →/video-descriptionで再生成- YouTube 側との差分(local と remote がずれている) →
/video-descriptionで descriptions.md を最新化したあと、運用者がyt-bulk-update-descで push(一括更新スクリプトは現状チャンネル固有のため別途運用) - scene_phrases 言語抜け → 該当コレクションの
workflow-state.jsonを手動で補完(汎用的な i18n 初期化スクリプトは未整備)
Step 3: CI 統合(オプション)
GitHub Actions や cron で常時監視する場合は --strict を付ける。1 件でも issue があれば exit 1 で失敗するため、定期実行 → 通知パイプラインに組み込める。
障害時ガイダンス
--local 実行時は YouTube API を呼ばないため OAuth/quota 起因の失敗は発生しない。API 経由(既定)では以下が該当する。
| 状況 | 兆候 | 対処 |
|---|---|---|
| OAuth 未認証/失効 | auth.oauth_handler の FileNotFoundError(client_secrets.json 不在)/ AuthError / HTTP 403 |
初回認証フローを再実行。403 が続く場合は auth/token.json を削除しスコープを確認のうえ再認証 |
| YouTube quota / rate | HTTP 429 / 403 quotaExceeded |
日次 quota(既定 10,000 units・太平洋時間 0 時リセット)を待つか呼び出しを抑える |
| API 障害 / サービス停止 | HTTP 503 / タイムアウト | Google Cloud / YouTube のステータスを確認し、時間を置いて再実行 |
Cross References
/video-description— descriptions.md の生成・更新(修正の入口)yt-bulk-update-synthetic-media— 公開済み動画のstatus.containsSyntheticMediaがfalseのまま残っている場合にTrueへ一括是正する(#606、#603 是正前のアップロード分の遡及)pyproject.tomlのyt-metadata-auditentry pointsrc/youtube_automation/scripts/metadata_audit.py— 実装本体src/youtube_automation/utils/preflight_checks.py—extract_descriptions_md_tags/check_tags_count/check_tags_yt_charsを共有