instagram-marketing について
instagram-marketingは、Instagramのコンテンツ企画とInstagram Graph APIの利用を支援するAIエージェント向けスキルです。投稿形式、キャプションやハッシュタグ、公開例、分析、成長戦略を扱います。
主な機能
- 01Reels、Stories、カルーセル、フィード投稿の企画
- 02ビジュアル形式とコンテンツ指針
- 03キャプションとハッシュタグの提案
- 04Graph APIによる公開の手引き
- 05アカウントと投稿の分析
- 06成長戦略とコンテンツ構成
活用シーン
- 01フィットネスコーチ向けInstagram投稿カレンダーの作成
- 02Reels、カルーセル、Storiesの企画
- 03Graph APIでカルーセルを公開するスクリプトの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ terminalskills/ skills --skill instagram-marketingインストール後、Claude Code で/instagram-marketingを入力して読み込まれたか確認します。
同梱ファイル_scores.json
詳細
Instagramマーケティング
概要
このスキルは、AIエージェントが高いパフォーマンスを発揮するInstagramコンテンツを作成し、Instagram Graph APIと連携できるよう支援します。コンテンツ形式(リール、ストーリーズ、カルーセル、フィード投稿)、ビジュアルガイドライン、キャプションの作成、ハッシュタグ戦略、API経由での公開、分析、そしてビジュアル重視でリールが中心となるInstagramのアルゴリズムに対応した成長戦略を扱います。
手順
プラットフォームのルールとアルゴリズム
Instagramのアルゴリズム(2025-2026):
- リールが最重要です — 静止画の投稿と比べてリーチが2~3倍になり、Instagramの主要な成長手段です
- 保存とシェア — 最も強いシグナルです(いいねやコメントよりも重要です)
- 視聴時間 — 最後まで視聴されたり、繰り返し再生されたりするリールは、大幅に優遇されます
- コンテンツ形式の多様性 — リール、カルーセル、ストーリーズを投稿するアカウントは、より高く評価されます
- ハッシュタグの効果は弱めです — 今はSEOを意識したキーワード入りキャプションのほうが重要です
- 継続性 — 毎日のストーリーズ+週4~7件のフィード投稿です
リーチが落ちる要因:
- 透かし入りのTikTok動画の再投稿(Instagramは積極的に表示を抑制します)
- 低解像度の画像や動画
- エンゲージメント稼ぎ(「パート2が見たい人はいいね」など)
- 非アクティブな期間(アルゴリズムは休眠アカウントを優先しなくなります)
- キャプションに過剰なハッシュタグを付けること(スパムのように見えます。30個より、ターゲットを絞った5~10個のほうが効果的です)
コンテンツ形式
リール(成長の主要な形式)
- 長さ: 最適なのは15~60秒です(最大90秒未満ですが、短いほうが効果的です)
- アスペクト比: 9:16(1080x1920px) — 全画面の縦向きです
- フック: 最初の1~2秒で、そのまま視聴されるかが決まります。テキストのオーバーレイや意外性のあるビジュアルを使います
- キャプション/字幕: 必須です — 85%以上が音声なしで視聴します
- 音楽: アルゴリズムによる優遇を得るため、トレンドの音源を使います(リールタブでトレンドの音源を確認します)
- カバー画像: 1080x1920pxのカスタムカバーを用意すると、グリッドに表示されます — テキストを重ね、すっきりとしたデザインにします
- テキストのオーバーレイ: 大きく、太字で、中央に配置します。スマートフォンでの視聴を前提にします
- CTA: 「あとで見返せるように保存」「これが必要な人にシェア」「さらに見たい人はフォロー[トピック]」
効果的なリールの種類:
- チュートリアル/ハウツー(3~5ステップの手順をビジュアルで紹介)
- ビフォー/アフターの変化
- トレンドの音源+自分のニッチなテーマのアレンジ
- ある1日/舞台裏
- テキストのオーバーレイを使ったリスト形式(「手放せないツール5選」)
- POV/共感を呼ぶシチュエーション
カルーセル(保存率が最も高い形式)
- スライド: 1つのカルーセルにつき、画像または動画を2~10枚
- アスペクト比: 1:1(1080x1080px)または4:5(1080x1350px) — 4:5のほうが画面を広く使えます
- 1枚目: フック — 大胆なタイトルを付け、サムネイルのように扱います
- 2~9枚目: 1枚につき1つのアイデアを、大きなテキストとすっきりしたデザインで示します
- 最後のスライド: CTA(保存、シェア、フォロー)+自分のハンドル名/ブランド
- スワイプの案内: 1枚目に「スワイプ →」または矢印を追加します
- デザインの統一感: スライド全体でフォント、色、レイアウトを統一します
カルーセルの種類:
- 教育系(ステップごとのチュートリアル)
- ヒント/リスト(Xについての10項目)
- ストーリーテリング(スライドを通じた物語)
- ビフォー/アフターの比較
- データ/統計のビジュアル化
ストーリーズ(毎日のエンゲージメント向上に活用)
- 長さ: 1件あたり15秒です。1日に3~7件投稿します
- アスペクト比: 9:16(1080x1920px)
- スタンプ: 投票、質問、クイズ、カウントダウンを使います(エンゲージメントを促進します)
- リンク: すべてのアカウントで利用できます(リンクスタンプ)
- ハイライト: 代表的なストーリーズをテーマ別のハイライトとしてプロフィールに保存します
- ありのままの姿: ストーリーズはフィードより作り込まれていなくても問題ありません — 完璧さより本物らしさが大切です
フィード投稿(静止画)
- アスペクト比: 1:1(1080x1080px)または4:5(1080x1350px)
- 品質: 高解像度のみを使い、一貫したビジュアルスタイル/フィルターを適用します
- 代替テキスト: アクセシビリティとSEOのために追加します(Instagramは代替テキストをインデックスします)
キャプションの書き方
[Hook line — stops the scroll, shown before "...more"]
[Empty line for spacing]
[Body — value, story, or insight. Written conversationally.]
[Break long paragraphs into 2-3 sentences max.]
[Include searchable keywords naturally — Instagram now does SEO]
[CTA — question, save prompt, or share prompt]
.
.
.
[Hashtags below dot spacers — or in first comment]
キャプションのルール:
- 1行目はフックにします(省略表示される前に表示されます)
- 教育系の投稿では150~300語にします(閲覧時間が重要です)
- 会話するような文体で書きます — Instagramは個人的な場です
- 改行と余白を入れます(テキストを詰め込まないようにします)
- キーワードを自然に盛り込みます(Instagramの検索は現在、キーワードベースです)
- ハッシュタグは5~15個にします — ニッチなもの(投稿数1万~50万件)と中規模のもの(投稿数50万~500万件)を組み合わせます
- ハッシュタグはキャプションまたは最初のコメントに入れます(どちらも効果があります。より良い方法を試してみてください)
Instagram Graph API
認証
// Instagram Graph API uses Facebook's OAuth
// Requires: Facebook Page + Instagram Professional account linked
// Step 1: Get Facebook User Access Token via Facebook Login
const FB_AUTH_URL = 'https://www.facebook.com/v19.0/dialog/oauth';
const params = new URLSearchParams({
client_id: process.env.FB_APP_ID,
redirect_uri: process.env.REDIRECT_URI,
scope: 'instagram_basic,instagram_content_publish,instagram_manage_insights,pages_show_list,pages_read_engagement',
response_type: 'code',
});
// Redirect to: FB_AUTH_URL + '?' + params
// Step 2: Exchange code for token
const tokenRes = await fetch(`https://graph.facebook.com/v19.0/oauth/access_token?client_id=${FB_APP_ID}&client_secret=${FB_APP_SECRET}&redirect_uri=${REDIRECT_URI}&code=${code}`);
const { access_token } = await tokenRes.json();
// Step 3: Get long-lived token (60 days)
const longLivedRes = await fetch(`https://graph.facebook.com/v19.0/oauth/access_token?grant_type=fb_exchange_token&client_id=${FB_APP_ID}&client_secret=${FB_APP_SECRET}&fb_exchange_token=${access_token}`);
const { access_token: longLivedToken } = await longLivedRes.json();
// Step 4: Get Instagram Business Account ID
const pagesRes = await fetch(`https://graph.facebook.com/v19.0/me/accounts?access_token=${longLivedToken}`);
const { data: pages } = await pagesRes.json();
const pageId = pages[0].id;
const igRes = await fetch(`https://graph.facebook.com/v19.0/${pageId}?fields=instagram_business_account&access_token=${longLivedToken}`);
const { instagram_business_account: { id: igAccountId } } = await igRes.json();
コンテンツの公開
// Publish single image
// Step 1: Create media container
const containerRes = await fetch(`https://graph.facebook.com/v19.0/${igAccountId}/media`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
image_url: 'https://example.com/image.jpg', // Must be public URL
caption: 'Your caption here\n\n#hashtag1 #hashtag2',
access_token: longLivedToken,
}),
});
const { id: containerId } = await containerRes.json();
// Step 2: Publish
await fetch(`https://graph.facebook.com/v19.0/${igAccountId}/media_publish`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
creation_id: containerId,
access_token: longLivedToken,
}),
});
// Publish carousel
const mediaIds = [];
for (const imageUrl of imageUrls) {
const res = await fetch(`https://graph.facebook.com/v19.0/${igAccountId}/media`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
image_url: imageUrl,
is_carousel_item: true,
access_token: longLivedToken,
}),
});
const { id } = await res.json();
mediaIds.push(id);
}
const carouselRes = await fetch(`https://graph.facebook.com/v19.0/${igAccountId}/media`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
media_type: 'CAROUSEL',
children: mediaIds,
caption: 'Carousel caption...',
access_token: longLivedToken,
}),
});
const { id: carouselId } = await carouselRes.json();
await fetch(`https://graph.facebook.com/v19.0/${igAccountId}/media_publish`, {
method: 'POST',
body: JSON.stringify({ creation_id: carouselId, access_token: longLivedToken }),
});
// Publish Reel
const reelContainer = await fetch(`https://graph.facebook.com/v19.0/${igAccountId}/media`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
media_type: 'REELS',
video_url: 'https://example.com/reel.mp4', // Public URL, mp4, H.264
caption: 'Reel caption...',
share_to_feed: true,
cover_url: 'https://example.com/cover.jpg', // Optional custom cover
access_token: longLivedToken,
}),
});
分析
// Account insights
const insightsRes = await fetch(
`https://graph.facebook.com/v19.0/${igAccountId}/insights?metric=impressions,reach,profile_views,follower_count&period=day&since=${startDate}&until=${endDate}&access_token=${longLivedToken}`
);
// Media insights
const mediaInsightsRes = await fetch(
`https://graph.facebook.com/v19.0/${mediaId}/insights?metric=impressions,reach,engagement,saved,shares&access_token=${longLivedToken}`
);
// Reel insights
const reelInsightsRes = await fetch(
`https://graph.facebook.com/v19.0/${reelId}/insights?metric=plays,reach,likes,comments,shares,saved,total_interactions&access_token=${longLivedToken}`
);
成長戦略
投稿スケジュール: リールを1日1本+カルーセルを週に2〜3本+ストーリーズを毎日
コンテンツの構成:
- リール40%(成長の原動力 — フォロワー以外へのリーチ)
- カルーセル30%(保存されやすく、ロイヤルティを高める)
- ストーリーズ20%(毎日のエンゲージメント、信頼感)
- フィード投稿10%(見た目、告知)
ハッシュタグ戦略:
- 1投稿につきハッシュタグを5〜15個
- 構成:ニッチなタグを5個(投稿数10万件未満)、中規模のタグを5個(10万〜100万件)、広く使われているタグを3〜5個(100万件以上)
- コミュニティ向けのブランドハッシュタグを作成する
- Instagramの「発見」でキーワードを検索してハッシュタグを調べる
例
例1:フィットネスコーチ向けのInstagramコンテンツ戦略を作成する
ユーザープロンプト:「テキサス州オースティン在住のパーソナルトレーナーで、フォロワーは1,200人です。オーディエンスを増やし、コーチングのクライアントを増やすための、2週間分のInstagramコンテンツ戦略を立ててください。」
エージェントは、リール、カルーセル、ストーリーズを組み合わせた14日間のコンテンツカレンダーを作成します。1週目:月曜日 — リール「ジムで間違ったやり方をしている3つのエクササイズ」(トレンドの音源、30秒、正しいフォームを示すテキストオーバーレイ)、水曜日 — カルーセル「ミールプレップガイド:8ドル以下で作る高タンパク質のランチ5選」(スライド10枚、4:5比率、1枚目にスワイプを促す案内)、金曜日 — リール「クライアントのビフォーアフター:Sarahは12週間で22ポンド減量」(ナレーション付きのビフォーアフター)。2週目も、新しいトピックで同じパターンを続けます。毎日3〜5件のストーリーズ(朝のワークアウト動画、昼のアンケート「次に投稿してほしい内容は?」、午後のカルーセルの予告)を含めます。キャプションには「腹筋のためにクランチをして時間を無駄にするのはやめましょう」のように、キーワードを含むフックと、「次のジムセッションのために保存しましょう」のような行動喚起を含めます。ハッシュタグ:ニッチなタグを5個(#AustinFitness #PersonalTrainerAustin)、中規模のタグを5個(#FitnessTips #GymMotivation)、広く使われているタグを3個(#Fitness #Workout)。
例2:Instagram Graph APIでカルーセル投稿を公開する
ユーザープロンプト:「Graph APIを使って、Instagramのビジネスアカウントに画像5枚のカルーセルを公開するNode.jsスクリプトを書いてください。画像はCDNのcdn.brightbody.co/posts/でホストされています。」
エージェントは、長期有効なFacebookアクセストークンを使ってInstagram Graph APIを利用するNode.jsスクリプトを作成します。画像URLを5つ(例:https://cdn.brightbody.co/posts/slide-1.jpgからslide-5.jpgまで)ループ処理し、is_carousel_item: trueを指定してPOST /{ig-account-id}/mediaで個々のメディアコンテナを作成し、返されたコンテナIDを収集します。次に、media_type: CAROUSEL、子要素の配列、ハッシュタグを含むキャプションを指定してカルーセルコンテナを作成します。最後に、そのカルーセルコンテナIDを指定してPOST /{ig-account-id}/media_publishで公開します。スクリプトには各API呼び出しのエラー処理と、レート制限を避けるためのコンテナ作成リクエスト間の3秒の待機時間が含まれます。
ガイドライン
- リールを優先する戦略にしましょう — 2025〜2026年にInstagramが成長のために推奨している方法です
- TikTokのウォーターマーク付き動画を再投稿しないでください — Instagramで表示が抑制されます。ウォーターマークなしで再エクスポートしてください
- カルーセルは4:5比率(1080x1350px)で投稿しましょう — フィード内のスペースを最大限に活用できます
- すべての画像に代替テキストを追加しましょう — アクセシビリティに役立ち、Instagramは検索にも活用しています
- ストーリーズではInstagram標準のテキスト/ステッカーツールを使いましょう — アルゴリズムは標準機能での作成を優先します
- ハッシュタグを最初のコメントに入れる方法とキャプションに入れる方法を両方試しましょう — 常に優れた方法はありません
- グリッドの計画にはPreviewまたはLaterアプリを使って、投稿を並べたときの見え方を確認しましょう
- DMに返信しましょう — DMでのエンゲージメントはアルゴリズムにとって強いシグナルです
- コラボレーション機能(共著者のタグ付け)を使うと、双方のオーディエンスにリーチできます
- いいね数よりも保存数が重要です — ブックマークしたくなるコンテンツを作りましょう