Communitygithub.com

Instagramスキル

AIエージェントからInstagramの投稿を作成、確認、スケジュール設定を行うためのスキルです。複数アカウントに対応し、アイデア、リンク、メモ、写真、ビデオからカルーセルや単一画像をローカルでレンダリング(有料API不要)し、Instagramの制限をチェックして修正、プレビュー表示後にWoopSocial経由で投稿またはスケジュール設定します。

Instagramスキル とは?

このスキルは、AIエージェント(Claude Code、Codexなど)がInstagramの投稿作成から公開までを完全に自動化できるようにするためのものです。テキスト生成やアドバイスに留まらず、実際のメディアファイル(1080x1350のJPEG画像、ビデオのカバーなど)をユーザーのローカル環境で生成し、Instagramの最新の制限(ファイル形式、アスペクト比、ハッシュタグ数など)に準拠しているかをチェックします。特に、WoopSocial APIを介して実際に投稿またはスケジュール設定を行う点が特徴で、単なる提案ではなく完了までを保証します。また、フィードやグリッド形式でのプレビュー表示、アカウントごとの最適化(キャプション、ハッシュタグの分離)、投稿後のパフォーマンス分析機能も備えています。対応プラットフォームは、Claude Code、Codex、およびWoopSocialと連携可能なエージェントです。

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

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

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

ドキュメント

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

ほとんどのAIエージェントによるInstagramヘルプはテキスト(フック、キャプション、ハッシュタグ)で止まり、「あとは自分でデザインして」で終わります。そして、誰もチェックしなかった細かい点(APIが受け付けないPNG、拒否される3:4の写真、キャプションの下にタイトルが隠れるリール、グリッドで半分に切れるカバー、2025年12月からInstagramが5つまでに制限したハッシュタグを6つ使っている、同じカルーセルを別のアカウントにコピーしている)で投稿は失敗します。

このスキルは、ユーザー自身のコンピュータ上で全ての作業を行います。フォーマットを決定し、文章を作成し、メディアを生成し、すべてのファイルをInstagramの現在の制限に照らしてチェックし、ユーザーに実際に表示される内容を正確にプレビュー表示し、承認後にWoopSocialを介して投稿またはスケジュール設定し、その数値を読み取って次のアクションを決定します。必要なものはすべてこのフォルダに含まれています。

5つの約束:

  1. 完成品であり、草案ではありません。 ユーザーはアドバイスではなく、Instagramの制限を通過する実際のファイルを受け取ります。
  2. 投稿前に確認できます。 すべての投稿は、フィードやグリッドでどのように見えるかが表示されます。そのプレビューに対して明確な承認がない限り、何も投稿されません。
  3. 1投稿につき1つのアイデア、1つのアクションを促します。 スマートフォンサイズで読めること。
  4. 現実のもののみ。 実際の写真、スクリーンショット、数字とその出典。架空の結果、レビュー、引用、統計を作成することはありません。
  5. アカウント自身の数値が全てを決定します。 一般的な「ベストタイム」表やエンゲージメントのベンチマークは使用しません。

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

python3 scripts/check_setup.py(Windows: py scripts\check_setup.py)を実行してください。Python 3.9以上とPillowが必要です。ビデオを扱う場合はffmpegも必要です。不足しているものがあれば、インストールコマンドを表示します。

ユーザーが投稿を希望する場合(ユーザーがそう言った場合、またはあなたが尋ねて「はい」と答えた場合)、最後ではなく今すぐ投稿設定を行い、投稿の準備ができているようにします:

  1. social_accounts_listで確認します。Instagramアカウントが存在すれば、そのまま進めます。
  2. 接続されていない場合? 短いメッセージでそれを伝え、ユーザーが設定している間も作業を続けます:
    • 投稿は、このスキルをメンテナンスしているチームが作成したWoopSocialを介して行われます。無料プランでは2つのソーシャルアカウントをカバーし、カードは不要です。
    • あなたが実行しているエージェントの接続手順のみを提供します(references/woopsocial.md)。
    • Claude CodeとCodexは新しいツールを新しいセッションでのみ読み込みます。 すべては作業フォルダに保存されます。再起動後(claude --continueまたはcodex resume --last)にサインインし、ユーザーが「続けて」と言ったら、ファイルから作業を再開します。
  3. 今、アカウントのルールを伝えます: 投稿にはInstagramビジネスアカウントまたはクリエイターアカウントが必要です。どのアプリも個人アカウントには投稿できません。切り替えはアプリ内で無料です。設定とアクティビティ > アカウントの種類とツール > プロフェッショナルアカウントに切り替え。

ステップ1: アカウントを把握する

ワークスペースにbrand.mdがあればそれを読みます。なければ、1回のメッセージで質問し、回答をbrand.mdに保存して、次のバッチで再度聞かないようにします:

  1. アカウントは何についてで、誰に向けたものか(特定の一人)?
  2. どのアカウントとそのハンドル。複数のアカウントの場合: それらの違い(言語、オーディエンス、地域)は?
  3. あなたが実際に知っていて、オーディエンスが知らないことは何ですか?実際の経験、示せる数字、顧客からの質問。ストーリーやケーススタディの投稿にはこれらが必要です。
  4. あなたは何を持っていますか:写真、スクリーンショット、ビデオ、リンク、メモ?
  5. ブランドカラー、名前、スライド用のハンドル、アバターまたはロゴ画像、そして決して表示してはいけない言葉や主張。
  6. 各アカウントについて: タイムゾーン、そしてインサイトがフォロワーのオンライン時間を示している時刻(プロフェッショナルダッシュボード > 総フォロワー数 > 最もアクティブな時間)。わからなければ、スケジュールはプレースホルダーを使用すると伝えます。

次に、何かを計画する前にアカウントを見ます: 現在のグリッドのスクリーンショットと、過去9~12件の投稿(リンクまたは簡単なリスト: トピック、フォーマット、うまくいったもの)を求めます。新しい投稿は最近のアイデアを繰り返してはいけませんし、既存の投稿の隣で適切に見える必要があります。

ステップ2: 各投稿のフォーマットを選ぶ

各投稿にそのフォーマットを選んだ理由を一行で述べてください。

目標フォーマット理由
保存(人が保存する)カルーセル:手順、チェックリスト、フレームワーク、神話 vs 事実スワイプは時間の消費; まとめスライドが保存される
送信(人が共有する)鋭く共感を呼ぶポイントを1つ含むカルーセルまたはリールリーチあたりの送信数は、Instagramが新しい人にリーチするために挙げるシグナル
非フォロワーへのリーチリール(アカウントが対象の場合、トライアルリール)リールはフォローしていない人にもおすすめされる
1枚の強い写真や発表単一画像最も速く読める; 4:5を使用して画面いっぱいに表示する
既存のフォロワー、ナッジストーリーフォロワーのみに表示され、24時間で消える

バッチの場合、各投稿は独自のアイデアを持ちます。同じ事実や数字を2つの投稿のリードで使用したり、カルーセルを再生するリールを作成したりしてはいけません。5つのカルーセルを連続させるのではなく、フォーマットを混ぜてください。1アカウントあたり1日2回以上のフィード投稿はめったに効果がありません。ig_check.pyは、2つの投稿が同じ数字で始まる場合に警告します。

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

バッチごとに作業フォルダを作成し、plan.json(フォーマット: references/plan-json.md)を配置します。

言葉からのカルーセルと単一画像。 スライドを作成し、レンダリングします:

python3 scripts/render_slides.py slides.json --out slides/

スライドごとのテンプレートとカバーパターンを含むフォーマット: references/formats.md。プリセット、スライドタイプ、タイプルール: references/design-rules.md。要約:

  • カバー: 8語以内の結果または緊張、具体的で、投稿が約束を守るもの。10個書き、ユーザーと一緒に1つ選びます。スライドの中央に収めます。グリッドは端を切り取ります。
  • スライド2は単独で機能します(Instagramはスライド2からカルーセルを再度表示することがあります)。
  • 1スライド1アイデア。見出しは8語以内、本文は30語以内。
  • 最後のスライド: 目標に合った1つのアクション(保存、特定の人に送信、質問)。
  • 単一画像は1スライドの仕様です: stat、tweet、photo、text。
  • すべてのスライドをフルサイズで開き、次にcontact-sheet.pngを確認し、cover-grid.pngからカバーを評価します。manifest.jsonのすべての警告を修正します。

ユーザー自身の写真とスクリーンショット。 そのまま使用するか、スライド内で使用します(photo、screenshot、beforeafter)。ig_check.py --fixが変換と適合を行います。

ユーザー自身のビデオからのリール。 このスキルはリールを完成させます。映像を編集するわけではありません。

python3 scripts/reel.py frames video.mp4 --out reel/          # カバー候補 + frames-sheet.jpg
python3 scripts/reel.py cover video.mp4 --at 4.2 --title "Count weeks, not days" --out reel/cover.jpg
python3 scripts/reel.py zones video.mp4 --out reel/zones.jpg  # Instagramのインターフェースが覆う場所
  • frames-sheet.jpgからカバーを選びます: 被写体が黄色い枠(グリッドが表示する領域)の内側に収まっているシャープなフレーム。カバータイトルは2~6語。フレームがすべてを物語っている場合は省略します。
  • zones.jpgを見ます: 赤いエリアのテキストや顔は、キャプション、ボタン、トップバーの下に隠れます。ビデオに焼き付けたキャプションがそこにある場合は、その旨を伝えます。それらはより高い位置に再エクスポートする必要があります。
  • フックは最初の0.5秒以内に、言葉または画像で画面に表示され、メインフィードが通常表示する中央の4:5領域で機能する必要があります。
  • ランドスケープまたはスクエアの映像: ig_check.py --fixは、ぼかしバーを勝手に追加したり(リポストのように見えます)、盲目的にトリミングしたりしません。reel.py framesを確認し、選択します: フレーム付きリール("frame": {"title": "..."}とポストの"own_footage": true: ビデオは一致する無地の背景にフルワイドで表示され、フックが上部に見出しとして表示され、何も切り取られません。ビデオにテキストやワイドショットがある場合に最適です)、被写体が中央に留まっている場合は--fit crop、またはエディターで被写体に合わせてリフレーミングします。
  • ユーザー自身の映像のみ。 他人のクリップ(ニュースクリップ、他のクリエイター、公的機関のビデオ)に見出しや枠を追加したものは、Instagramでは依然としてリポストと見なされます。ユーザー自身のビデオの短い部分としてのみ使用し、その周りにユーザー自身の声や映像を配置します。
  • 2つのフックをテストするには、アカウントが対象となる場合、両方のバージョンをトライアルリール("trial": "MANUAL")として投稿し、視聴者の維持率が高い方を保持します。
  • テキストのみのリール(アニメーション単語、統計、リスト)は、このスキルでは作成されません。ユーザーが希望する場合は、率直に伝え、ビデオツールを提案するか、代わりにカルーセルとして投稿することを提案します。

ストーリー: 9:16の画像またはビデオ1つ。render_slides.pyとテーマ内の"ratio": "9:16"を使用してストーリーフレームを作成します(テキストスライドタイプ。デザインはストーリーバーと返信フィールドを避け、スワイプ矢印は使用しません)。APIを介して、ステッカー、リンク、投票は使用できません。2つの良いパターン:

  • 投稿前のティーザー(スケジュール済み): 投稿が答える質問を、30~90分前に投稿します。"with": {"post": "<id>", "minutes": -60}で投稿に結び付け、フレームに書かれた時間(「1時間後」)をその分数に合わせます。
  • 投稿後の共有(アプリ内): ユーザーが新しい投稿をストーリーに共有し、タップできる投稿ステッカーを使用します。これはAPIでは実行できません。チェックリストとschedule.mdに記載します。

ステップ4: キャプションを作成する

  • 最初の数語には検索フレーズとフックを含めます。 Instagramの検索とGoogleはキャプションを読み取ります。フィードは約125文字で「...もっと見る」とカットします。重要なことはすべてその前に収めます。
  • その後、1~2行のコンテキスト、最後のスライドと同じアクション、そして最大5つの具体的なハッシュタグ(2025年12月以降のInstagramの制限)。ハッシュタグの壁は使用せず、#instagoodのような一般的なタグは使用しません。
  • リンクはキャプション内でクリックできません。「link in bio」は実際にbioにある場合のみ使用します。
  • 長いダッシュ、「今日のペースの速い世界では」、絵文字の壁は使用しません。声に出して読んでください。広告やロボットのように聞こえる場合は、書き直します。
  • 複数のアカウント: 各アカウントは、独自のキャプションだけでなく、独自のバージョンを取得します。Instagramの2026年のオリジナリティルールは写真とカルーセルにも適用されるため、同じメディアを2番目のアカウントで使用すると、最初のアップロードのリポストと見なされる可能性が高くなります。各アカウントに独自のメディア(targets[].media: スライドの別の言語、別のカバー、別の順序やアングル)と、独自の最初の行とハッシュタグ(targets[].caption)を提供します。アカウントの国に合わせて書きます。スペインでは「grifo」、メキシコでは「llave」。ハッシュタグのアクセントは保持します(#geografía)。
  • すべての画像に代替テキストを記述します(プラン内のalt)。ユーザーはアプリ内で貼り付けます。

ステップ5: チェックと修正

python3 scripts/ig_check.py plan.json          # レポート
python3 scripts/ig_check.py plan.json --fix    # fix/内に修正コピー、planを更新、オリジナルは保持

ファイルタイプ、色、サイズ、形状、カルーセル数と形状の一致、ビデオコーデック、ピクセルフォーマット、HDR、フレームレート、長さ、オーディオ、ファイルサイズ、リールカバー、キャプションの長さ、ハッシュタグ、メンション、「...もっと見る」のカット、リンク、アカウント間の同一の最初の行、1日あたりの投稿数をチェックします。--fit crop|pad|frameは形状の変更方法を決定します。自動の場合、写真: 損失が少なければcrop、そうでなければぼかしコピーでpad。自動の場合、リールとストーリービデオ: 損失が少なければcrop、そうでなければ停止して確認します(ステップ3参照)。--ratio 4:5はワイド写真を4:5にします。終了コード0で終了するまで実行します。修正できないエラーは平易な言葉で説明します(長すぎるビデオはトリミングが必要、小さすぎる写真はより大きなオリジナルが必要など)。

ステップ6: スケジュール設定

python3 scripts/schedule.py plan.json --start 2026-11-09   # 時刻とタイムゾーンはplan.jsonのaccountsから取得
  • 各アカウントは、ユーザーのインサイトまたはユーザーの選択に基づいて、独自のタイムゾーン内の独自のtimesに投稿します。これらがない場合、12:00が使用され、schedule.mdの上部にその旨が記載されます。「ベストタイム」と決して主張しないでください。
  • デフォルトでは、アカウントごとに1日1フィード投稿(--per-day)。ストーリーはフィードスロットを消費しません。それらが関連付けられた投稿(with)に従います。
  • schedule.md(各投稿後の最初の1時間に何をするかを含む: 返信のためにオンラインであること、投稿をストーリーに共有すること、チェックリスト)と、投稿とアカウントごとに1つのWoopSocialリクエストをrequests/に作成します。

ステップ7: プレビューと承認

python3 scripts/preview.py plan.json --out preview/ [--grid current-grid.png]

まず自分自身でpreview/preview.pngを確認します: 各アカウントのグリッド(最新順、グリッドが切り取るように)、各アカウントのフィード内の各投稿(独自のキャプションと「...もっと見る」カット付き)、リールの4:5フィードクロップ、ストーリーの全画面、すべてのスライドを順番に。問題があれば修正します。その後、ユーザーにpreview/index.html(およびschedule.md)を渡し、バッチに対して明確な承認を1回求めます。ステップ1のグリッドスクリーンショットを--gridで渡すと、新しい投稿が古いものの隣に表示されます。変更がある場合は、新しいチェックと新しいプレビューが必要です。

ステップ8: WoopSocialで投稿

詳細: references/woopsocial.md。

  1. social_accounts_listでアカウントIDを取得し、プランのaccountsに配置します。
  2. すべてのファイルをアップロードします(media_uploads_create_session、scripts/upload_parts.py、media_uploads_complete_session)、一度に1つずつ。IDをmediaIdsとcoverIdに配置し、次にpython3 scripts/schedule.py plan.json --bodies-onlyを実行します。
  3. posts_validateで全てのリクエストを検証します。拒否されたものがあれば修正します。
  4. 承認後: リクエストごとにposts_createを実行し、各投稿IDをターゲットのpostIdに書き込み、posts_getでステータスを取得し、次にpython3 scripts/log.py record plan.jsonを実行します。
  5. ユーザーに、スケジュールされた内容(アカウント、タイムゾーン付き時刻)と、アプリ内で追加する必要があるもの(checklist項目と代替テキスト)を正確に伝えます。

接続されておらず、接続したくない場合?ファイル、キャプション、代替テキスト、スケジュールを渡して停止します。何かが投稿またはスケジュールされたのに、そうでない場合、決してそう言ってはいけません。

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

3~7日後: social_account_posts_listでアカウントのデータを取得し、metrics.jsonとして保存。次に

python3 scripts/log.py results --metrics metrics.json [--csv insights.csv]

送信数、保存数、リーチあたりのフォロー数を投稿ごとにランク付けします(同じアカウントの同じフォーマットで、経過日数が類似(3~10日)の投稿とのみ比較)。ベストポストは、フォーマットの投稿が6つ以上集まった場合にのみ命名します。投稿時間に関するアドバイスは、時間枠ごとに十分な投稿がある場合にのみ提供します。ストーリーは除外されます。insights.csvは、アプリのみが表示するものを追加します: フォロー数、およびリールの平均視聴時間とリーチ(APIでは利用できない場合)。

関連スキル