mcpField
C
codeck-speech

codeck-speech

github.com/hiyeshuドキュメント199187 回インストール12 週間前に更新
リポジトリ

codeck-speech について

codeck-speechは、スライドごとの読み上げ用台本を作成し、スライドのフラグメントとスピーカーノートを同期するcodeckのスキルです。デッキの構成や進行に沿ったトークを準備する登壇者向けです。

主な機能

  1. 01スライドごとの台本作成
  2. 02フラグメントに沿った構成
  3. 03HTMLへの発表者ノート同期
  4. 04スタイルと所要時間の選択
  5. 05時間と語数の見積もり

活用シーン

  1. 01完成したデッキの読み上げ台本を準備
  2. 02段階的なスライド表示に話を合わせる
  3. 03発表者モード用のノートを追加
  4. 04所要時間に合わせて台本を見積もり・調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hiyeshu/codeck --skill codeck-speech

インストール後、Claude Code で/codeck-speechを入力して読み込まれたか確認します。

詳細

codeck speech — @speech レーン

@speech は、話す内容、プレゼンターのリズム、フラグメントと同期したノートを担当します。

書き込み範囲:

  • $DECK_DIR/speech.md への書き込みが可能です
  • $DECK_DIR/slides.html の HTML data-notes を更新できます
  • $DECK_DIR/roles/speech.md、$DECK_DIR/tasks/tasks.md、$DECK_DIR/channel/YYYY-MM-DD.md を更新できます
  • deck.md、DESIGN.md、custom.css、review.md、エクスポートファイルを書き換えてはいけません
  • コンテンツの競合は $DECK_DIR/threads/threads.md の提案として記録します

ロールの有効化

$DECK_DIR/diagnosis.md を読みます。speech ロールが推奨されている場合は、それを使用します。そうでない場合は、分野と対象者に応じてコーチを選びます。

技術系 → Feynman:複雑な内容を分かりやすくし、たとえ話で橋渡しする

ビジネス系 → Jobs:期待を高め、「もうひとつだけ」という展開を盛り込む

学術系 → Hans Rosling:データに物語を語らせる

セットアップ

DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
  for d in \
    "${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
    "$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
    "$HOME/.agents/skills/codeck" \
    "$HOME/.codex/skills/codeck" \
    "$HOME/.claude/skills/codeck"; do
    if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
  done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"

以下を読みます:

  • MEMORY.md — 既知のスタイル、所要時間、言語、デフォルト、未解決のスレッド
  • tasks/tasks.md / threads/threads.md — 対応中のチケットと未解決の判断事項のみ
  • HTML(最新の *-r*.html)— 実際のスライド内容
  • deck.md — 構成、流れ、ユーザーの意図。古い outline.md は無視します
  • DESIGN.md / roles/design.md — ビジュアルの意図と選択された骨組み(スピーチのリズムはビジュアルのリズムに合わせます)

HTML も deck.md もない場合は、まず /codeck を実行して不足しているデッキの状態を構築します。

deck.md だけがある場合は、deck.md に基づいて作成します。スクリプトは最終的なビジュアルではなく、構成に基づいていることを明記してください。

履歴のデバッグをする場合を除き、channel/YYYY-MM-DD.md は読まないでください。

スマートスキップ: ユーザーの指示、MEMORY.md、未解決の threads/threads.md の行、deck.md、または既存の speech.md にスタイルと所要時間がすでに指定されている場合は、Decision Ask をスキップします。

書き始める前に、作業チケットを引き受けます。

@orchestrator
Owner: @speech. Task: create presenter script and sync data-notes.

@speech
I claim the speech pass. I will write `speech.md`, sync fragment notes, and leave source conflicts in threads.

やり取りを今日のチャンネルファイルに追記し、tasks/tasks.md を更新します。

質問

スピーチスタイルの確認は、/codeck において Decision Ask が許可される場面のひとつです。

共通の /codeck Decision Ask Policy を使用します。スタイルまたは所要時間が不明な場合に限り、D-YYYYMMDD-NN 形式の判断事項をひとつ作成します。ユーザーがフォームに記入するのではなく、スピーチの形を決められるよう、両方をひとつの選択肢にまとめます。

codeck needs the speech shape.

Current read: {deck audience and rhythm}.

I suggest {recommended package} because {reason}.

A) {style + duration package} (recommended)
B) {contrasting style + duration package}
C) {deeper/shorter package}

デッキに手がかりがない場合は、以下のデフォルトを使用します。

  • A) TED — 会話調、ストーリー中心、間を大切にする

  • B) フォーマル — 構成を重視し、正確な言葉遣い

  • C) カジュアル — 自然な話し方。ユーモアも可

  • A) 5 分 — 短いプレゼン、約 1000 語

  • B) 15 分 — 標準、約 3000 語

  • C) 30 分以上 — 詳細な解説、約 6000 語

判断事項がブロッキングでなく、ユーザーから回答がない場合は、推奨パッケージを使用し、MEMORY.md に assumed default と記録します。スピーチの確定がブロッキングで、構造化された AskUser UI が利用できない場合は、threads/threads.md で未解決のままにし、speech.md の作成前に停止します。

最終的なスタイルと所要時間を speech.md のフロントマターと MEMORY.md に記録します。

生成

書き始める前に、フラグメントマップを作成します。 HTML の各スライドについて、スライド番号、タイトル、フラグメント数(data-f 要素)を一覧にします。このマップによってスピーチの構成が決まります。フラグメントのあるスライドには ### [on enter] と ### [fragment N] のセクションを設け、フラグメントのないスライドはひとつのブロックにまとめます。この手順を省略してはいけません。

読み上げやすく、完全な台本をページごとに作成します。

ルール
  1. スライドごとにひとつのセクション — デッキと一致させます
  2. つなぎ — ページ間を自然につなぎます
  3. 舞台指示 — 台本と同じ言語で舞台指示を書きます。英語の場合は [pause 2s]、[slow down]、[look at audience] を使用します。ほかの言語の場合は、発表中に話者が言語を切り替えなくて済むよう、舞台指示も翻訳します
  4. 語数 — 中国語は 1 分あたり約 200 語、英語は 1 分あたり約 130 語
  5. 出典に基づく — データを捏造しません
  6. 印象的な導入 — ストーリー、データ、または問いかけを使います
  7. 印象的な締めくくり — 冒頭への呼応、または行動喚起で締めます
スタイルメモ

TED:「あなた」と「私たち」を使い、短文と長文を織り交ぜます。重要なポイントの後に間を置き、冒頭を反響させる形で締めくくります。

フォーマル: 完全文で書き、論理的に展開します。最後に要約と今後の展望を述べます。

カジュアル: 口語調で、自虐も可。くだけたつなぎ言葉を使い、意外性のある形で締めくくります。

時間配分

スライドタイトル単語数目安
1.........

セクションが時間配分を超える場合は、別の質問をせず、最終原稿を書く前にその場で短くしてください。

HTML の data-notes を書き戻す(フラグメントと同期)

エンジンの buildNotes() は、プレゼンターが進行するたびに、スライドの data-notes と表示中の各フラグメントの data-notes を連結します。これを使って、スピーチのリズムをフラグメントのリズムに合わせます。

仕組み
  1. スライドのフラグメントを読む — すべての data-f="N" 要素を見つけ、表示順を確認します
  2. スピーチをセグメントに分ける — スライド表示時と各フラグメントに対応するセグメントを作ります
  3. 各ステップにノートを割り当てる:
    • スライドの data-notes → スライドが最初に表示されたとき(フラグメントが表示される前)に話す内容
    • data-f="1" 要素の data-notes → フラグメント1が表示されたときに話す内容
    • data-f="2" 要素の data-notes → フラグメント2が表示されたときに話す内容
    • …以降も同様です
例

スライド3のスピーチ:

「codeck を支える3つのアイデアについてお話しします。[pause 2s] まず、ルールではなく人を採用します。[pause] 次に、同型マッピングです。[pause] 最後に、スキーマの上限がありません。」

スライド3には data-f="1"、data-f="2"、data-f="3" があります:

<section class="slide" data-notes="Let's talk about the three ideas behind codeck. [pause 2s]">
  <h2 data-f="1" data-notes="First, it recruits people, not rules. [pause]">People, not rules</h2>
  <p data-f="2" data-notes="Second, isomorphic mapping. [pause]">Isomorphic mapping</p>
  <p data-f="3" data-notes="Third, no schema ceiling.">No schema ceiling</p>
</section>

プレゼンターがボタンを3回押します。ノートは段階的に増えていきます:

  • ステップ0:「3つのアイデアについてお話しします…」
  • ステップ1:+「まず、人を採用します…」
  • ステップ2:+「次に、同型マッピングです…」
  • ステップ3:+「最後に、スキーマの上限がありません。」
ルール
  • スライドにフラグメントがない場合は、スピーチ全文をスライドの data-notes に入れます
  • data-notes 属性値内の引用符は HTML エスケープします
  • 舞台指示([pause]、[slow down] など)はノートに残します
  • 各セグメントだけで意味が通るようにします。プレゼンターが各ステップで新しく表示された内容を読み上げます
  • スピーチのセグメント数をステップ数(1 + フラグメント数)に合わせます

出力:$DECK_DIR/speech.md

---
style: "{style}"
duration: "{target}"
totalEstimate: "{estimate}"
---

# Speech: {topic}

---

## Slide 1: {title}


{verbatim speech text}

[pause 2s]

---

## Slide 2: {title}


### [on enter]

{what to say when slide appears, before any fragment}

### [fragment 1]

{what to say when fragment 1 reveals}

### [fragment 2]

{what to say when fragment 2 reveals}

### [fragment 3]

{what to say when fragment 3 reveals}

---

完了

書き込み後:

  1. MEMORY.md の Active Context、Latest Channel Summary、Task Index、Artifacts を更新します。
  2. tasks/tasks.md の @speech タスクを完了としてマークします。
  3. 原稿作業で内容上の問題が明らかになった場合は、threads/threads.md に追加します。
  4. 今日のチャンネルファイルに引き継ぎ内容を追記します。

原稿の中で最も印象に残る場面をひとつ挙げてください。最も強く響くセリフや間を選びます。

codeck のスピーチが完了しました。

@speech speech.md を作成し、フラグメントのノートを同期して、スピーチの構成をメモリに記録しました。

最も印象に残る場面:{スライド N — 何が起き、なぜ効果的なのか。例:「スライド4、質問の後の3秒の沈黙。聴衆があなたの話を聞く価値があるかを決めるのは、その沈黙の時間です。」}

{1行 — 準備状況の評価}

出力:$DECK_DIR/speech.md + HTML の data-notes を更新済み デッキで P を押すと、発表者モードでスクリプトを確認できます。

エクスポート:/codeck export。概要:/codeck。

コメント