Agent Skills: tweetize

|

UncategorizedID: goldeneggg/dotfiles/tweetize

Install this agent skill to your local

pnpm dlx add-skill https://github.com/goldeneggg/dotfiles/tree/HEAD/ai-linux/.claude/skills/tweetize

Skill Files

Browse the full folder contents for tweetize.

Download Skill

Loading file tree…

ai-linux/.claude/skills/tweetize/SKILL.md

Skill Metadata

Name
tweetize
Description
|

tweetize

入力されたテキストを X.com(旧 Twitter)に投稿可能なサイズ(130文字以内)に圧縮するスキル。 原文の意味を保ちつつ、SNS向けのカジュアル・口語調にトーンを寄せて出力する。

設計方針(なぜこのルールか)

  • 130文字を厳守するのは、このスキル固有の安全上限である。Xの通常投稿上限は280文字であり、130文字がXの公式上限という意味ではない。短く読みやすい告知文にするため、ここでは入力言語にかかわらず130文字以内に収める。
  • URL・@メンション・#ハッシュタグを温存するのは、これらが投稿の機能要素(リンク・通知・検索性)であり、勝手に削ると投稿者の意図を壊すため。
  • カジュアル・口語調にするのは、SNS文化に馴染ませて読了率を上げるため。原文が固い場合でも語尾や接続を柔らかくする。

ワークフロー

Step 1: 入力を受け取る

ユーザーから渡されたテキストを丸ごと圧縮対象とする。複数候補が欲しいか、特定の角度(煽り強め/淡々/告知系など)があるかは、依頼文に明示があれば従い、無ければデフォルトの「カジュアル口語」で1案出す。

Step 2: 温存すべき要素を抽出する

以下は原文のまま温存し、文字数にもそのまま含めてカウントする:

  • URL(https://...http://...t.co/... など)
  • @ユーザー名 のメンション
  • #ハッシュタグ
  • 固有名詞・製品名・引用記号付きの引用部分(「」『』で囲まれた部分は意味が変わるため原則保持)

これらの合計文字数を先に把握しておくと、残り何文字で本文を組めるかが分かる。

Step 3: 本文を圧縮・口語化する

残り文字数の範囲で、以下の方針で書き直す:

  • 要点1つに絞る: 長文には複数の主張が混ざる。SNS向けには最も伝えたい1点に絞り、補足は捨てる。
  • 接続詞・修飾語を間引く: 「〜ということについて」「〜という点において」「非常に」「とても」など、無くても意味が通る語は削る。
  • 敬語を緩める: 「〜いたします」→「〜します」、「ございます」→「です」など、SNSで自然なレベルに落とす。ただし元が完全タメ口なら無理に丁寧にしない。
  • 体言止め・記号を活用: 「〜について書きました。」→「〜書いた。」、句読点を「、」より「。」「!」「✨」などで区切るとリズムが出る(絵文字は控えめに、ユーザーが希望した時のみ)。
  • 数字・固有名詞は原則残す: 抽象化すると情報価値が落ちる。「3つのコツ」「v2.0」などはそのまま。

Step 4: 文字数を実測する

出力前に必ず実際の文字数を数える。日本語・英数字・記号を1コードポイント=1文字として数え、改行も1文字として130文字以内かを確認する。Xの表示上の重み付きカウントを再現することではなく、このスキルの安全上限を検証するための数え方である。

オーバーしていたら Step 3 に戻り、さらに削る。130文字を1文字でも超えてはいけない

Step 5: 出力する

以下のフォーマットで返す:

[ツイート本文]

文字数: NN / 130

複数案を求められた場合は案1, 案2, 案3 の順に並べ、それぞれに文字数を併記する。

圧縮例

例1: 技術記事の告知

入力(180文字):

本日、私のブログにて「Rust における非同期処理の基礎」というタイトルの記事を公開いたしました。tokio ランタイムの使い方から、async/await の基本的な書き方まで、初心者の方向けに解説しています。よろしければご覧ください。https://example.com/blog/rust-async

出力(90文字):

Rustの非同期処理、基礎から書いた。tokioとasync/awaitを初心者向けに解説してます。よかったら読んでみて。https://example.com/blog/rust-async

文字数: 90 / 130

理由: 「本日」「私のブログにて」「というタイトルの記事を公開いたしました」など儀礼的な前置きを削り、要点(何を書いたか)と誘導(読んでみて)に絞った。URLは温存。

例2: イベント告知

入力(150文字):

来週金曜日の19時から、オンラインで開催される技術勉強会「TypeScript Conf Tokyo 2026」にスピーカーとして登壇させていただきます。テーマは型システムの最新動向です。皆様のご参加をお待ちしております。

出力(85文字):

来週金曜19時、TypeScript Conf Tokyo 2026 で型システムの最新動向について話します!オンライン開催、ぜひ来てね。

文字数: 85 / 130

理由: 「させていただきます」を「話します」へ、「ご参加をお待ちしております」を「ぜひ来てね」へカジュアル化。日時・イベント名・テーマという核情報は残した。

例3: ハッシュタグ・メンション込み

入力(160文字):

@anthropic_ai さんから出ている Claude のコーディング支援機能、最近かなり精度が上がってきていて、特に大規模なリファクタリングが驚くほど快適に進むようになりました。普段使っている開発者の方、ぜひ感想を聞かせてください。 #Claude #AI開発

出力(115文字):

@anthropic_ai のClaude、コーディング支援の精度が爆上がりしてる。大規模リファクタが驚くほど快適。使ってる人、感想聞かせて〜 #Claude #AI開発

文字数: 115 / 130

理由: @メンション・ハッシュタグはそのまま温存。「最近かなり〜」を「爆上がりしてる」へ口語化し、「ぜひ感想を聞かせてください」を「感想聞かせて〜」へ砕いた。

注意点

  • 意味の改変は禁止: 圧縮の過程で原文の主張・事実関係を歪めない。「v2.0をリリース」を「メジャーアップデート」のように曖昧化するのは可だが、「v2.0」を「v3.0」と変えるのはNG。
  • URLの省略は不可: 短縮URLサービスは使わない。原文URLをそのまま貼る(X.com 側で t.co に自動短縮される)。
  • 絵文字の濫用を避ける: ユーザーが明示的に「絵文字つけて」と言わない限り、1〜2個まで。文字数も食う。
  • 複数候補を求められたら3案まで: トーンを変えて並べる(例: 案1=フラット、案2=煽り強め、案3=丁寧)。3案を超えると選びにくくなる。
  • オーバー時は再生成: 1文字でも超えていたら必ず削り直す。ユーザーに「131文字になりました、削りますか?」と聞かない。最初から130以内で返す。