blog-persona について
blog-personaは、ブログ執筆者やチーム向けの文体管理スキルです。ブランドの文体プロファイルを作成・保存し、blog-writeとblog-rewriteにルールを適用します。
主な機能
- 016段階の対話によるプロファイル作成
- 024つのトーン軸の設定
- 03語彙レベルと読みやすさの設定
- 04執筆ルールと文体サンプルの記録
- 05プロファイルの一覧・表示・有効化
活用シーン
- 01ブログ記事のブランド文体を統一
- 02文体プロファイルのトーンと読みやすさを設定
- 03保存済みの文体ルールをブログ生成に適用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill blog-personaインストール後、Claude Code で/blog-personaを入力して読み込まれたか確認します。
詳細
ブログのペルソナ - 文体の管理
NNGroup の 4 次元トーンフレームワークと CMI Brand Voice Chart に基づいて、文体のペルソナを作成、保存、適用します。ペルソナによって、blog-write と blog-rewrite が作成するすべてのブログコンテンツで、一貫した文体を維持できます。
コマンド
| コマンド | 用途 |
|---|---|
/blog persona create | 対話形式のインタビューで新しいペルソナを作成します |
/blog persona list | 保存済みのすべてのペルソナを表示します |
/blog persona use <name> | 現在のセッションで使用するペルソナを設定します |
/blog persona show <name> | ペルソナの詳細なプロフィールを表示します |
作成ワークフロー
6 ステップの対話形式のインタビューを実施します。各ステップで質問し、回答を待ってから次へ進みます。
ステップ 1:ブランドの基本情報
ユーザーに次の情報を尋ねます。
- ブランド名 - 企業または個人のブランド
- 業界 - 主な業種(例:SaaS、医療、金融、教育)
- ターゲットオーディエンス - ブログの読者(役割、経験レベル、目標)
- 一文で表したブランドのミッション - ブランドが人々のどのような取り組みを支援するか
ステップ 2:トーンの次元(NNGroup フレームワーク)
各次元を 0.0 から 1.0 のスライダーで示します。両端の意味を例とともに説明します。
| 次元 | 0.0 の端 | 1.0 の端 | 0.0 の例 | 1.0 の例 |
|---|---|---|---|---|
| funny_serious | 面白い | 真面目 | "Let's be real, nobody reads Terms of Service" | "Understanding legal agreements protects your business" |
| formal_casual | フォーマル | カジュアル | "We are pleased to announce" | "Guess what - we shipped it!" |
| respectful_irreverent | 礼儀正しい | 不遜 | "We appreciate your patience" | "Yeah, that old way was broken" |
| enthusiastic_matter_of_fact | 熱意がある | 事実に即した | "This changes everything!" | "Here are the results." |
ユーザーが迷っている場合のデフォルト値:[0.6, 0.5, 0.3, 0.5](やや真面目、フォーマルさは中間、礼儀正しい、熱意は中間)。
ステップ 3:執筆ルール
まず語彙レベルを選んでもらい、それに合った読みやすさのレベルを自動で提案します(ユーザーは変更できます)。
| 設定 | 尋ねる内容 | デフォルト |
|---|---|---|
| 語彙レベル | コンシューマー向け、プロフェッショナル向け、または技術者向け | プロフェッショナル向け |
| 読みやすさのレベル | 語彙レベルに基づき自動入力(下表を参照) | Grade 8-10 |
| 平均文長 | 1 文あたりの平均単語数 | 18 |
| 文長の標準偏差 | 文の長さのばらつき | 6 |
| 短縮形の使用頻度 | 0.0(使用しない)から 1.0(常に使用する) | 0.6 |
| 受動態の最大割合 | 受動態の上限割合 | 10% |
ステップ 4:すべきこと、避けるべきこと(CMI Brand Voice Chart)
各リストについて 3~5 項目を尋ねます。トーンの次元に基づいた例を提示します。
「すべきこと」の例:「主張の裏付けにデータを使う」、「読者に you と呼びかける」、 「質問または統計データで書き始める」
「避けるべきこと」の例:「専門用語を定義せずに使わない」、「There is/There are で文を始めない」、「game-changer のような決まり文句を使わない」
ステップ 5:要約ラベルの設定
ブログ記事の要約/要点ボックスに使用するラベルです。次の中から選んでもらいます。
- Key Takeaways(デフォルト)
- The Bottom Line
- What You'll Learn
- TL;DR
- Quick Summary
- In a Nutshell
- カスタムラベル
ステップ 6:文体のサンプル(任意)
希望する文体を示す既存コンテンツの URL が 1~3 件あるか尋ねます。URL は今後参照できるようペルソナに保存します。URL が提供された場合は、それぞれを読み、次の項目を抽出します。
- 平均文長
- 短縮形の使用頻度
- トーンの次元の推定値
- 語彙レベル
抽出した値とペルソナの設定を比較し、不一致があれば示します。
保存
完成したペルソナを JSON として次の場所に書き込みます。
skills/blog/references/personas/<name>.json
ファイル名には kebab-case を使用します(例:acme-saas.json)。
ペルソナプロフィールのスキーマ
{
"name": "acme-saas",
"description": "Professional SaaS voice for B2B marketing content",
"brand": "Acme Corp",
"industry": "SaaS",
"audience": "Marketing managers at mid-market companies",
"mission": "Help marketing teams automate reporting",
"tone_dimensions": {
"funny_serious": 0.7,
"formal_casual": 0.4,
"respectful_irreverent": 0.2,
"enthusiastic_matter_of_fact": 0.5
},
"readability": {
"flesch_grade_min": 8,
"flesch_grade_max": 10,
"flesch_ease_min": 50,
"flesch_ease_max": 60
},
"style": {
"sentence_length_mean": 18,
"sentence_length_std": 6,
"contraction_frequency": 0.6,
"passive_voice_max_pct": 10,
"vocabulary_tier": "professional",
"summary_label": "Key Takeaways"
},
"voice_samples": [],
"do": [
"Use data to back every major claim",
"Address the reader directly as you",
"Lead sections with actionable insight"
],
"dont": [
"Don't use buzzwords without context",
"Don't write sentences longer than 30 words",
"Don't open with We at Acme"
]
}
語彙レベル別の可読性基準
| レベル | Flesch グレード | Flesch 読みやすさ | 主な用途 |
|---|---|---|---|
| 一般向け | 6-8 | 60-80 | 健康、ライフスタイル、個人金融 |
| プロフェッショナル | 8-10 | 50-60 | B2B、マーケティング、マネジメント |
| 技術向け | 10-12 | 30-50 | エンジニアリング、医療、法律 |
ユーザーがレベルを選ぶと、可読性の各フィールドに値を自動入力します。標準的でない組み合わせ(たとえば、解説コンテンツ向けに、一般向けの可読性で専門用語を使う場合)にしたい場合は、値を上書きできるようにします。
blog-write および blog-rewrite との連携
ペルソナが有効な場合(/blog persona use <name> 経由)、ライターエージェントはペルソナの JSON を読み込み、生成中にこれらの制約を適用します。
- 生成前 - ペルソナを読み込み、トーンの各要素とスタイルルールを blog-writer エージェントのシステムプロンプトに追加します。
- 生成中 - ライターは「すること/しないこと」のルールに従い、文の長さの平均と標準偏差を目標にし、指定された頻度で短縮形を使います。
- 生成後の検証 - 出力がペルソナの制約に合っているか確認します:
- 文の長さの分布が目標平均の標準偏差 1 以内であること
- 可読性スコアが指定されたグレードの範囲内であること
- 受動態の割合が上限未満であること
- パターンマッチングで「しないこと」のルール違反が見つからないこと
検証に失敗した場合は、具体的な違反を示し、修正案を提示します。
List コマンド
skills/blog/references/personas/*.json を glob で検索し、テーブルを表示します:
| ペルソナ | 業界 | 対象読者 | 語彙 |
|---|---|---|---|
| acme-saas | SaaS | マーケティングマネージャー | プロフェッショナル |
ペルソナが存在しない場合は、作成するようユーザーに促します。
Show コマンド
指定されたペルソナの JSON を読み込み、トーンの各要素、スタイルルール、「すること/しないこと」のリストをすべて含む、整形された概要を表示します。
Use コマンド
ペルソナの JSON を読み込み、有効化を確認します。適用される主な制約の概要を表示します。ペルソナは現在の会話セッション中、有効なままになります。 blog-write および blog-rewrite は、コンテンツを生成する前に有効なペルソナを確認します。
エラー処理
- 無効なトーン値:ユーザーが 0.0~1.0 の範囲外の値を指定した場合、最も近い有効な境界値に丸めて警告します
- アクセスできない音声サンプル:voice_samples 内の URL がエラーを返した場合はスキップし、サンプルを利用できなかったことをプロフィールに記録します
- ペルソナディレクトリが空:保存済みのペルソナがない状態で list または show を実行した場合は、まずペルソナを作成するようユーザーに促します
- 名前の競合:作成時にペルソナ名がすでに存在する場合は、上書きするか別の名前を選ぶかを尋ねます
- 不正な JSON:ペルソナファイルが破損している場合はエラーを報告し、インタビューから再作成することを提案します