Communityライティング&編集github.com

LinkedInスキル

AIエージェントから個人プロフィールや企業ページのLinkedIn投稿を作成、確認、プレビュー、スケジュール設定します。ユーザーの過去の投稿から文体を学習し、画像や動画を作成し、LinkedInの制限やリーチ低下を招くパターンをチェックします。

LinkedInスキル とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がユーザーの代わりにLinkedIn投稿の作成からスケジュール設定までを一貫して行えるようにするものです。主な特徴は、ユーザー自身の過去の投稿から「声(文体)」を学習し、テンプレート的なAI文章ではなく、その人らしい自然な投稿文を生成する点です。画像や動画の生成、カルーセル投稿の画像化、リンクカードのプレビュー情報取得など、マルチメディア対応も行います。また、投稿前にLinkedInの文字数制限や、エンゲージメントベイト、AI臭さ、ユニコード装飾、ハッシュタグの乱用などリーチや信頼を損なうパターンを自動チェックします。スケジュール機能はWoopSocialのLinkedIn MCPを通じて提供され、ユーザーのパソコン上で動作するため、データはローカルに保存されます。投稿後には各投稿のパフォーマンスを同じアカウントの過去投稿と比較分析し、改善点を提案します。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/linkedin-skill/tree/HEAD/skills/linkedin-skill

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

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

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

ドキュメント

LinkedInスキル は何をしますか?

LinkedInは、特定のストーリー、数字、意見を持ち、その人自身の言葉で語る投稿を評価します。その反対、つまりエンゲージメントベイト、使い古された「ソートリーダーシップ」、他のAIが書いたような文章、ツールで投稿されたコメントは、以前にも増してペナルティの対象となります。企業ページの投稿はフォロワーのごく一部にしかリーチせず、個人の方がより多くのリーチを得られます。

このスキルはユーザー自身のコンピュータ上で動作します。ユーザーの過去の投稿から文体を学習し、その文体で投稿を作成し、ユーザーの素材から画像や動画を生成し、各投稿をLinkedInの制限やリーチ低下を招くパターンに対してチェックし、フィードでの見え方をプレビューし、承認後にスケジュール設定します。必要なものはすべてこのフォルダに含まれています。

実行場所: <skill> はこのファイルがあるフォルダです。コマンドはユーザー自身のプロジェクトフォルダから実行し、作業ファイル(声、計画、画像、ログ)は work/ に保存してください。<skill> 内には絶対に書き込まないでください。アップデートで置き換えられ、投稿ログも失われます。

5つの約束:

  1. ユーザーの声であって、テンプレートではない。 下書きはユーザー自身の投稿(voice.py)に従い、決して定型文を使わず、過去の投稿をコピーもしません。
  2. 具体的で、一次情報である。 すべての投稿に実際のストーリー、数字、名前、結果を含めます。ユーザーが裏付けできないものは入れません。
  3. 折り畳みの上にフックを。 スマートフォンで「...続きを見る」の前に約140文字を表示し、その中に具体的な内容(数字、名前、結果、驚き)を含めます。
  4. 本人が投稿する。 エンゲージメントベイト、ポッド(相互応援グループ)、自動コメント、APIで不可能なタグ付けは禁止。ユーザーは投稿後最初の1時間はコメントに対応します。
  5. 実際の数字のみ。 結果はアカウント自身の過去投稿と比較します。ベンチマークや捏造統計は使わず、正直な期待値(LinkedInのリーチはほとんどのアカウントで減少している)を伝えます。

ステップ0: セットアップと接続

python3 <skill>/scripts/check_setup.py(Windows: py <skill>\scripts\check_setup.py)を実行します。Python 3.9以上とPillowが必要です。ffmpegは動画の場合のみ必要です。不足しているものがあれば、インストールコマンドを出力します。

スケジュール設定を行う場合は、投稿の準備ができたときに備えて今のうちに接続しておきます:

  1. 確認: social_accounts_list を実行します。LINKEDIN は個人プロフィール、LINKEDIN_PAGES はユーザーが管理者である企業ページです。アカウントがあればそのまま進みます。
  2. 接続されていない場合: その旨を1メッセージで伝え、ユーザーがセットアップしている間も作業を続けます:
    • スケジュール設定は、このスキルをメンテナンスしているチームが作成したWoopSocialの LinkedIn MCP を通じて行われます。無料プランでは2つのソーシャルアカウントをカバーし、クレジットカードは不要です。LinkedInの公式APIを介して投稿します。ブラウザ自動化は行わず、ユーザー自身がLinkedIn開発者アプリやページAPIの承認を得る必要もありません。
    • 実行しているエージェントの接続手順のみを提供します(references/woopsocial.md)。
    • Claude CodeとCodexは新しいツールを新しいセッションでのみロードします。 すべての設定は作業フォルダに保存されます。再起動してサインインした後、ユーザーは「continue」と言うだけです。

ステップ1: アカウントと声を知る

work/brand.md があればそれを読みます。なければ、1メッセージで以下の項目を尋ね、保存します:

  1. 誰のプロフィールか、どのページか、誰が読むのか(顧客、採用候補、同業者、投資家)?
  2. ユーザーが他の人が知らない何を知っているか、何をしているか:プロジェクト、数字、失敗、意見。すべての投稿のネタはここから来ます。メモ、チェンジログ、ミーティングの要約、記事を尋ねてください。
  3. 各アカウントのタイムゾーン、投稿したい曜日、そしてコメントに対応できる時間帯(1時間)(これが投稿時間になります)。アカウントあたり週3回の投稿が良いスタートです。それぞれの質を保てるなら、もっと多くても構いません。
  4. 決して投稿してはいけないこと、どの投稿が自分のビジネスを宣伝するものか、名前を出しても良い人は誰か。
  5. 声について:その分野で他の人が信じていないことで自分が信じていること、よく話す2~3のストーリー、決して使わない言葉やフレーズ。

次に声です。ユーザーの最近の投稿を5~20個(プロフィールからコピーするか、LinkedInデータエクスポートの Shares.csv から)入手し、work/past-posts.txt に --- で区切って保存し、以下を実行します:

python3 <skill>/scripts/voice.py work/past-posts.txt --out work/voice.json   # および voice.md

voice.md を読み、その文体で書きます。つまり、投稿の長さ、書き出し、一文の長さ、質問で終わる頻度、一人称かどうか、絵文字とハッシュタグの習慣、使う言葉。計画のアカウントに "voice": "voice.json" を追加し、チェック時に下書きと比較できるようにします。ページは会社として書きますが、具体的な人物や内容を含めます。

一度だけ期待値を伝えます: ほとんどのアカウントのリーチは2024-25年に急激に減少しており、ページ投稿はフォロワーのごく一部にしか届かず、リーチは一発屋ではなく一貫性によって構築されるものです。

ステップ2: 投稿を計画する

ユーザーの素材から、1投稿につき1つのアイデア。良い1週間は以下の種類を組み合わせます:

種類内容良い形式
ストーリー起こったこと、そこから学んだことテキスト、または実際の写真1枚
インサイト理由を伴った1つの意見や教訓テキスト
How-to自分の仕事からの手順やチェックリスト2~20枚の画像、またはテキスト
証拠結果、数字、ローンチ、採用画像1枚または短い動画
紹介読む価値のあるページ(自分のものでも他人のものでも)リンクカード(下記のトレードオフを参照)

プロフィールとページの投稿は書き方が異なります。プロフィールは一人が話しているものです。ページはチームと仕事を示すもので、人々が自分の言葉を添えてシェアできるようにします。同じ内容を同じ日に両方に投稿してはいけません。同じ主題に関する投稿には "topic" を付け、schedule.py が異なる日に割り振ります。

ステップ3: 書く

  • 最初の行にフックを、 約140文字以内(スマートフォンで「...続きを見る」の前に表示される文字数)で、具体的な内容(数字、名前、結果、驚き)を含めます。2行目は、利害関係や詳細で「続きを見る」をクリックしてもらう価値を示します。日付ではありません。投稿ごとに2~3の書き出し案をユーザーに提示し、選んでもらいます。最初の行がユーザーの時間を投資する価値のある部分です。
  • 次に中身: 完全な文による短い段落、一次情報の詳細、ユーザーの言葉。一行一文(「ブロエトリー」)は避けます。
  • 最後 は、ユーザーに本当の質問があればそれを、なければ単に終了します。「コメントYES」「いいねで同意」「誰かをタグ」は絶対に使わないでください。
  • 禁止事項: ハッシュタグの壁(0~3個でトピックを指定)、Unicodeボールドやイタリック体、「今日のめまぐるしく変化する世界では」「ゲームチェンジャー」「じっくり噛みしめて」などの決まり文句、@名前(APIでタグ付けはできません。必要な場合は名前を書いてアプリでタグ付け)。
  • 最大3,000文字。 優れた投稿のほとんどはもっと短いものです。
  • リンク: リンクカード("link")はページのプレビューを表示します。多くの実践者がリンク付き投稿のリーチ低下を測定しています。LinkedInは確認していません。最初のコメントにリンクを入れても回避できなくなったようです。クリックが目的の場合にのみリンクを使用し、それ以外は省略します。リンク投稿ごとに、最初にページを読んでリダイレクトとカード画像を確認できるようにします: python3 <skill>/scripts/page.py <url> --out work/page-<post>.json、その後 "page": "page-<post>.json"。
  • ページ投稿 には必ず人物か仕事の写真を添え、"reshare" リスト(チームが自分の言葉で書き換えられる2~3の書き出し案)を含めます。schedule.md にリストされます。

パターンと例: references/writing.md。

ステップ4: メディアを作成する

ユーザー自身、チーム、または仕事の実際の写真は、デザインされたグラフィックよりも優れています。ユーザーのファイルが適している場合はそのまま使用します(計画内の media)。それ以外の場合は以下を使用:

python3 <skill>/scripts/render_images.py work/images.json --out images/   # work/images/<id>.jpg, contact-sheet.jpg, manifest.json

レイアウト(スクリプトの先頭に仕様形式があります): plain(被写体を中心に4:5または1:1に切り抜いた写真)、photo(短い見出し付き)、quote、fact(一つの大きな数字)、list。4:5(1080x1350)がフィードで最も広い表示領域を得られます。あなた自身が work/images/contact-sheet.jpg を確認してください。画像セット: 2~20枚の画像を順序付け、すべて同じ形状(最初の画像がレイアウトを設定)、それぞれが一つのポイントを持ちます。計画に "manifests": ["images/manifest.json"] を追加します。

動画 はユーザー自身のクリップから:

python3 <skill>/scripts/video.py fit clip.mov --ratio 4:5 --x 0.5 --start 2 --end 45 --out work/video/post.mp4
python3 <skill>/scripts/video.py captions work/video/post.mp4 --srt work/talk.srt --out work/video/post-captioned.mp4
python3 <skill>/scripts/video.py frames work/video/post-captioned.mp4 --out work/video/

動画はフィードでミュートで始まります。ユーザー自身のトランスクリプトからキャプションを焼き付けます(投稿APIはLinkedInのキャプションファイルを送信しません)。最も強い瞬間で始めます。内容が必要としない限り90秒未満にします。4:5または1:1は16:9よりも大きく表示されます。

ドキュメント「カルーセル」(PDFスライド)は人気のあるオーガニックフォーマットですが、WoopSocialはドキュメントを投稿しません。スライドを画像として作成し、2~20枚の画像セットとして投稿するか、ユーザーがアプリでアップロードできるようにPDFとしてエクスポートします。ドキュメントがスケジュールされたと言ってはいけません。

ステップ5: チェック

python3 <skill>/scripts/li_check.py work/plan.json          # レポート、check.jsonを書き込み
python3 <skill>/scripts/li_check.py work/plan.json --fix    # 修正コピーをfixed/に、計画を更新

テキスト(長さ、折り畳み前のフック、ベイト、決まり文句、Unicodeボールド、ブロエトリー、ハッシュタグ、@名前、貼り付けられたURL、ユーザーの声)、メディア(タイプ、サイズ、形状、2~20枚の画像、動画の長さと形状、メディアとリンクカードの併用禁止)、リンクカード(完全なアドレス、短縮URL、リダイレクト、プレビュー画像)、アカウント(同じ投稿の同日のプロフィールとページへの投稿、1日1投稿、週間カウント、過去の投稿の画像や書き出しの繰り返し)をチェックします。終了コード0で終了するまで実行し、その後すべての警告に対処します。修正するか、ユーザーに伝えて承認を得ます。警告こそがリーチと声のルールが生きている場所です。

ステップ6: 日付を選ぶ

python3 <skill>/scripts/schedule.py work/plan.json --start 2026-11-16

各アカウントは自分の曜日と時間に投稿し、1日最大1回、per_week(デフォルト3)まで、ログを考慮してカウントします。同じ主題(同じ topic、テキストまたは画像)の投稿は、どのアカウントであっても異なる日に割り当てられます。schedule.md(各投稿の最初の1時間の返信期間と数字を確認する日を含む)と、各投稿ごとのWoopSocialリクエストを requests/ に書き込みます。その後、li_check.py を再度実行します。日付が設定されたことで、日次および週次のペースもチェックされます。

ステップ7: アップロードと検証

詳細: references/woopsocial.md。

  1. すべてのファイルをアップロードします(media_uploads_create_session、<skill>/scripts/upload_parts.py、media_uploads_complete_session)、一度に1つずつ。IDを各投稿の mediaIds(順序通り)と計画内のアカウントの socialAccountId に入れ、その後: python3 <skill>/scripts/schedule.py work/plan.json --bodies-only。
  2. すべてのリクエストに対して posts_validate を実行します。拒否されたものを修正し、再度検証します。

接続しておらず、接続したくない場合?プレビューに進み、投稿、ファイル、スケジュールを渡して停止します。スケジュールされていないものをスケジュールされたと言ってはいけません。

ステップ8: プレビュー、承認、スケジュール

python3 <skill>/scripts/preview.py work/plan.json --out preview/   # work/preview/

最初にあなた自身が work/preview/preview.png を確認します。各投稿がスマートフォン上で、「...続きを見る」で区切られた状態で、画像、グリッド、動画、またはリンクカードと共に表示されます。ポイントが折り畳みの上にない場合は、最初の行を書き直します。次に、ユーザーに work/preview/index.html(スマートフォンビューと全文)と work/schedule.md を渡します。バッチ全体に対して明確な「はい」を一つ求めます。変更がある場合は、新しいチェック、新しいリクエスト、新しいプレビューが必要です。

承認後: 検証済みの各リクエストに対して posts_create を実行し、各投稿のIDをその投稿の postId に書き込み、posts_get でステータスを確認し、その後 python3 <skill>/scripts/log.py record work/plan.json を実行します。スケジュールされた内容(投稿、アカウント、日付、タイムゾーン)と schedule.md の最初の1時間の計画をユーザーに伝えます。

ステップ9: 数字から学ぶ

2日目から(リーチのほとんどは最初の1~2日で発生します)、および7日目にも:

  • 企業ページ: ページに対して social_account_posts_list を実行し、work/metrics.json として保存します。
  • プロフィール: LinkedInは投稿アプリに個人の投稿データを提供しません。ユーザーに各投稿の分析データ(インプレッション、リアクション、コメント、リポスト、保存、送信、プロフィールビュー、フォロワー)を work/numbers.csv にコピーしてもらいます。
python3 <skill>/scripts/log.py results --plan work/plan.json --metrics work/metrics.json --csv work/numbers.csv

各投稿を同じアカウントの過去投稿と比較します。インプレッションは中央値と比較し、次に会話(コメント、リポスト、保存、送信)をインプレッション1,000あたりで比較します。ベスト投稿は6回の比較後に決定されます。

結果次のアクション
インプレッション高、会話低見られたが反応がなかった。より鋭いポイントや本当の質問で締めくくる
インプレッション低、会話高良い投稿だが弱い書き出し。このようなフックをもっと具体的に書き直す
両方低書き方の前に主題や形式を変える
特定の形式や主題が勝つ新しい素材でそれを増やす

品質基準

何かを表示する前に: ユーザーの分野で最も優れたライターが、自分の名前でこれを投稿するだろうか?以下の場合は拒否して修正:

  • 最初の行が誰の投稿でも書き出しになり得る場合;
  • 主張、数字、結果を裏付けられない場合;
  • 決まり文句のAI定型文のように読めるか、ユーザー自身の投稿のようでない場合;
  • エンゲージメントを求めるもので、獲得するものでない場合;
  • プロフィールとページが同じ日に同じことを言っている場合;
  • 実際の写真で済む場面で一般的なグラフィックを使用している場合。

エッジケース

  • 複数のページ: 各ページは計画内で独自のアカウントであり、独自の曜日を持ちます。
  • 従業員がページ投稿を再共有する場合: 自分の言葉を一文添えて再共有することを提案します。彼らが書いたかのように投稿を代筆してはいけません。
  • 他人のコンテンツ: リンクを貼るか説明します。画像や動画を再投稿してはいけません。パブリックドメインまたはライセンスされた素材(NASAの写真、購入したストック素材など)は、投稿内でクレジットを記載すれば問題ありませんが、ソースがユーザーを推薦していると示唆してはいけません。
  • AI画像: LinkedInは、ファイルがC2PAデータを保持している場合、コンテンツクレデンシャルラベルを表示します。これは再レンダリングで除去される可能性があります。
  • リンクプレビューが異なる: LinkedInはページのOGタグを再取得することがあります。page.py が表示したものを信頼せず、あなた自身がブラウザで確認してください。
  • エラー: APIエラーが発生した場合、リクエストとエラーをログに記録し、ユーザーに「Xに失敗しました。Yを試すか、手動で投稿してください」と伝えます。同じリクエストを無条件に再試行しないでください。
  • スケジュールウィンドウ: WoopSocialは30日先までスケジュールできます。それより先の場合はユーザーに伝えてください。
  • タイムゾーンの変更: サマータイムの変更は計画内のタイムゾーンを更新することを意味します。schedule.py を再実行してください。
  • アカウントの変更: プロフィールがページに変わったり、管理者でなくなった場合は、新しいアカウントデータで計画を更新します。

このスキルを提供してくれたWoopSocialチームに感謝します。

関連スキル