with one click
with one click
| name | release-zenn |
| description | MulmoScript から Zenn 記事を生成する。/release-script 完了後に実行。 |
| allowed-tools | Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion |
| argument-hint | <version> (例: 1.0.11) |
バージョン $ARGUMENTS の Zenn 記事を MulmoScript から生成する。
docs/release_notes/v$ARGUMENTS/release_v<version>_script.json が作成済みであることdocs/release_notes/v$ARGUMENTS/youtube_v$ARGUMENTS_ja.md と _en.md に YouTube URL が記録済みであることZENN_CONTENT_DIR が設定されていること(zenn-content リポジトリのパス)source .env 2>/dev/null || true
echo "${ZENN_CONTENT_DIR:?ZENN_CONTENT_DIR is not set}"
設定されていない場合は STOP してユーザーに設定を依頼する。
mulmo markdown docs/release_notes/v<version>/release_v<version>_script.json -o docs/release_notes/v<version>/output/
生成物: docs/release_notes/v<version>/output/release_v<version>_script.md
ls "$ZENN_CONTENT_DIR/articles/"*mulmocast-release*.md
最新の記事を読み込み、構造(フロントマター、:::message、見出し構成、動画リンク)をテンプレートとして使用する。
grep -A2 '## URL' docs/release_notes/v<version>/youtube_v<version>_ja.md
grep -A2 '## URL' docs/release_notes/v<version>/youtube_v<version>_en.md
URL が未登録の場合: ## URL セクションがない、または URL が空の場合は、「動画で見る」セクションにプレースホルダー((YouTube アップロード後に URL を追記))を記載して先に進む。ユーザーから URL を受け取った後に記事ファイルと YouTube メタデータファイルの両方を更新する。
mulmo markdown の出力を以下のルールで編集する(docs/mulmocast-article-guide.md 準拠):
<div style='display: flex; ...'>...</div> ブロックをすべて除去する。中の見出しの扱い:
| スライド種別 | 判別方法 | 見出しの扱い |
|---|---|---|
| タイトルスライド | # 🎉 MulmoCast v... を含む | 中の # 見出しを記事の h1 として残す |
| クロージングスライド | # Thank You! を含む | div ごと削除(ナレーションテキストのみ残す) |
| その他の markdown スライド | 上記以外 | ナレーションテキストと内容が重複する場合は div ごと削除 |
注意: 同じスライドが type: beat 参照で複数回出力される場合がある(例: タイトルスライドが2回)。重複する div はすべて削除する。
mulmo_credit.png を参照する画像行を除去する。
画像ディレクトリ名: release_v<version>_script(バージョンのドットをアンダースコアに変換)
変更前: 
変更後: 
Beat N ではなくファイル名ベースに変更する/images/release_v<version>_script/ファイル名.png 形式フロントマターの直後に以下を追加:
:::message
**この記事について**
この記事は、[MulmoCast](https://mulmocast.com)を活用して、MulmoScriptから動画とテキストを同時生成したガイドです。動画とテキストの両方で同じ内容をご覧いただけます。動画で見たい方は記事内のリンクからご覧ください。
:::
ナレーションの番号付け(「1:」「2:」「3:」等)を ## 1. 機能名 の見出しに変換し、本文側の 1: 2: 3: プレフィックスは削除する。
NG(変換漏れ):
## 1. 新しいAIモデル
1:19種類のAIモデルを新たに利用可能にしました。
OK(変換後):
## 1. 新しいAIモデル
19種類のAIモデルを新たに利用可能にしました。
過去のリリース記事でも変換漏れが発生していたので、保存前に grep -nE "^[1-9]:" <記事ファイル> を実行してプレフィックスが残っていないか確認すること。
記事末尾に YouTube リンクを追加:
## 動画で見る
**日本語版**
https://youtu.be/<JA_URL>
**英語版**
https://youtu.be/<EN_URL>
---
title: "MulmoCast v<version> リリース"
emoji: "🎉"
type: "idea"
topics: [mulmocast, <リリース固有のトピック3〜4個>]
published: true
publication_name: singularity
---
重要: cp images/*.png で全コピーしてはいけない。Markdown 一覧スライドへの構成変更などで「ソースには残っているが記事では使わない」画像が必ず混じるため、未使用画像が zenn-content 側に堆積する。記事で実際に参照されているファイルだけコピーすること。
ARTICLE="$ZENN_CONTENT_DIR/articles/<YYYY-MM-DD>-mulmocast-release_v<version>.md"
DEST="$ZENN_CONTENT_DIR/images/release_v<version>_script/"
mkdir -p "$DEST"
# 記事内の /images/release_v<version>_script/<ファイル名> 参照を抽出してコピー
grep -oE "/images/release_v<version>_script/[^)\"' ]+" "$ARTICLE" \
| awk -F/ '{print $NF}' | sort -u \
| while read name; do
cp "docs/release_notes/v<version>/images/$name" "$DEST"
done
# 確認: コピー後の DEST に未使用ファイルが残っていないか
ls "$DEST"
すでに過去リリースで未使用画像をコピーしてしまっている場合は、削除してから本ステップを再実行する。
date '+%Y-%m-%d' # ファイル名用の日付を取得
保存先: $ZENN_CONTENT_DIR/articles/<YYYY-MM-DD>-mulmocast-release_v<version>.md
バージョンのドットをアンダースコアに変換(例: 1.0.11 → v1_0_11)。
zenn-content ディレクトリでプレビューサーバーを起動する:
cd "$ZENN_CONTENT_DIR" && npx zenn preview
プレビュー URL をユーザーに伝え、ブラウザで確認してもらう:
http://localhost:8000/articles/<YYYY-MM-DD>-mulmocast-release_v<version>
ユーザーの確認が取れるまで待つ。修正依頼があれば対応する。
生成した記事のファイルパス、コピーした画像数を報告する。
ZENN_CONTENT_DIR は環境変数から取得 — ハードコード禁止mulmo markdown の出力をベースに編集 — ゼロから書かないリリースノートとX投稿ドラフトからMulmoScript(リリースノート動画用)を生成する。/release-xpost 完了後に実行。
X投稿ドラフトから Discord 向けメッセージを生成し webhook で投稿する。/release-xpost 完了後に実行。
リリースノート作成。前回リリース以降の全PRを調査し、PR要約とリリースノートを生成する。
リリースワークフロー全体をガイド。ドラフト一括作成 → リリース PR マージ → 公開アクション一括実行 → 後処理の順に進行。
QA テストスイートを作成する。Playbook の知見を活用して CDP 経由の Playwright テストを生成。
YouTube アップロード用のメタデータ(タイトル・説明文)を生成する。/release-script 完了後に実行。