AIを使った車輪の再発明シリーズ

この記事の要点

  • Instagram投稿は完全自動化よりも、レビューを挟む半自動フローの方が現実的で安全。
  • Python、AIエージェント、Bufferを組み合わせることで、投稿準備の手間をかなり減らせる。
  • レビュー用HTMLを生成してから公開判断する構成にすると、誤投稿や微妙な文面を防ぎやすい。
  • 市場価値の高いツールでなくても、自分の作業を楽にする自動化には十分意味がある。

今回は、個人で開発しているWebアプリのコンテンツを、Instagramへ半自動で投稿するツールをAIエージェントが作成してくれた(確認含めて所要時間1h程度)。

情報商材の人たちがよく売っていたり、先人たちが便利なTipsを公開していたりする分野なので、今更感しかないのでツール的な価値はほぼない(何とは言わないが、コンテンツを爆増したからと言って、この程度のツールで月収n万円アップ!なんてことは絶対にない)。

このツールを作った動機は単純で、個人的にインスタを見ていると頭痛がしてくる病のためである。半自動化にしたのはレビューフローを挟みたかったのと、そもそもInstagramは完全自動投稿が規約違反なので、全自動という選択肢がない。

仕組みの概要

詳細は省くが、構成は極めて単純である。

  1. Webアプリからデータを取得。
  2. AIがInstagram用のキャプションとハッシュタグを生成。
  3. ローカルにレビュー用のHTMLが生成されるので確認と調整。
  4. 確認ができたら、画像をImgurなどの外部サーバーへアップロード(Instagram Graph APIの仕様上、外部URLが必要なため)し、Bufferにキュー登録。
  5. Buffer上のスケジュールに任せるか自分でpublishする。

アーキテクチャ

Step 1: main.py URL入力 │ ▼ [1] requests + BeautifulSoup HTMLスクレイピング タイトル/メタ/見出し/本文を抽出 │ ▼ [2] Playwright (headless Chromium) サイトのスクリーンショット取得 output/{domain}.png │ ▼ [3] Gemini API (gemini-2.5-flash) 抽出テキスト JSON生成 { slides[4], caption, hashtags } │ ▼ [4] Pillow 1080×1080px スライド画像 × 4枚生成 スクリーンショットをカバー/解決スライドに合成 │ ▼ output/{domain}/ ├── {domain}.json ← 生成コンテンツ ├── slide_1_cover.png ├── slide_2_problem.png ├── slide_3_solution.png ├── slide_4_cta.png └── {domain}_canva.csv ← Canva一括作成用 ブラウザでHTMLプレビューを表示 (--preview) │ │ レビューOKなら ▼ Step 2: buffer_poster.py [1] Firebase Storage slide_*.png をアップロード 公開URL取得 │ ▼ [2] Buffer GraphQL API createPost mutation (carousel / 4枚画像 + キャプション + ハッシュタグ) │ ▼ Instagram キューに追加 / 予約投稿

💡 ポイント: 車輪の再発明かもしれませんが、自分のワークフローに最適化されたツールを1時間で作れるのは、今の時代の個人開発の醍醐味です。ツールとしての価値は低くても、自分の快適さを追求することに意味があります。

よくある質問

なぜInstagram投稿を完全自動化ではなく半自動化にしたのか?

運用ルールの観点でも、実務上の品質管理の観点でも、人間の確認を最後に入れる方が安全だからです。キャプションやハッシュタグは少しの違和感で成果が変わるので、レビュー工程を残しています。

この自動投稿ツールはどんな流れで動く?

コンテンツ取得、AIによる投稿文生成、HTMLプレビューでの確認、画像の外部URL化、Bufferへのキュー登録という流れです。完全な一発投稿ではなく、確認しやすさを重視したパイプラインにしています。

AIエージェントを使う価値はどこにある?

既存SaaSを探して調整するより、自分のワークフローにちょうど合う小さな自動化を短時間で作れる点です。特に「作るほどではないが毎回面倒」な作業に強いと感じています。

関連記事

← 前の記事:noteで「人」を探す難しさ 一覧 次の記事:Google Maps APIの課金爆発の話 →