Communityコーディング&開発github.com

ブログペルソナ - ライティングボイス管理

NNGroupの4次元トーンフレームワークとCMIブランドボイスチャートに基づいて、ライティングペルソナを作成、保存、適用します。ブログ記事全体で一貫したボイスを維持します。

ブログペルソナ - ライティングボイス管理 とは?

このスキルは、ブログ記事のための執筆ペルソナ(ライティングボイス)を体系的に管理するためのツールです。NNGroupの4次元トーンフレームワーク(funny_serious, formal_casual, respectful_irreverent, enthusiastic_matter_of_fact)とCMIブランドボイスチャートを基盤とし、ブランドの一貫したトーンとスタイルを定義・適用します。ユーザーは6ステップの対話式インタビューを通じて、ブランド基本情報、トーン次元、語彙レベル、読みやすさ基準、Do's and Don'tsリスト、サマリーラベルを設定し、ペルソナをJSONファイルとして保存できます。保存したペルソナは、blog-writeやblog-rewriteスキルと連携し、記事生成前の制約注入、生成中のルール適用、生成後のバリデーションを自動実行します。これにより、複数のライターや長期間にわたるブログ運営でも、ブランドボイスをぶれることなく維持できます。主な対応プラットフォームはClaude CodeやCursorなどのAIエージェント環境です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-persona

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ブログペルソナ - ライティングボイス管理 は何をしますか?

NNGroupの4次元トーンフレームワークとCMIブランドボイスチャートに基づいて、ライティングペルソナを作成、保存、適用します。ペルソナにより、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(面白い-真面目)面白い真面目「正直、利用規約なんて誰も読まないよね」「契約内容を理解することはビジネスを守ることにつながります」
formal_casual(フォーマル-カジュアル)フォーマルカジュアル「謹んでお知らせ申し上げます」「ねえ、出荷したよ!」
respectful_irreverent(敬意-不遜)敬意不遜「ご辛抱いただきありがとうございます」「そう、あの古いやり方は壊れてたんだ」
enthusiastic_matter_of_fact(熱狂的-事実重視)熱狂的事実重視「これですべてが変わります!」「こちらが結果です。」

ユーザーがわからない場合のデフォルト値: [0.6, 0.5, 0.3, 0.5](やや真面目、バランスの取れた形式、敬意、バランスの取れた熱意)

ステップ3: ライティングルール

まずユーザーに 語彙レベル を選んでもらい、それに応じて読みやすさ帯域を自動提案します(ユーザーは上書き可能)。

設定質問内容デフォルト
語彙レベル消費者向け、プロフェッショナル向け、技術向けプロフェッショナル向け
読みやすさ帯域レベルから自動入力(以下の表参照)グレード8-10
文の平均長1文あたりの平均単語数18
文の長さの標準偏差文の長さのばらつき6
短縮形の頻度0.0(不使用)~1.0(常に使用)0.6
受動態の最大割合受動態構文の割合上限10%

ステップ4: Do's and Don'ts(CMIブランドボイスチャート)

各リストに3~5項目を求めます。トーン次元に基づいたスターター例を提供します。

Doの例: 「主張をデータで裏付ける」「読者を「あなた」と呼びかける」「質問や統計で書き出しを始める」

Don'tsの例: 「定義せずに専門用語を使わない」「「There is/There are」で文を始めない」「「ゲームチェンジャー」のような決まり文句を使わない」

ステップ5: サマリーラベルの設定

ブログ記事のまとめ/ポイント枠に使うラベルを指定します。ユーザーに1つ選んでもらいます:

  • Key Takeaways(デフォルト)
  • The Bottom Line
  • What You'll Learn
  • TL;DR
  • Quick Summary
  • In a Nutshell
  • カスタムラベル

ステップ6: ボイスサンプル(任意)

ユーザーが希望するボイスを体現する既存コンテンツのURL(1~3件)があるか尋ねます。URLをペルソナに保存して将来参照できるようにします。URLが提供された場合、各URLを読み取り、以下を抽出します:

  • 平均文長
  • 短縮形の頻度
  • トーン次元の推定値
  • 語彙レベル

抽出値をペルソナ設定と比較し、不一致があればフラグを立てます。

保存

完成したペルソナをJSONとして以下に書き込みます: skills/blog/references/personas/<name>.json

ファイル名はケバブケースを使用します(例: acme-saas.json)。

ペルソナプロフィールスキーマ

{
  "name": "acme-saas",
  "description": "B2Bマーケティングコンテンツ向けプロフェッショナルSaaSボイス",
  "brand": "Acme Corp",
  "industry": "SaaS",
  "audience": "ミッドマーケット企業のマーケティングマネージャー",
  "mission": "マーケティングチームのレポート自動化を支援する",
  "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": [
    "主要な主張をデータで裏付ける",
    "読者に「あなた」と直接呼びかける",
    "セクションは実用的な洞察で始める"
  ],
  "dont": [
    "文脈なしでバズワードを使わない",
    "30単語を超える文を書かない",
    "「Acmeでは」で書き出さない"
  ]
}

語彙レベル別の読みやすさ帯域

レベルフレッシュグレードフレッシュリーディングイーズ典型的な用途
Consumer(消費者向け)6-860-80健康、ライフスタイル、個人金融
Professional(プロフェッショナル向け)8-1050-60B2B、マーケティング、マネジメント
Technical(技術向け)10-1230-50エンジニアリング、医療、法律

ユーザーがレベルを選択したら、読みやすさフィールドを自動入力します。ユーザーが説明コンテンツ用に技術向け語彙×消費者向け読みやすさなど、標準以外の組み合わせを希望する場合は、上書きを許可します。

blog-write および blog-rewrite との連携

ペルソナがアクティブな場合(/blog persona use <name> で設定)、ライターエージェントはペルソナJSONを読み込み、生成時に以下の制約を適用します:

  1. 生成前 - ペルソナを読み込み、トーン次元とスタイルルールをブログライターエージェントのシステムプロンプトに注入します。
  2. 生成中 - ライターはDo/Don'tルールに従い、目標の文長平均/標準偏差を目指し、指定された頻度で短縮形を使用します。
  3. 生成後バリデーション - 出力をペルソナ制約に対してチェックします:
    • 文長分布が目標平均の1標準偏差以内であること
    • 読みやすさスコアが指定されたグレード帯域内であること
    • 受動態の割合が上限未満であること
    • Don'tルールに違反していないことをパターンマッチングで確認

バリデーションに失敗した場合、該当する違反をフラグし、修正案を提示します。

リストコマンド

skills/blog/references/personas/*.json をグロブし、以下のテーブルを表示します:

ペルソナ業界オーディエンス語彙レベル
acme-saasSaaSマーケティングマネージャープロフェッショナル

ペルソナが存在しない場合、作成を促します。

表示コマンド

指定されたペルソナJSONを読み取り、すべてのトーン次元、スタイルルール、Do/Don'tリストを含む整形されたサマリーとして表示します。

使用コマンド

ペルソナJSONを読み取り、アクティブ化を確認します。適用される主要な制約のサマリーを表示します。ペルソナは現在の会話セッション中アクティブ状態を維持します。blog-write と blog-rewrite はコンテンツ生成前にアクティブなペルソナを確認します。

エラーハンドリング

  • 無効なトーン値: ユーザーが0.0~1.0の範囲外の値を入力した場合、最も近い有効な境界にクランプし、警告します。
  • 取得不能なボイスサンプル: voice_samplesのURLがエラーを返した場合、スキップし、プロフィールにサンプルが利用不可であったことを記録します。
  • 空のペルソナディレクトリ: 保存済みペルソナがない状態でlistまたはshowを実行した場合、最初に作成するよう促します。
  • 名前の競合: 作成時に既存のペルソナ名と重複した場合、上書きするか別の名前を選択するか尋ねます。
  • 不正なJSON: ペルソナファイルが破損している場合、エラーを報告し、インタビューから再作成するオプションを提供します。

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

関連スキル