"ショート動画オーケストレーター:セリフ生成→fact→risk→挿入ビジュアル→7PF投稿文→📣DB保存を1パス。既存パッケージの修正はMode Rで5面へ差分伝播。Triggers: ショート動画作って/TikTokセット作って/Reels一式/セリフ直して。NOT: AIキャラ→ai-kusakawa、写真→photo-post、台本のみ→short-video-virality-architect"
Resources
5Install
npx skillscat add thiguchi125-debug/claude-config/short-video-create Install via the SkillsCat registry.
short-video-create スキル
目的
草川がショート動画を作るたびに発生していた以下の手作業を1パスで吸収する:
- セリフ生成(short-video-virality-architect 呼び出し)
- ファクトチェック(content-fact-checker)
- リスクレビュー(content-risk-reviewer)
- 挿入ビジュアル制作(HTML/CSS→PNG・short-video-image-designer。固定順序=採寸→写真→レンダ→機械採点→目視1回)
- 全7プラットフォームSNS投稿文生成(sns-content-creator) ← 新規追加 2026-05-21
- 📣SNS投稿管理DB保存(タイトル🎬・プロパティ整備・PF別セクション化)
特に以下のループを構造的に潰す:
- 「セリフは作ったけど画像プロンプトは別セッションで頼む→サイズ指定忘れる→やり直し」
- 「動画は撮ったけどSNSへの拡散文を別途作るのを忘れて投稿タイミング逃す」 ← 新規対策
7PF全自動化により、動画を撮影UP後すぐに各SNSへコピペで展開可能な状態になる。
起動条件
以下のいずれかが含まれる発言で起動:
- 「ショート動画作って」「ショート動画一式」「ショート動画フルパッケージ」
- 「動画作って画像も」「セリフから画像までセットで」
- 「TikTokセット」「Reels一式」「YouTube Shorts一式」
- 「short-video-create」
改訂モード(Mode R)のトリガー(既にパッケージがある案件の版更新):
- 「ショート動画のセリフ直して」「動画の原稿を書き換えて」「〇〇(既存動画テーマ)を直して」
- 「この版で確定」「これで完成させて」(草川が手直し版のセリフ全文を貼ってきた時)
- 「全部直して」「画像もSNSも直して」
- 既存の
~/Documents/ObsidianVault/50_発信/*/*ショート動画台本*・drafts/*_ショート動画*(2026-09-15以前の案件)や 📣投稿管理DBの🎬ページを参照している会話の途中で、セリフに修正が入った時は明示トリガーがなくても Mode R に入る(→## 🔁 改訂モードへ)
明示的なトリガーがなくとも、以下の文脈で草川に1問だけ確認してから起動:
- 「〇〇でショート動画」と言われた時 → 「画像プロンプトもセットでいく?」
- 「ショート動画磨いて」と言われ画像未整備の時 → 「画像プロンプトも一緒に作る?」
委譲先(このスキルが呼ばないもの)
- 静止画のみのSNS展開(動画なし) → sns-content-creator 単独
- AIインタビュー結果からのSNS化 → ai-interview-sns-poster
- 長尺YouTube台本(>90秒) → 対象外(長尺は作らない方針・video-content-strategistは2026-07-02廃止)
- 既存画像ライブラリからの選定 → photo-curator
- 印刷物 → print-designer
ただし、動画+SNS展開セットは本スキルが内部的に sns-content-creator を呼んで一括処理する(草川が別途呼び直す必要はない)。
入力(草川から取得)
必須
- テーマ または セリフ全文(どちらか)
- テーマだけ → short-video-virality-architectで3バリアント生成
- セリフ全文 → そのまま使う
- target_length: 35〜50秒・目標45〜50秒(既定・厳守)/60秒・90秒は草川案件では使わない
任意(未指定はデフォルト値で進む)
- target_platforms: TikTok / YouTube Shorts / Instagram Reels(複数可・既定3つ全部)
- crosspost_platforms: X / Threads / Facebook / LINE(複数可・既定4つ全部)— 動画リンクをティーザー文と共にクロスポスト
- num_images: 2〜5枚(既定3枚)
- aspect: 9:16 / 1:1 / 16:9(既定9:16)
- tonal_arc: 暖→寒 / アナログ→デジタル / before→after など(未指定時は内容から自動推定)
- source_url: 元素材があれば
- citizen_voice: 市民の声があれば(最優先素材)
- video_only: true なら SNS投稿文生成をスキップ(既定 false = 7PF全生成)
処理フロー(8ステップ・完全自動)
Step 1: 入力解析・分岐判定
if 入力 == テーマだけ:
mode = "from-theme"
→ Step 2 へ(セリフ生成)
elif 入力 == セリフ全文:
mode = "from-script"
→ Step 3 へ(fact-checkから直行)
elif 入力 == 既存原稿の昇格依頼:
mode = "polish"
→ short-video-virality-architect Polishモード → Step 3
elif 入力 == 既存パッケージのセリフ修正:
mode = "revise"
→ 「## 🔁 改訂モード」へ(Step 2〜8は通らない・伝播フローが別)mode 判定の要点:既に vault 50_発信/<日付>_<テーマ>/・drafts/(旧案件)・~/outputs/ の案件フォルダ か 📣投稿管理DB に同案件のパッケージが存在するなら、たとえ入力がセリフ全文でも from-script ではなく revise。from-script で入ると画像・SNS7種・Notionが旧版のまま取り残される。
Step 2: セリフ生成(from-theme時のみ)
並列起動:
short-video-virality-architect(Soloモード)
入力に渡すもの:
- topic / target_length / target_platforms / citizen_voice / source_url
- voice-dna・policy_compass 参照は agent 側で実施
出力期待値:
- 3バリアント(A: hook最強 / B: 感情ストーリー / C: 議論誘発)
- 各バリアントのカット表(秒単位)
- 8軸スコア(合格点64/80)
草川好みのセリフ構成(2026-06-02反映): ①最強フック1.5秒 → ②名乗り(※「撮っている理由」の一言は2026-09-03 草川指示で廃止。「だから、撮っています」型は今後一切書かない) → ③本論1メッセージ → ④結びの主張=どうしたいか(〈実現主体は誰か〉→〈誰に何を求めるか〉→〈草川自身の意思〉の順。決意文句で固定しない=[[feedback_end_with_claim_not_resolve]]。「求めます/実現します」でなく「求めてほしい/働きかけたい」=[[feedback_sns_no_action_promise_assertions]]。2026-09-10 修正) → ⑤コメント誘発。尺は35〜50秒・目標45〜50秒厳守(名乗り+決意込みでも50秒以内)。冒頭の名乗りはコールドオープン回避のためフックの後ろに置く。詳細 [[feedback_short_video_use_virality_architect_first]] short-video-virality-architect.md 📌節「草川スクリプトスタイル13項目」。
草川に提示し どのバリアントで進めるか1問だけ確認(A/B/C)。承認後にStep 3へ。Step 3・4 を通したら Step 4.5(台本確認ゲート)で止まる。
Step 3: ファクトチェック
content-fact-checker を起動(指示文に ledger: ~/outputs/short-video/<slug>/_ledger.json を1行入れる=テーマ内台帳。フックが自動生成し Step 6 の派生ゲートが継承する):
- セリフ内の数値・固有名詞・法令・統計を一次情報まで遡及
- 修正必要箇所があれば草川に提示→承認後に修正
Step 4: リスクレビュー
content-risk-reviewer を起動:
- 8軸(個人情報・機密・公選法・名誉毀損・差別・利益相反・品位・物議)
- HIGH以上検出時は ASK_USER で草川判断仰ぐ
- CRITICAL は即停止・草川通知
- 公選法メモ(2026-06-02): 政策実現の主張・意思表明(「〜を求めてほしい」「私も働きかけたい」)は告示前の今は事前運動に当たらず投稿可(※実現主体が市の案件で「必ず実現させます」と断定約束しない。2026-09-10 修正)(投票依頼・選挙明示・期数言及がなければOK)。ただし告示日(2026-10-18想定)以降は再投稿・ピン留め・広告出稿・シェア誘導がNG(残置自体は可)(選挙運動判定域)。保存ページにこの運用注記を残す。
- 市・執行部は「市の姿勢/市の答弁」止まりで名指し批判しない。別議員が引き出した数字・市長答弁を草川が引き出したように繋げない(質疑応答の誤帰属注意 [[feedback_giji_kusagawa_response_only]])。
Step 4.5: 台本確認ゲート(必須・skip禁止・2026-09-22新設)
ゲート2段を通った台本(セリフ+カット表)を 先に草川に見せて確定させる。画像(Step 5)とSNS7種(Step 6)は 台本確定まで着手しない。
- vault
50_発信/<日付>_<テーマ>/<日付>_<テーマ>_ショート動画台本_v1.mdに Write →bash ~/.claude/scripts/obs_open.sh <パス>で開く - 冒頭に「ゲート結果」「守っていること(帰属・言わないこと)」「決めてほしいこと」を置き、
#注記での修正を依頼して 待つ - 注記・直接修正が入ったら v2 を作り、変更箇所だけ fact → risk を再通過 → 「この版で確定」を得てから Step 5・6 を 並列で起動
なぜ: 2026-09-22 個別避難計画×拠点避難所で、台本を見せる前に画像16枚とSNS7種を作り、草川の修正(結び・追加の一文)で全部作り直しになった。草川「先に内容確認しなくていいのか?台本だけでもobsidianで」「今回の進め方には問題がある」。
Step 5: 挿入ビジュアル生成(2ルート分岐・2026-06-02改訂)
挿入画像は用途で2ルートに分ける。草川に「説明図メイン?/イメージメイン?」を1問確認(または内容から自動推定)。多くの政策ショートはルートA(説明図)が主役、ルートBは補助。
制作の固定順序(2026-09-05・全ルート共通・skip禁止)
破棄画像28件の原因=〈作る→PNGを自分でRead→主観で直す〉。順序を次に固定する。
- 採寸を先に確定 —
~/.claude/scripts/specs.jsonのimage.9:16(読み込み口specs.py)から級数・字幕帯・セーフ域を読み、各画像の見出し級数・要素座標・写真の切り取り枠を着手前に書き出す - 写真を先に切る — 実写が要る画は
📷写真ストック/10_使える写真/を第一手にし、ファイル名の目利きタグを読む。顔は画面高 25〜35%(40%超は不合格)。縦位置の原本は寄らず全幅で縦に長く取る - レンダ(HTML/CSS→Chrome→PNG のみ。AI画像生成ルートは無い)
- 機械採点 —
check_subtitle_band.py <png>/check_image_design.py <html>/check_overflow.py <html>/feed_preview.py short。ここを通るまで目視しない - 目視は最後の1回(PNGを自分でRead)
- 勝負所のみ
feed-visual-reviewer
ルートA【推奨・データ/説明系】説明図インフォグラフィック(HTML/CSS → PNG)
「全国9割」「23/29市町」「年齢の崖」「Before/After」など数字・比較・構造を理解させる図は、AI画像生成を使わず HTML/CSSで設計して Chrome で PNG化する(print-designer と同じ作り方)。
- 理由: nano-banana は日本語・数字を崩す+写真は雰囲気だけで情報量ゼロになりがち(2026-06-02 子ども医療費動画で「微妙」「情報少なすぎて何の画像か分からない」と本人NG)。説明図HTML→PNGなら正確な日本語+数字+出典が入り崩れない。
- 草川ブランドカラー必須: ライム
#c7ff4a(キーワードのハイライト下線=box-shadow:inset 0 -0.26em 0 #c7ff4a)/ディープグリーン#1f5a3a・#0f3d27/クリーム背景#f3efe4。リーフレットと統一(正本=design_system/templates/leaflet_trifold/README.md)。勝手にアンバー+ネイビー等にしない。 - スタイル: ニュースフリップ調 = kickerピル(深緑地+ライム点) → 見出し[キーワードにライム下線] → 中央ビジュアル[人型比率/マス目グリッド/アイコンカード/年齢チャート等] → 出典付きキャプション(一次出典明記)。
- サイズ: 1080×1920(9:16)。レンダリング:
出力後"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless=new --disable-gpu \ --hide-scrollbars --force-device-scale-factor=1 --window-size=1080,1920 \ --default-background-color=FFFFFFFF --screenshot=out.png "file://<html絶対パス>"sips -g pixelWidth -g pixelHeight out.pngで 1080×1920 を確認。次に固定順序④の機械採点を通し、通るまでReadしない。通ったら⑤の目視を1回だけ行い、字割れ・はみ出しがあれば数値を直して再レンダ。 - HTMLソースも残す(数字・文言の微修正→即再レンダリング可能・ガチャ不要)。
- 雛形:
~/outputs/daily-content/2026-05-27/kodomo-iryouhi-18-musho/infographics/の既存5枚(人型比率/年齢の崖/3場面アイコンカード/29マスグリッド/強調ピン)を流用・改変するのが最速。
何枚作るかは草川に聞かない。カット表が決める(2026-07-30 追加)
num_images の既定3枚は上限ではなく初期値。確定したカット表を上から読み、次に当たるカットは全部インサート画にする。枚数を先に決めて途中で止めない。
| カット表の記述 | 作る |
|---|---|
| 「答弁引用テロップ全画面」「テロップ全画面」 | ○ 逐語の答弁は手打ちさせない(打ち間違いが致命的) |
| 「◯◯図解」「A・B図解」「比較図」「グラフ」 | ○ |
| 「【重要】2行を1枚で同時表示」等の編集の絶対条件が付いたテロップ | ◎ 最優先。1枚のPNGに焼けば編集で物理的に分割できなくなる=リスク緩和策がファイルとして担保される |
| 結び(「まず◯◯/そして◯◯」型の2段まとめ) | ○ |
| サムネ文字案 | ○ 1枚。元写真は photo-curator で自分で選び切る(草川に聞かない・2026-09-04 改訂)。合う写真が無いときだけタイポ版を作り、撮影後に差し替え可能な構造にしておく |
| 実写で撮る画(草川バストアップ/現場の引き・アップ) | ✕ |
焼き込む文言は台本の確定版から機械的に取る。このとき台本の「草川判断の記録」に表記ルール(例:「50台」単独表記は避けA・Bの内訳を必ず添える)が書かれていたら、画像とサムネにも同じルールを適用する。台本本文だけ守って画像で破るのが最頻の抜け。
配信面ゲート(必須・skip禁止): 画像が出揃ったら、パッケージ確定の前にpython3 ~/.claude/scripts/feed_preview.py short <カバー.png> <挿入画...> を走らせ、feed-visual-reviewer を起動して PASS を取る。見るのは3軸だけ——
①カバーがグリッド(幅180px)で読めるか ②PF UIの遮蔽ゾーン(上部ナビ・右アクション列・下部キャプション帯)に出典や数字が入っていないか ③テロップの秒数×文字数(日本語1秒6〜7字、ナレーション同時なら5字)。
字幕セーフ帯 y1240〜1460 と挿入画の原寸可読性は short-video-image-designer の担当なので二重に採点しない。
ルートB【雰囲気/イメージ系】写真ストック → フラットイラスト情景
卒業式・病院待合など雰囲気B-rollや抽象イメージは、①📷写真ストック/10_使える写真/ から引く(固定順序②)→②合う写真が無ければ short-video-image-designer のリッチなフラットイラスト情景(HTML/CSS→PNG)。AI画像生成(nano-banana等)のルートは 2026-09-05 に廃止(設計書 D5=画像は HTML/CSS→Chrome→PNG のみ)。顔・実在ロゴ・学校名・他議員は写真でもイラストでも出さない。
共通: スマホ編集前提なら完成画像をDriveへ
草川は動画編集をスマホ(CapCut)でやることが多い。完成PNG(ルートA/B問わず)は Google Driveミラー~/Library/CloudStorage/GoogleDrive-t.higuchi125@gmail.com/マイドライブ/📱動画素材/<YYYY-MM>_<テーマ>/
にコピーする。→ スマホのDriveアプリ→カメラロール→CapCut で取り込める。ファイル名は挿入順(a1,a2,…)で並ぶようにする。
Step 6: 全7プラットフォームSNS投稿文生成(新規・2026-05-21)
sns-content-creator を起動(video-aware モード):
入力に渡すもの:
- 確定したセリフ全文(fact-check / risk-review済み)
- 動画メタ情報(テーマ / 長さ / 採用バリアント / voice-dna軸)
- target_platforms(動画ホスト)+ crosspost_platforms(クロスポスト)
- ハッシュタグ素材(テーマ・分野・地名「亀山市」必須)
video_only=true なら本ステップをスキップ。
出力期待値: 7PF分の投稿文セット。各PF最適化済み:
動画ホスト3PF(動画本体を載せる場所)
| PF | 文字数 | フォーマット | ハッシュタグ |
|---|---|---|---|
| TikTok | 150字以内 | 1行フック → 1行核心メッセージ → コール(CTA) | 3〜5個(#亀山市 #市議会 #テーマタグ) |
| YouTube Shorts | 説明欄 100〜300字 + ハッシュタグ | フック → 動画の中身予告 → 草川自己紹介1行 → CTA | 5〜8個(SEOキーワード厚め) |
| Instagram Reels | 600〜1000字 | 詩的・ストーリー型導入 → 詳細展開 → CTA → ハッシュタグ束 | 10〜15個(広域ハッシュタグ含む) |
クロスポスト4PF(動画リンクを貼って拡散)
| PF | 文字数 | フォーマット | 動画リンク扱い |
|---|---|---|---|
| X (Twitter) | 140字厳守 | 強フック1文 + 動画リンク + 1〜2ハッシュタグ | リンク必須 |
| Threads | 300〜500字 | 問いかけ型導入 → 共感 → 動画への誘導 → CTA | リンク or 「詳しくは動画で」誘導 |
| 500〜800字 | 論理型・背景説明 → 動画の意義 → CTA | リンク or 動画埋込 | |
| LINE公式 | 300〜500字 | アナウンス型「市議会の最新動画」 → 要点3行 → 動画リンク | リンク必須 |
各PF共通の必須要素:
- voice-dna軸(伝える/繋ぐ/希望)に整合
- 「亀山市」「亀山市議会議員」など草川識別ワード1回以上
- voice-dna NG表現リスト回避(「届かないを終わらせる」「最後の100m」等)
- 公選法配慮(投票依頼・寄附該当表現含めず)
ライト再チェック:
- セリフから抜き出した範囲はテーマ内台帳
~/outputs/short-video/<slug>/_ledger.jsonから継承(再取得しない) - 7PF文を content-gate-lite 派生モードに束ねて1回通す(
mode: derivative+ledger:を渡す。新規に足した情報と圧縮で落ちた但し書きだけ精読)。content-fact-checker/content-risk-reviewer の個別起動はしない(2026-09-05 設計書§3-E)
Step 7: 統合パッケージ提示
草川に以下を1メッセージで提示:
# 🎬 ショート動画フルパッケージ「<テーマ>」
## 📋 メタ
- 長さ: 35〜50秒・目標45〜50秒
- 動画ホスト: TikTok / YouTube Shorts / Instagram Reels
- クロスポスト: X / Threads / Facebook / LINE
- 採用バリアント: B(感情ストーリー)
- 8軸スコア: 72/80 ✅
- fact-checker: ✅ / risk-reviewer: ✅
## 🎤 セリフ・カット表
(秒数 / ナレ / 画 / テロップ)
## 🖼 挿入画像(PNG+HTMLソース)
(a1〜aN・カット表の秒と対応・機械採点PASS)
## 🎬 配置マップ
| 秒 | ナレ | 画 |
## 📱 SNS投稿文セット(全7PF・コピペ運用)
### 動画ホスト3PF
- **TikTok**(150字以内): <投稿文 code block>
- **YouTube Shorts**(説明欄): <投稿文 code block>
- **Instagram Reels**(600〜1000字): <投稿文 code block>
### クロスポスト4PF(動画リンク `<VIDEO_URL>` 含む)
- **X**(140字厳守): <投稿文 code block>
- **Threads**(300〜500字): <投稿文 code block>
- **Facebook**(500〜800字): <投稿文 code block>
- **LINE公式**(300〜500字): <投稿文 code block>
文字数チェック: 全PF✅ / NG表現スキャン: ✅ / 公選法: ✅
---
**草川承認後、📣SNS投稿管理DBへ保存します。OK?**パッケージ本文の置き場(2026-09-15・必須): 上のフルパッケージ(セリフ・カット表・配置マップ・7PF投稿文)は ~/Documents/ObsidianVault/50_発信/<日付>_<テーマ>/<日付>_<テーマ>_ショート動画台本_v<n>.md に Write し、bash ~/.claude/scripts/obs_open.sh <パス> で開いてから承認を聞く。drafts/・~/outputs/ に置くとObsidianで読めない(OPERATIONS.md【C】D7)。ファイル名の「ショート動画」は台本フックの判定に使うので外さない。画像・_ledger.json は ~/outputs/short-video/<日付>_<slug>/ のまま。
Step 8: Notion 📣SNS投稿管理DB 保存
草川承認後、notion-saver agent(または直接MCP)で保存:
DB: 📣SNS投稿管理DB
- database_id:
78f40f33-ae71-4f32-9cc3-b00c0a36707c - data_source_id:
1bd98deb-624f-402c-aeb3-bdaa4782b389
プロパティ:
- 投稿タイトル:
🎬【ショート動画+SNS7PF】<テーマ要約> - ステータス:
進行中(DBに「下書き完成」選択肢ないため) - プラットフォーム (multi_select): 動画ホスト3PF+クロスポスト4PF を全てチェック(YouTube / TikTok / Instagram / X / Threads / Facebook / LINE)
- 分野: テーマから自動判定(行政/福祉/子育て/教育/防災/産業/交通/環境/都市計画/その他)
- ネタ元: 議会/委員会・日次活動・市民相談・行政資料・SNS/新聞 のいずれか
- アイコン: 🎬
page content(セクション順):
- メタ情報(テーマ・長さ・PF・voice-dna軸・採用バリアント)
- 安全ゲート判定(fact-checker / risk-reviewer 結果)
- セリフ・カット表(採用バージョン)
- 挿入画像一覧(a1〜aN のDriveパス+使い所の秒)
- 機械採点の結果(check_subtitle_band/check_image_design PASS)
- 配置マップ
- タイトル案・サムネ案
- 📱 SNS投稿文セット(7PF)— 動画UP後のコピペ展開用
- 8-A. TikTok 投稿文(code block)
- 8-B. YouTube Shorts 説明欄(code block)
- 8-C. Instagram Reels キャプション(code block)
- 8-D. X 投稿文(140字厳守・code block)
- 8-E. Threads 投稿文(code block)
- 8-F. Facebook 投稿文(code block)
- 8-G. LINE公式 アナウンス(code block)
- 8-H. ハッシュタグ群(PF別表)
- 横展開メモ(ブログ深掘り提案)
- アンチ想定+返信案
- 撮影前チェックリスト
- 公開後タスク — 動画UP後の作業フロー(YouTube/TikTok/Reelsの順でUP→クロスポスト4PFは動画URL確定後コピペ→Notion ステータスを「完了」に)
- リサーチソース・元素材URL
🔁 改訂モード(Mode R・2026-07-27新設)
このモードが無かったせいで何が起きたか(2026-07-27 アーバンスポーツ署名 v3→v5.1):
セリフを1行直すたびに、カット表の秒数・挿入画像に焼き込まれた文言・SNS7種に散在する同一フレーズ・Notionページを全部手作業で追いかけた。結果、画像 b1_45percent.png に誤情報(「市内でいちばん、子どもが多い学区」)が焼き込まれたまま2版分放置されていた。Mode R はこの伝播を機械化する。
R-0. 対象の3点セットを特定
- ローカル正本:
~/Documents/ObsidianVault/50_発信/<日付>_<テーマ>/<日付>_<テーマ>_ショート動画台本_v*.md(2026-09-15以前の案件はdrafts/<日付>_<テーマ>_v*.mdか~/outputs/<案件>/内。直した版は vault に v<n+1> で書く) - 画像一式:
~/outputs/short-video/<日付>_<slug>/infographics*/(HTMLとPNGが対で存在) - Notionページ: 📣投稿管理DB(
1bd98deb-624f-402c-aeb3-bdaa4782b389) の🎬ページ
3つ揃わない場合は、欠けているものを草川に確認してから進む。勝手に新規パッケージを作らない(旧版が残って二重管理になる)。
R-1. 差分表の確定
新セリフを1つに確定する。草川の手直し版が常に正。旧セリフとの差分を old → new のペア表にする。この差分表が以降すべての伝播の唯一の入力になる。
R-2. 安全ゲート再実行(skip禁止)
content-fact-checker → content-risk-reviewer を必ず両方通す。変更していない箇所も再検証する。指示文に ledger: を渡し、台帳の VERIFIED 主張は転記でよいが、下記4類型は台帳にあっても毎回ゼロから検算する。
過去版を通過した記述でも、以下は毎回ゼロから検算する:
- 最上級(いちばん/最も/唯一/最多/No.1)を含む主張 → 比較対象の全件表を突合してから通す。2026-07-27の事故は「44.6%」の検算だけが行われ、他校区との比較が一度もされていなかったのが原因(実際は2位)
- 断定の否定形(「〜がない」「〜ゼロ」) → 限定語なしで言い切っていないか。既存の公共施設を否定したと読まれないか
- 数値の射程 → 総人口か子ども人口か/いつ時点か/丸め方は上振れしていないか(「44.6%」を「2人に1人近く」は上振れ)
- 程度の副詞(急激に/大幅に/激減) → 実数と合っているか(10年で+2.5%は「急激」ではない)
R-3. 5面へ一括伝播(手作業禁止)
差分表を以下の5面すべてに適用する。1面でも落とすと版が割れる。
| # | 面 | 手順 | 検証 |
|---|---|---|---|
| 1 | セリフ本文 | 差分表を適用 | 字数を数える(下記R-4の尺計算) |
| 2 | カット表 | 秒数を引き直す。字数が変われば全カットの開始・終了がずれる。カット分割そのものも再計算 | 合計尺が target_length 内か |
| 3 | 挿入画像のHTML | まず ls ~/outputs/short-video/<slug>/infographics*/ で画像の有無を見る。(a) 無い or カット表が要求する枚数に足りない → 「伝播対象なし」で終わらせず Step 5 に入って作る(不足分だけでよい) (b) 有る → grep -rn "<旧文言>" ~/outputs/short-video/<slug>/ で焼き込み箇所を洗う → HTML編集 → 旧PNGを _v1_backup/ へ退避 → Chrome headless再レンダ → PNGを自分でRead して目視検証 |
字割れ・はみ出し・旧文言の残存/カット表の要求枚数との突合 |
| 4 | SNS7種 | 同じ一節がX・Threads・TikTok・Instagram・LINEに重複して散在する。1箇所直して満足しない | grep -c "<旧文言>" で0件を確認 |
| 5 | Notionページ | replace_content で差し替え → fetch で実体確認(一括置換のサイレット失敗+漢字化けの前科あり) |
本文が実際に入れ替わっているか |
一括置換の副作用に注意:sed/str.replace で機械的に置換すると、既に新表現になっている箇所に二重適用されることがある(2026-07-27は「どちらも、どちらも、目的は同じです」が発生)。置換後に必ず全文をgrepして重複語・二重表現を確認する。
R-4. 尺の再計算(毎回・省略禁止)
6字/秒で計算する(architect・memoryと統一。8.4字/秒は過小見積もりで60秒級を生む原因だった。2026-09-03修正)。字数が増えたら必ず草川に申告し、削る候補を1〜2個添える。黙って50秒を超えない。
python3 -c "s='''<セリフ全文>'''; n=len(s.replace(chr(10),'')); print(n,'字 →',round(n/8.4,1),'秒')"R-5. 残存チェックと版の記録
- 旧語句を全ファイルgrepして0件を確認。ただし「変更履歴」「安全ゲート」セクションに旧語句が引用として残るのは正常(本文セクションと区別すること)
- ローカル正本に 「確定時の判断」節を追記:何を採用し、何を不採用にしたか、その理由
- 安全ゲートの指摘を不採用にした場合は、どの代替手段で担保するかを必ず明記する。例:2026-07-27は risk-reviewer の「『私はその一員です』を入れる」(MEDIUM)を草川判断で不採用 → 「0秒からの主体分離テロップと火消しオーバーレイが唯一の防波堤になる」とカット表に注記した
📌 恒久ガードルール(Mode R)
規格値の正本は
~/.claude/scripts/specs.json(short_video=尺・カット・数値、image.9:16=挿入画像)。発信物として保存する前に~/.claude/scripts/gate.pyを通す(2026-09-05追記)。挿入画像の制作規範は~/.claude/agents/knowledge/design_system/short_video_templates/README.mdセリフを直したら画像を疑う。 挿入画像には文言が焼き込まれている。セリフ側だけ直して画像が旧版のまま残るのが最頻の事故
既存パッケージがあるのに from-script で入らない。 画像・SNS・Notionが取り残される
「過去のfact-checkを通過済み」は安全の根拠にならない。 通過時に検証されたのは当時の主張だけ。特に最上級は毎回全件突合
画像PNGは必ず自分がReadする。 サブエージェント委譲禁止([[natural-design-reviewer]] の鉄則と同じ)
「未作成=伝播対象なし」は結論にしない。(2026-07-30 JR亀山駅前送迎環境で発覚)伝播は「既にあるものを直す」だけの工程ではない。画像がゼロなら、それはStep 5 が一度も走っていないという意味であり、Mode R の中で作りにいくのが正しい。「該当ディレクトリなし→対象なし」と書いて閉じると、台本だけが版を重ね、画像はいつまでも生まれない
会話の流れで台本を直し続けた案件は、スキルが一度も起動していないことを疑う。 台本に「agent未起動・手動検証」「未伝播」「該当ディレクトリなし」と書かれていたら、それが未起動の痕跡。その時点で Step 3〜5 を回収する(fact-checker / risk-reviewer / 挿入画像)
画像の枚数は草川に聞かずカット表が決める。「テロップ全画面」「◯◯図解」「編集の絶対条件が付いたテロップ」「結びの2段まとめ」「サムネ」は全部作る。逐語の答弁はCapCut手打ちに任せない(打ち間違いが致命的)
編集の絶対条件が付いたテロップ(例:2行を1枚で同時表示)は最優先で1枚のPNGに焼く。 編集で物理的に分割できなくなり、リスク緩和策がファイルとして担保される。運用ルールを人の記憶に預けない
台本の「草川判断の記録」にある表記ルール(例:「50台」単独表記は避けA・Bの内訳を添える)は画像とサムネにも適用。 台本本文だけ守って画像で破るのが最頻の抜け(JR亀山駅前のサムネ初稿で実際に発生)
出力フォーマット(草川画面)
Step 7で示すフルパッケージ+Step 8でNotion保存後に保存先URLを1行で報告:
✅ 保存完了: <NotionページURL>
→動画ホスト3PFにUP後、ページ内のcode blockを各SNSにコピペでクロスポスト
→説明図PNGは 📱動画素材/<日付>_<テーマ>/ に配置済(スマホDrive→CapCut取込可)
→雰囲気イメージは AI Studio/Geminiアプリ で手動生成(API無料枠は0)⚡ トークン効率化方針
- リサーチは並列・必要最小限(playbook全読みは agent 任せ)
- fact-checker / risk-reviewer は順次直列(並列にすると修正が二重発生)
- sns-content-creator はセリフ確定後の単一呼出(PF別個別呼出は禁止・トークン3倍化する)
- SNS再チェックは7PF分まとめて1回(個別チェックNG)
- Notion保存は1回だけ(途中保存禁止、承認後一発・7PF分のセクションを同時に書く)
- 目標トークン: 120〜180K(SNS生成追加後の新基準)
🚦 失敗時のフォールバック
| 失敗 | 対応 |
|---|---|
| short-video-virality-architectが64点未満連発 | 草川に「テーマ角度を変えるか、別agentで素材集めるか」確認 |
| fact-checkerでファクト崩壊 | 該当部分削除or修正→risk-reviewerに進む |
| risk-reviewerでCRITICAL | 即停止・草川判断仰ぐ、Notion保存しない |
| 挿入画像に人物の顔が要りそう | 手元・モノ・後ろ姿に置き換える(顔は出さない) |
| sns-content-creator がX 140字超過 | 即圧縮(要点だけ残す)→再チェック、3回失敗で草川に「Xは手動短縮」依頼 |
| sns-content-creator がvoice-dna NG表現混入 | 該当箇所のみ書き直し(全文再生成NG・トークン無駄) |
| クロスポスト4PFで動画URL未確定 | プレースホルダ <VIDEO_URL> で保存・公開後タスクでURL差し替え注記 |
| Notion保存timeout | 1回だけリトライ、それでもダメなら草川に手動保存url案内 |
🎯 関連エージェント・スキル
short-video-virality-architect— セリフ生成(Solo / Polish・35〜50秒・目標45〜50秒・名乗り+決意型)- 説明図インフォグラフィック — HTML/CSS→Chrome→PNG(草川カラー・print-designer流)。ルートA・主役
short-video-image-designer— 挿入画像の実装(説明図・フラットイラスト情景・機械採点ループ)sns-content-creator— 7PF SNS投稿文生成(video-aware モード)content-fact-checker— 一次情報遡及content-risk-reviewer— 8軸リスクスキャンsns-content-polisher— 仕上がり品質が低い時のSNS文磨き直し(オンデマンド)notion-saver— Notion保存代行- 長尺動画(>90秒)はこのスキル対象外(専任agentは2026-07-02廃止・必要時は都度依頼)
🔧 学習・改善
このスキル運用で発見した改善点は feedback_short_video_create.md に追記し、本SKILL.mdに反映。
特に以下の指標を月1で確認:
- 機械採点を通す前に目視した件数(目標: 0件/月)
- Notion保存先迷子件数(目標: 0件/月)
- 草川の途中差し戻し件数(目標: 月3件以下)
- SNS投稿文の追加修正発生率(目標: 月10%以下 = 7PFのうち平均0.7PF未満修正)
- 動画UP後のSNS展開完了までの所要時間(目標: 15分以内)
- X 140字制限違反件数(目標: 0件/月)
🆕 2026-05-21 更新メモ
SNS投稿文生成(Step 6 新規)を追加し、7ステップ → 8ステップに拡張。
従来は動画完成後に手動で各SNSの投稿文を考えていた → 平均 30〜60分の作業を構造化排除。
動画ホスト3PF(TikTok/Shorts/Reels)はキャプション、クロスポスト4PF(X/Threads/Facebook/LINE)は動画URL付きティーザーとして自動分岐。
🆕 2026-09-05 更新メモ(発信フロー構造改善 フェーズ2 C)
- Step5 に制作の固定順序(採寸→写真→レンダ→機械採点→目視1回→勝負所のみreviewer)を追加。目視は機械採点が通ってから1回。
- ルートB の nano-banana(AI画像生成)ルートを廃止。雰囲気カットは写真ストック→フラットイラスト情景。
nanobanana-prompt-designerは退避(~/Archive/_trash_pending_2026-09-05/)。 - 字幕帯座標は specs.json を 1240 に修正し検査器・README・agent節と整合。
🆕 2026-06-02 更新メモ(子ども医療費18歳ショート動画の制作から)
Step 5 を「nano-banana一択」→「2ルート分岐」に刷新。今回の最大の学び=説明図はAI画像生成ではなくHTML/CSS→PNGで作る。
- 経緯: nano-banana実写B-rollが「微妙」、純アイコン図は「情報少なすぎて何の画像か分からない」と本人NG。原因=AI画像は日本語/数字を崩し、写真は雰囲気だけ。
- 解決: print-designerと同じHTML→Chrome→PNG で、正確な日本語+数字+出典入りのニュースフリップ図を制作。崩れ・ガチャなし、微修正は即再レンダ。
- 草川ブランドカラー必須(ライム#c7ff4a/グリーン#1f5a3a・#0f3d27/クリーム#f3efe4)。初回アンバー+ネイビーで作って「草川カラー踏襲してない」と差し戻し→ブランド色は毎回厳守。
- Gemini API画像は無料枠0(limit:0)。「API無料で全自動」は誤案内だった。無料は手動(AI Studio/Geminiアプリ)、自動は課金。
- セリフ: ①コールドオープンのフック → ②名乗り(撮っている理由は書かない・2026-09-03廃止) → ③本論1メッセージ → ④結びの主張=どうしたいか(実現主体→要求先と要求内容→草川自身の意思。決意文句で固定しない) → ⑤コメント誘発。35〜50秒・目標45〜50秒(データ系で本論のビート数が多い回は
<!-- FORMAT-EXCEPTION: 尺=NN秒 / 草川承認 / 理由 -->を原稿に書けば≤60秒まで可。2026-08-05追加)。※「撮っている理由」ブロックは廃止(2026-09-03 草川指示)。 - 公選法: 告示前の決意表明OK/告示後の再投稿NG注記を保存ページに残す。
- スマホ編集前提 → 完成PNGを Driveミラー
📱動画素材/へコピーして phone-accessible に。 - 制作資産:
~/.claude/agents/knowledge/short_video_templates/insert_image_v1/(template_a/b/c+sample png)とdesign_system/short_video_templates/_starter_9x16.html。制作規範=同dir README.md(2026-05-27の雛形5枚は削除済み)。
🆕 2026-07-27 更新メモ(アーバンスポーツ署名 v3→v5.1 の改訂作業から)
新設: ## 🔁 改訂モード(Mode R)+起動条件とStep 1分岐に mode = "revise" を追加。
背景: 「子どもの居場所のショート動画の原稿なかったっけ?」という検索から始まり、そのまま5往復の改稿に入ったため、本スキルが最後まで一度も起動しなかった。結果すべて手作業になり、以下が発生した。
- 画像に誤情報が2版分残っていた —
b1_45percent.pngの「市内でいちばん、子どもが多い学区。」。セリフ側だけ直して画像を見ていなかった。実際は亀山中学校区1,209人(45.6%)が最多で、中部中学校区1,184人(44.6%)は2位 - 過去2版のfact-checkを通過していた誤り — 「44.6%」という数字の検算だけが行われ、他校区との全件突合が一度もされていなかった
- 同一フレーズがSNS5PFに散在 — 1箇所直しても他が旧版のまま
- 一括置換の二重適用 — 「どちらも、どちらも、目的は同じです」が発生
- 尺の見落とし — 加筆のたびに字数が増え、最終的に35〜45秒基準に対して69秒になった
この5つがそのまま Mode R のチェック項目になっている。
あわせて確立した数値: セリフの尺は 8.4字/秒 で計算する(v3実測から。578字→69秒)。