visant-copy について
Visant のプロジェクトと他のリポジトリ向けのコピー作成・レビュー用スキルです。ブラジルポルトガル語の文体、リント規則、JSON ベースの運用とコンポーネント内テキストの手順を定めます。
主な機能
- 01コピーのファイルとコンポーネントを検査
- 02文体と句読点の規則を適用
- 03複数ファイル間の重複を検出
- 04JSON コピーのパイプラインに対応
- 05修正と提案を分けて提示
活用シーン
- 01納品前の UI テキスト確認
- 02プロジェクト内の重複コピー検索
- 03Visant の JSON パイプラインでの編集
- 04文言変更案のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pedrojaques99/ visant-skills-public --skill visant-copyインストール後、Claude Code で/visant-copyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cases.mdenglish.mdpipeline.mdvoice.mdscripts/copy-lint.mjsscripts/fixtures/clean-code.tsxclean-docs.mddirty.tsx詳細
Visant のコピー
ここには 2 つの内容があります。Visant のコピーの文体(どのリポジトリでも有効)と、テキストの置き場所によって異なる運用方法です。以下の文体ガイドはブラジルポルトガル語向けです。英語のコピーについては english.md をご覧ください。リンターはすべての入力に対して、ポルトガル語と英語のルールセットを実行します。
- リポジトリで Visant のパイプラインを使用している場合(ルートにある
copy*.jsonと、package.json内のcopy:build/copy:checkスクリプト):JSON が SSoT で、HTML は生成されたビューです。そのため、.html内のテキストを直接編集しないでください。「リポジトリで Visant のパイプラインを使用している場合」をご覧ください。 - それ以外のリポジトリ(コンポーネント内のコピー、
.md、エクスポートした CMS):コンポーネントが SSoT で、同じ文が 4 つのファイルに重複するリスクがあります。
テキストに手を加える前に、どちらに該当するか確認してください。
ls copy*.json 2>/dev/null; grep -nE '"copy:(lint|build|check)"' package.json
いずれの場合も、以下の禁止事項を確認せずに Visant のコピーを書かないでください。
ルール 0:提案はしても、適用はしない
ファイルに反映するのは、リンターが指摘した箇所の修正だけです。 問題なく通過した見出し、リード文、文は、たとえ平坦に聞こえてもそのままにします。
スタイル改善はレポート内の提案表(キー、修正前、修正後)にまとめ、ユーザーが行ごとに選べるようにします。すでに良いものを書き換えると信頼を損ない、レビュー担当者をレビューする手間をユーザーに負わせます。
例外は、明確な依頼がある場合です。 「このコピーは分かりにくいから、X の雰囲気にして」は作業指示であり、議論への招待ではありません。依頼を適用し、修正前/修正後の表を示し、最後に1 行の代案を 1 つか 2 つ添えます。そうすれば、差し替えは新たなやり取りではなく、1 回の編集で済みます。ユーザーがすでに方向性を示しているのに選択肢だけを返すと、作業をユーザーに押し戻すことになります。
禁止事項
絶対に守ってください。見出し、本文、CTA、FAQ、メール、キャプション、代替テキスト、エラーメッセージ、メタディスクリプションのすべてに適用します。「ここではうまくいった」という例外はありません。
- ダッシュ(— または –)は禁止です。 句点、コンマ、コロン、丸括弧を使います。
- 区切り点(
·、Alt+7)は禁止です。 メタデータのリストでも、価格を含む CTA でも、フェーズのラベルでも、ソーシャルカードでも使いません。リストでは句点とコンマにします(「34 ページ。9 段階、1 件の全工程事例」)。ラベルではコロンにします(「フェーズ 1:戦略」)。CTA では前置詞にします(「47 レアルで電子書籍を購入する」)。 - 「X ではなく、Y です」は禁止です。 2 文に分ける形も禁止です(「リストではありません。連鎖です。」)。否定で定義する文も禁止です(「スローガンではありません。」)。
- 「X についてです」は禁止です。 何も主張していません。そのものが何をするのかを表す動詞に置き換えます。
- 「単なる X ではなく、X と Y です」は禁止です。 「単なるもの以上の」、「X を減らして Y を増やす」、「〜に関するものではない」も禁止です。
- 末尾に否定をぶら下げる形は禁止です。 「読むために作られ、保管するためではありません。」末尾を削れば、文はより力強くなります。
- 絵文字は禁止です。セミコロンも禁止です。(
©、®、™は商標記号なので、そのまま残します。) - 教祖めいた書き出しは禁止です。「想像してみてください」、「もし私があなたに伝えるとしたら」、「〜に備えましょう」、「いよいよ〜の時です」などです。事実や場面から始めます。
- ありきたりな緊急性の演出は禁止です。「残りわずか」、「急いで、売り切れる前に」、「期間限定」などです。希少性は数で示します(「このロットの定員は 30 名です」、「購入ごとに割当数が増えます」)。
- 信頼性を示す言葉は、1 ページにつき最大 1 回です。「本物の」、「本当の」、「実践で」、「実際に」、「純粋な」、「真正の」などです。1 回なら問題ありません。2 回使うと、読者は数えてスクリーンショットを投稿します(「本物の経歴、本物のプロジェクト、本物の技術、本物のプロセス」)。形容詞は証明になりません。数字や情景が証明になります。
Sete anos de projeto real→Sete anos entregando marca
ルール 3〜6 を解決する方法:否定の側を削ります。 残った文が、たいてい正解です。対比が本当に論点なら、否定するのではなく結果を示します。「才能がないのではなく、秩序が足りない」とする代わりに、「才能はすでにあります。足りないのは秩序です」と書きます。
リンター
コピーを納品する前に実行することは必須です。依存関係なしのプレーンな Node で、どのリポジトリでも実行できます:
L=~/.claude/skills/visant-copy/scripts/copy-lint.mjs
node $L copy.json # copy JSON
node $L hero.tsx page.tsx og.tsx # components, passed TOGETHER
node $L README.md docs/landing.md # markdown or plain text
npm run copy:lint # if the repo uses Visant's pipeline
受け付ける入力の詳細は次のとおりです:
| 入力 | 読み取り方法 | 報告箇所 |
|---|---|---|
.json(構造は問いませんが、有効な JSON である必要があります) | 深さを問わず、すべての文字列値 | ドット区切りのキー(hero.title) |
コード(.js .jsx .ts .tsx .mjs .cjs .vue .svelte .astro) | コメントをマスクして行単位で読み取り | L<n> |
その他のテキスト(.md、.html、.txt) | マスクせず行単位で読み取り | L<n> |
- ファイルまたはフォルダーを、1つでも複数でも指定できます。フォルダー内では上記の種類を対象に探索し、
node_modules、.git、.next、dist、build、out、coverage、およびドットで始まるフォルダーはスキップします。 - 無効な JSON または存在しないパスがある場合は、1行のエラーを出して終了コード 1 で停止します。
- 絵文字のチェックはすべてのファイルで実行されます。セミコロンとパイプ区切りのチェックは
.jsonのみで実行されます(.mdではパイプは表、コードでは;は構文です)。 - フラグ:
--quiet(CI 向けに終了コードのみを出力)、--include-comments(コードのコメントもチェック)、--self-test(PT と EN のすべてのルールが機能し、問題のない文は通過することを確認)。 - ID は英語です。言語固有の場合は
pt-/en-を付け(pt-not-x-but-y、en-hype)、句読点の場合は接頭辞なしです(em-dash、bullet-separator、semicolon)。従来の PT ID(travessao、bolinha)も設定で引き続き使用できます。EN hype のチェックでは、マーケティング対象を示す名詞句が必要です。「Unlock account」は通過しますが、「unlock your potential」は失敗します。
終了コード 1 の場合、キー、該当箇所、修正方法を表示します。適切なコピーでも細かな点で失敗しないよう、警告2種類は終了コードに影響しません:
- 行の種類ごとの長さ(見出し 60、CTA 28、リード 180、本文 280、SEO タイトル 60、メタディスクリプション 160)。キーの接尾辞から種類を推定するため、
.jsonのみが対象です。モバイルで3行に折り返される見出しにフラグを立てます。 - 重複:同じ文が、1回の呼び出しで指定した複数のファイルに存在する場合に警告します。そのため、ファイルをまとめて指定してください。1つずつ指定してはいけません。
コードファイルのコメントは意図的にチェックしません。JSDoc はコピーではありません。
繰り返しの上限は PIECE ごとに適用され、ファイルが必ずしも PIECE とは限りません
credibility-seal(上限 1、PT と EN の単語を合算)は PIECE ごとに数えます。JSON では最初のキーセグメント(onboarding.*)、コンポーネントではファイル単位です。金額(R$ 47)はシールとして数えません。その他は意味に基づいて判断されるため、file:line で確認してください。理由。
声のトーン
Visantの電子書籍のランディングページを参考にしています。重要度の高い順です。
- ブラジルの話し言葉をほどよく。「pra」「a gente」「tá」。 「cê」「mano」「tá ligado」は使いません。短い命令形で:「Lê e julga」「Observa uma coisa」。
- **短い文を次々と。**平均12語です。動詞のない断片は表現手法で、長い文のあとにパンチとして使います:「…e a marca se comporta de outro jeito três meses depois. Toda vez.」
- 形容詞ではなく、場面を描く。「ブランドの一貫性がない」とは書きません。目に見えるものを書きます:「ある投稿ではこう言い、カスタマーサポートでは別のことを言い、サイトは別の会社のものみたいです。」
- **責めるなら、まず自分から。**指摘する前に打ち明けます:「私たちもロゴから始めていました。順序を逆にするまで、何週間も無駄にしました。」読者を直接責める言い方(「楽しいからロゴから始めるんですよね」)は、告白のあとに、必要な場合だけ使います。
- 見栄えのために丸めず、生の数字を使う。
R$450k、160+ lives、34 páginas、7 dias。 - 限界を認める。「うまくいかなかったことは、うまくいかなかったと書いてあります。」これが、AIの文章との大きな違いです。
- **市場をからかう、乾いたユーモア。**わざとらしく示しません:「四角形の中央揃えを教える40時間の講座はありません。」批判するのは慣習であり、人ではありません。
- **軽い罵り言葉は1ページにつき最大1回。**議論が痛いところに触れる場合だけ使います:「porcaria」「cagada」。CTAやメイン見出しでは使いません。
- **読者の言葉で異議を示す。**FAQには、本人が考えていることを本人の言葉で書きます:「ブランディングは何年もやっています。何か新しいことが見つかりますか?」回答はまず答えから始めます(「役立ちます。」「そうです。」)。「良い質問ですね」では始めません。
文ごとの詳細、語彙、英語表現、金額、CTA、ビフォー/アフターの表については、references/voice.mdを参照してください。新しい文章を書く場合や、セクション全体を書き直す場合は、先に読んでください。
ファーストビューでは状態ではなく、タスクを示す
H1、<title>、ソーシャルカードに適用されます。すべてのリンターを通過してしまうため、最も大きなミスです。
状態を伝えるコピーは、読者の状況を描写するだけで、得られるものは読者に推測させます:「ディスクに使われていないモックアップが何百個もあります」。事実であり、実際の悩みですが、何も求めていません。タスクを伝えるコピーは、読者がやりに来たことを動詞で示します:「PSDを開かずに、目的のモックアップを見つける」。
確認するのはひとつだけです:**読者はGoogleにどんな動詞を入力するでしょうか?**見出しにその動詞がなければ、状態について話しています。また、タスクを取り違えないようにしてください。書き始める前に、本当に困るのはどの段階なのか確認します(例はreferences/cases.mdを参照)。
悩みを示す必要がある場合(必要なこともあります)は、次のセクションでメカニズムを説明しながら示します。ファーストビューに割けるのは5秒です。その5秒をすべて問題の説明に使うのは、機会を無駄にしています。
ブランド用語集(Visant自身のコピーのみ)
クライアント向けのコピーでは、この用語集ではなく、クライアントブランドの用語集を使います。
| 用語 | 意味 | 使用箇所 |
|---|---|---|
| Visionário® | 生涯プラン、一括払い | プラン種別、CTA、FAQ、プランのサブタイトル |
| Visantista | 月額購読者、およびコミュニティの呼称 | 月額プラン、コミュニティ |
| Visantismo | ムーブメントであり、ランディングページのブランド | ロゴ、ナビゲーション、フッター |
| Visant | 代理店/会社 | 本文、著者表記 |
| **使用終了。**Visionárioの曖昧な同義語として使われ、同じプランに2つのブランド名が生まれていました | 使用しない |
リポジトリが Visant のパイプライン(copy.json)を使用している場合
コピーは JSON にあります。HTML と Markdown は生成されたビューです。 .html 内のテキストを編集するのは常に誤りです。次回のビルドで上書きされ、チェックに失敗してデプロイが止まります。作業の流れ:JSON を編集し、npm run copy:lint、npm run copy:build を実行し、json + html + md をまとめてコミットします(ゲートの copy:check で差分を検出します)。SEO(meta.title、meta.description、meta.og_*)も JSON にあり、data-copy-attr="content" を介して挿入されます。
仕組みの詳細(新しいキー、新しいページ、data-copy-attr、\n が <br> になる仕組み、孤立したキーのエラー、新しいリポジトリでのセットアップ):references/pipeline.md。
copy.json がない場合(その他のリポジトリ)
このパイプライン以外では、コンポーネントが唯一の信頼できる情報源(SSoT)です。テキスト作業の途中で copy.json をセットアップしないでください。ユーザーが依頼したのはコピーであり、新しいアーキテクチャではありません。
リスクの形は変わります。ビューを同期するビルドがないため、同じ文が3〜4か所にコピーされます。そのため、<h1> だけを変更すると、ほかの箇所では先月の約束を訴求したままになります。見出しを変更したら、繰り返されている箇所を探してください(ソーシャルカードと <title> が特に残りがちです)。
rg -n "trecho da frase antiga" src # and repeat with 4 or 5 words from the middle
忘れられやすい順に、該当箇所を示します。
| 場所 | 典型的なファイル |
|---|---|
<h1> とリード文 | components/**/hero.tsx |
| リンクカード | app/**/opengraph-image.tsx と、そこでエクスポートされる alt |
<title> と説明 | app/**/page.tsx(同じオブジェクトの twitter/openGraph も) |
スクリーンショットの alt と figcaption | 同じ hero |
| 論旨を繰り返すセクション | 同じフォルダー内の components/**/ |
最後に、TS リポジトリでは npx tsc --noEmit を実行します。JSX 内のカンマが抜けるとビルドに失敗します。変化するのは <title> だけです。検索に応えるものなので、検索される名詞(「モックアップ」など)を含めます。一方、<h1> には動詞を含めます。
「コピーをレビュー/作成する」際の作業順
- キーに触れる前に、ページ全体の JSON(またはコンポーネント全体)を読みます。コメントも含めてください。コメントには現在の文言をそうしている理由が記されており、そこに書かれた決定と矛盾するコピーは手戻りになります。
copy-lintを実行して、癖の一覧を確認します。- 癖の修正だけを適用し、方向性を指定されたユーザーの依頼に沿って書き換えます。それ以外はすべて表に提案としてまとめます。
- 数値はすべて信頼できる情報源(サーバー側の価格、クライアント数、メンバー数)と照合します。このスキルでは、意図的にそうした値を保存しません。値は古くなるためです。確信が持てない場合は、公開する前に確認してください。
- 古い文の繰り返しを探し(
rg、または対象ファイルをまとめて渡したときのリンターの重複警告を使用)、ソーシャルカード、<title>、説明、altを更新します。 - コードコメントを変更した場合は、コメントが説明している内容も更新します。古いコピーを擁護するコメントは、次の開発者に誤った情報を伝えます。
- もう一度
copy-lintを実行します。Visant のパイプラインでは、copy:buildとcopy:checkも実行します。React/TS リポジトリではtsc --noEmitも実行します。 - 変更した行の変更前と変更後を報告します。ユーザーがテキストを承認するには、テキストを読む必要があります。テキストの要約を読むのではありません。