name: community-post
description: "Use when YouTube コミュニティ投稿用テキストを生成し、クリップボードコピーと YouTube Studio 起動まで行いたいとき。固定テンプレ運用(動画 1 本 = 投稿 1 本)の Flow365 TTP。「コミュニティ投稿」「community post」「投稿準備」「Studio で投稿」「コミュニティタブ」など、動画公開と前後する投稿準備に関わる場面で使用すること。/video-upload の最終ステップから自動で呼ばれる。"
Overview
config/channel/community.json の固定テンプレを展開し、対象コレクションの 20-documentation/community-post.txt に保存、クリップボードへコピー、YouTube Studio のコミュニティ投稿作成ページを開きます。動画添付と投稿ボタン押下はユーザーが Studio 上で手動実行します。
制約・前提
- macOS 専用:
pbcopy/openを使用。cross-platform 化は YAGNI で見送り(follow-up 候補)。失敗時は stdout フォールバックで運用継続できるようにする。 - YouTube Data API にコミュニティ投稿作成エンドポイントは存在しない: テキスト準備と Studio 起動までを自動化し、添付・投稿は Studio 上で手動。
- 完全固定テンプレ運用: バリエーション / 多言語 / Studio 自動入力 / 動画 URL 埋め込みは Non-goals。テンプレ本文に変数展開は行わない(ブランドボイスの反復刷り込みが狙い)。
- 設定アクセス: 本スキルでは
config/channel/community.jsonをpython3 -c "import json; ..."で直接読む(簡素化)。load_config()への統合は follow-up(CLAUDE.md 開発規約に追従する形で別 issue 化)。 config/channel/community.jsonが存在すること。雛形はexamples/channel_config.example/community.example.json。
When to Use
- コレクションのアップロード完了後、コミュニティ投稿を貼りたいとき
- 過去動画に紐づけて単発で投稿したいとき(URL 指定)
/video-uploadの最終ステップから自動で呼ばれる
Quick Reference
| 引数 | 説明 | 例 |
|---|---|---|
| 動画 URL | テキスト生成のみ(コレクション特定不可なので保存は省略) | /community-post https://youtu.be/abc123 |
| コレクションパス | テキスト生成 + 20-documentation/community-post.txt 保存 |
/community-post collections/live/20260511-xxx |
| 引数なし | collections/live/ 配下から最新(YYYYMMDD-* の辞書順最大)を自動検出 |
/community-post |
Instructions
Step 1: 引数解析
$ARGUMENTSがhttpで始まる → URL モード$ARGUMENTSがディレクトリパス → コレクションモード$ARGUMENTSが空 → 自動検出モード(collections/live/配下のYYYYMMDD-*ディレクトリのうち辞書順最大のものを選択)
if [ -z "$ARGUMENTS" ]; then
COLLECTION_PATH=$(ls -d collections/live/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1)
if [ -z "$COLLECTION_PATH" ]; then
echo "エラー: collections/live/ に公開済みコレクションがありません。"
echo "まず /video-upload を実行してコレクションをアップロードしてください。"
exit 1
fi
MODE="collection"
elif [[ "$ARGUMENTS" == http* ]]; then
MODE="url"
VIDEO_URL="$ARGUMENTS"
else
MODE="collection"
COLLECTION_PATH="$ARGUMENTS"
fi
Step 2: テンプレ読み込み
config/channel/community.json から template と studio_url を読み込む。
TEMPLATE=$(python3 -c "import json; print(json.load(open('config/channel/community.json'))['template'])")
STUDIO_URL=$(python3 -c "import json; print(json.load(open('config/channel/community.json'))['studio_url'])")
ファイルが存在しない場合は examples/channel_config.example/community.example.json を雛形として案内し、エラー終了する。
Step 3: テキスト保存(コレクションモード / 自動検出モードのみ)
URL モードでは保存をスキップ。それ以外では Step 1 で確定した $COLLECTION_PATH を使う:
mkdir -p "$COLLECTION_PATH/20-documentation"
python3 -c "import json, sys; open(sys.argv[1] + '/20-documentation/community-post.txt', 'w').write(json.load(open('config/channel/community.json'))['template'])" "$COLLECTION_PATH"
Step 4: クリップボードコピー
python3 -c "import json; print(json.load(open('config/channel/community.json'))['template'], end='')" | pbcopy
pbcopy が失敗した場合(非 macOS など)はテンプレを stdout に出力してユーザーに手動コピーを促す。
Step 5: Studio 起動
open "$STUDIO_URL"
open が失敗した場合は $STUDIO_URL を stdout に出力してユーザーに手動オープンを促す。
Step 6: ユーザーへの案内
下記を提示する:
- テンプレをクリップボードにコピー済み
- Studio で「投稿を作成」→ テキスト貼り付け
- 動画を添付(直近アップロード動画を選択)
- 投稿ボタンで公開
エラーハンドリング
| 状況 | 対応 |
|---|---|
community.json が存在しない |
エラー終了し、examples/channel_config.example/community.example.json を雛形として案内する |
pbcopy 失敗 |
テンプレを stdout に出力 |
open 失敗 |
URL を stdout に出力 |
引数なし & collections/live/ が空 |
エラー終了し、/video-upload の実行を促す |
Non-goals(YAGNI)
- バリエーション生成・A/B テスト
- 多言語投稿(JP / EN 切り替え)
- Studio 上での自動入力(DOM 操作・ヘッドレスブラウザ)
- テンプレ内への動画 URL / タイトル / サムネ等の変数展開
- cross-platform 対応(pbcopy / open 以外の clipboard / open 手段)
これらが必要になったら別 issue で扱う。固定テンプレ運用が崩れると Flow365 TTP の前提(ブランドボイス反復刷り込み)が壊れるため、安易な拡張は避ける。
Cross References
/video-upload— アップロード完了後の最終ステップから本スキルを呼び出す/playlist— プレイリスト assign は別経路