この記事ではAIエージェントに特化して解説します。AIエージェント全般は AIエージェントフレームワーク比較2026年版 をご覧ください。
social-auto-uploadが解決する「7つのSNS運用地獄」
抖音・Bilibili・小紅書・快手・TikTokと複数のSNSプラットフォームを横断運用しているクリエイターにとって、同じ動画・画像を各プラットフォームに個別投稿する作業は1日を食いつぶすボトルネックだ。プラットフォームごとにUIが違い、動画仕様が違い、ハッシュタグの作法も違う。投稿だけで毎日数十分が消えていく。
social-auto-upload(以下 sau)は、この繰り返し作業を丸ごと自動化するオープンソースツールだ。GitHub上で9,000を超えるスターを獲得しており、中国圏SNSを中心とした7つのプラットフォームへの動画・画像アップロードと定時発布を単一のCLIから操作できる。
内部ではブラウザ自動化エンジン patchright を採用しており、ヘッドレスモードでの実行にも対応する。サーバー上での常駐運用、GitHub ActionsなどのCI/CDパイプラインへの組み込み、AI Agentからの自動操作まで、運用シナリオの自由度が高い。
sauの核にある思想は「SNS投稿の標準化」だ。プラットフォームごとにバラバラだったログイン・アップロード・定時発布の作法を、sau <platform> <verb> という統一文法にまとめる。プラットフォームが増えても、使う側のメンタルモデルは増えない。
AiToEarnのSNS自動投稿機能はマルチプラットフォーム投稿のSaaSに近い立ち位置だが、sauは完全なオープンソースでローカル完結する点が特徴だ。自前のサーバーでcronと組み合わせれば、外部SaaSに投稿データを預けずに同等の自動化が構築できる。
複数SNS横断運用の最大コストは「同じ投稿を何度も手で繰り返す作業」
sauは7プラットフォーム分の投稿作法を統一CLIにまとめる自動化ツール
patchright+ヘッドレスでサーバー常駐・CI/CD・AI Agent連携まで対応
対応プラットフォームと機能マトリクス
sauが対応しているプラットフォームと各機能の対応状況を、公式READMEの情報に基づき整理する。
| プラットフォーム | ログイン | 動画アップロード | 画像・テキスト投稿 | 定時発布 | CLI対応 | Skill対応 |
|---|---|---|---|---|---|---|
| 抖音(Douyin) | 対応 | 対応 | 対応 | 対応 | 対応 | 対応 |
| Bilibili | 対応 | 対応 | 非対応 | 対応 | 対応 | 対応 |
| 小紅書(ブラウザ版) | 対応 | 対応 | 対応 | 対応 | 対応 | 対応 |
| 快手(Kuaishou) | 対応 | 対応 | 対応 | 対応 | 対応 | 対応 |
| 視頻號 | 対応 | 対応 | 非対応 | 対応 | 未対応 | 未対応 |
| 百家號 | 対応 | 対応 | 非対応 | 対応 | 未対応 | 未対応 |
| TikTok | 対応 | 対応 | 非対応 | 対応 | 未対応 | 未対応 |
抖音・小紅書・快手は「動画 + 画像テキスト」の両輪をカバーしており、CLIとSkillの両方が利用できる。Bilibiliは動画アップロードに特化し、内部で biliup ライブラリを呼び出して高速アップロードを実現する。視頻號・百家號・TikTokはブラウザ自動化による動画アップロードと定時発布が可能だが、CLI統一への接続は今後の対応予定だ。
「CLI未対応」でも使える理由
表の「CLI未対応」を「使えない」と誤解しないでほしい。視頻號・百家號・TikTokも、uploader/ ディレクトリにあるPythonモジュールを直接importすれば動作する。sauのリファクタリング計画は「全プラットフォームをsau CLIに寄せる」という方向であり、既存機能が落ちているわけではない。
「
sauコマンドは単なる入口。本体はプラットフォームごとのUploaderモジュールで、スクリプトから直接呼び出すこともできる」──公式ドキュメントより
Browser Useのようなブラウザ自動化エージェントと比較すると、sauはSNS投稿に特化しているため、各プラットフォーム固有のUI・レート制限・ログイン維持ロジックに最適化されている。汎用ブラウザ自動化で頻発する「想定外のダイアログで固まる」「ログインが毎回切れる」といった問題を回避しやすい。
7プラットフォーム対応、うち4つ(抖音・Bilibili・小紅書・快手)はCLI・Skill完備
Bilibiliは `biliup` を内部呼び出しして動画アップロードを高速化
CLI未対応のプラットフォームもPythonモジュール直接呼び出しで利用可能
インストールと環境構築:手動とAI Agent経由の2ルート
sauのインストールは2通りある。自分でコマンドを叩く手動インストールと、AI Agentに丸投げする自動セットアップだ。
方法1:手動インストール(uv推奨)
公式ドキュメントは uv パッケージマネージャを推奨している。pip でも動作するが、依存解決速度と仮想環境管理の観点から uv が適している。
# 1. リポジトリをクローン
git clone https://github.com/dreammis/social-auto-upload.git
cd social-auto-upload
# 2. uv をインストール(未導入の場合のみ)
pip install uv
# 3. 依存をインストール
uv sync
# 4. CLI動作確認
sau --help
uv sync 1コマンドで仮想環境作成・依存インストール・CLIエントリポイント登録までが一気通貫で完了する。従来の python -m venv && pip install -r requirements.txt と比較して、セットアップ時間は数分から数十秒に短縮される。
方法2:AI Agentによる自動セットアップ
Claude Code、Codex、OpenClawといったAI Agentを利用している場合、リポジトリと docs/agent-bootstrap.md に書かれたAgent Bootstrap Promptを渡すだけで、Agentがインストールから動作検証までを代行する。
# Agentに渡す指示例
このリポジトリ https://github.com/dreammis/social-auto-upload をクローンして
uv でセットアップし、bilibili / douyin / kuaishou / xiaohongshu の
4プラットフォームの入口(sau CLI)が使えるか確認してください。
失敗した場合は原因を調査してログに残してください。
Agent Bootstrap Promptは、AI Agentに対して次の手順を自動実行させる設計になっている。
- 主線ブランチに基づいたプロジェクトのインストール
uvとsauCLIの優先使用- bilibili・douyin・kuaishou・xiaohongshuの4プラットフォームの動作検証
- 失敗時は環境変数・Python版数・ネットワークなどの切り分け
手元のマシンに直接依存を入れたくない(サンドボックスで試したい)
複数台のサーバーに同じ環境をばらまきたい(Ansible代替)
「動かない」時の切り分けをAgentに任せたい
OpenHandsのようなAIコーディングエージェントに作業を委譲すれば、セットアップ・アップロード・定時発布設定までを完全自動化することも可能だ。
推奨インストール手段は `uv sync` 一発、従来比で大幅に時短
AI Agent経由なら Bootstrap Prompt 1つでインストール〜動作検証まで自動化
サーバー常駐・チーム配布・マシン横断展開のいずれにも適用可能
sau CLI完全ガイド:ログインからアップロードまで
sauのCLIは sau コマンドに集約されている。各プラットフォームはサブコマンドとして実装され、--account でアカウントを切り替える設計だ。
共通文法
sau <platform> <verb> [options]
<platform> : douyin | bilibili | xiaohongshu | kuaishou | ...
<verb> : login | check | upload-video | upload-note | ...
この platform + verb 構造が、sauを学習しやすくしている最大の設計判断だ。新しいプラットフォームを覚えても、既存のverbが使い回せるため、頭の中のコマンドセットが指数的に膨らまない。
抖音(Douyin)への投稿
# ログイン(QRコード認証)
sau douyin login --account myaccount
# ログイン状態の確認
sau douyin check --account myaccount
# 動画アップロード
sau douyin upload-video \
--account myaccount \
--file videos/demo.mp4 \
--title "動画タイトル" \
--desc "動画の説明文"
# 画像テキスト投稿(図文投稿)
sau douyin upload-note \
--account myaccount \
--images images/1.png images/2.png \
--title "図文タイトル" \
--note "図文の本文"
小紅書(Xiaohongshu)への投稿
# ログインと確認
sau xiaohongshu login --account myaccount
sau xiaohongshu check --account myaccount
# 動画アップロード
sau xiaohongshu upload-video \
--account myaccount \
--file videos/demo.mp4 \
--title "動画タイトル" \
--desc "動画の説明文"
# 画像テキスト投稿
sau xiaohongshu upload-note \
--account myaccount \
--images images/1.png images/2.png images/3.png \
--title "図文タイトル" \
--note "図文の本文"
Bilibiliへの投稿
# ログイン(QRコード認証)
sau bilibili login --account myaccount
# 動画アップロード(tidはカテゴリID)
sau bilibili upload-video \
--account myaccount \
--file videos/demo.mp4 \
--title "動画タイトル" \
--desc "動画の説明文" \
--tid 249
Bilibiliは内部で biliup を利用するが、初回実行時に自動ダウンロードされるため手動インストールは不要だ。以降の実行時には上流リリースの自動更新チェックも走る。
快手(Kuaishou)への投稿
# ログインと確認
sau kuaishou login --account myaccount
sau kuaishou check --account myaccount
# 動画アップロード
sau kuaishou upload-video \
--account myaccount \
--file videos/demo.mp4 \
--title "動画タイトル" \
--desc "動画の説明文"
# 画像テキスト投稿
sau kuaishou upload-note \
--account myaccount \
--images images/1.png images/2.png images/3.png \
--title "図文タイトル" \
--note "図文の本文"
--account の使いどころ
--account の値は任意の識別名で、1つのアカウント名に1つのログインセッションが紐づく。複数アカウントを登録しておけば、アカウント名を切り替えて並行投稿できる。本アカウントとサブアカウント、個人用と法人用、A/Bテスト用と本番用など、運用パターンに合わせて切り分けるのが定石だ。
アカウント切り替えを「フラグ1つ」に寄せたことで、複数人・複数ブランドの運用が劇的に楽になる。
# 3アカウントへ同じ動画を連続投稿する例
for acc in brand-a brand-b personal; do
sau douyin upload-video \
--account $acc \
--file videos/demo.mp4 \
--title "新商品のお知らせ" \
--desc "詳細はプロフィールから"
done
`sau <platform> <verb>` の統一文法で新プラットフォームも学習コスト低
動画(upload-video)と図文(upload-note)の2系統を同じフラグ体系でカバー
`--account` の識別名でマルチアカウント運用を1フラグで実現
内部アーキテクチャ:3層構造のブラウザ自動化エンジン
sauの内部構造は、CLI層・Uploader層・ブラウザ自動化層の3層になっている。
コマンドパーサー"] B --> C["Uploader層
プラットフォーム別ロジック"] C --> D["抖音 Uploader"] C --> E["Bilibili Uploader
(biliup連携)"] C --> F["小紅書 Uploader"] C --> G["快手 Uploader"] C --> H["TikTok / 視頻號 / 百家號"] D --> I["patchright
ブラウザ自動化エンジン"] F --> I G --> I H --> I E --> J["biliup
API直接呼び出し"] I --> K["ヘッドレスChromium
(無頭模式)"] K --> L["各SNSプラットフォーム"] J --> L
各層の責務
| 層 | 役割 | 主な技術 |
|---|---|---|
| CLI層 | コマンドパース、引数検証、Uploader呼び出し | Click相当のCLIフレームワーク |
| Uploader層 | プラットフォームごとの投稿手順・UI操作の抽象化 | 各 uploader/<platform>/ モジュール |
| ブラウザ層 | 実ブラウザ経由の操作、Cookie・セッション管理 | patchright(Playwrightフォーク) |
| API層 | BilibiliなどAPI直叩きが可能なプラットフォーム | biliup ライブラリ |
この3層分離により、新プラットフォーム追加は「Uploader層にモジュールを1つ足す」作業に収まる。CLIやブラウザ層のコードを書き換える必要がない。
patchrightを選んだ理由
sauはPlaywrightそのものではなく、自動化検知耐性を強化したフォーク patchright を採用している。SNSプラットフォームの多くはnavigator.webdriver などのブラウザフィンガープリントを見て自動化を検知・ブロックするが、patchrightはこれらの検知ポイントにパッチを当てている。
「ヘッドレス検知を通過するための選択。Playwrightそのままではログインフローで弾かれるケースがあった」──開発者コメント(Issue議論より要約)
BilibiliだけはAPIが公開されているため、ブラウザではなく biliup 経由の直接アップロードを採用している。ファイルサイズが大きくなりがちな動画アップロードで、ブラウザ経由のオーバーヘッドを避ける判断だ。
CLI・Uploader・ブラウザの3層分離で新プラットフォーム追加は「1モジュール」で完結
自動化検知耐性を上げた `patchright` で安定したヘッドレス実行を確保
Bilibiliのみ `biliup` API直叩きで大容量動画アップを高速化
Skill化とAI Agent連携:投稿作業をClaudeに教える
sauの際立った特徴のひとつが、AI Agent向けのSkill化だ。各プラットフォーム向けに skills/<platform>-upload/SKILL.md が用意されており、Claude CodeやOpenClawなどのAI Agentから直接操作できる。
提供されているSkillファイル
| Skill | ファイルパス | 主な機能 |
|---|---|---|
| Douyin Upload Skill | skills/douyin-upload/SKILL.md |
抖音への動画・画像投稿 |
| Kuaishou Upload Skill | skills/kuaishou-upload/SKILL.md |
快手への動画・画像投稿 |
| Xiaohongshu Upload Skill | skills/xiaohongshu-upload/SKILL.md |
小紅書への動画・画像投稿 |
| Bilibili Upload Skill | skills/bilibili-upload/SKILL.md |
Bilibiliへの動画投稿 |
各SKILL.mdには、AI Agentが理解できる形式でログイン手順、アップロード手順、エラーハンドリングが記述されている。Skillファイルをプロジェクトに配置するだけで、AgentがCLIの使い方を理解してユーザーの指示を解釈できるようになる。
AI Agent連携のフロー
(Claude Code等) participant S as SKILL.md participant C as sau CLI participant P as SNSプラットフォーム U->>A: "動画をdouyinとxiaohongshuに投稿して" A->>S: SKILL.md をロード S-->>A: sau CLIの使い方を返す A->>C: sau douyin upload-video ... C->>P: ブラウザ自動化で投稿 P-->>C: 投稿URL A->>C: sau xiaohongshu upload-video ... C->>P: ブラウザ自動化で投稿 P-->>C: 投稿URL A-->>U: 投稿結果をまとめて報告
Skill化の価値は「自然言語で指示できる」点にある。ユーザーは「この動画をdouyinとxiaohongshuに投稿して」と書くだけで、Agentが該当Skillをロードし、適切なCLIコマンドを組み立て、結果を報告してくれる。
手動 vs CLI vs AI Agent + Skill
| 項目 | 手動運用(ブラウザ) | sau CLI | AI Agent + Skill |
|---|---|---|---|
| 投稿所要時間(7プラットフォーム) | 30分以上 | 5〜10分 | 2〜3分 |
| 定時発布設定 | 各プラットフォームで個別設定 | CLIオプションで指定 | 自然言語で指示 |
| 複数アカウント管理 | ブラウザプロファイル切替 | --account で切替 |
アカウント名指定 |
| エラー時の対応 | 手動で再操作 | エラーログ確認 | Agentが自動リトライ |
| セットアップ難度 | 不要 | 中程度 | 低(Agentが自動実行) |
| 再現性・自動化 | 人依存で揺れる | スクリプト化可能 | 指示テンプレ化で完全再現 |
ForgeCodeのようなAIコーディングツールと組み合わせれば、投稿コンテンツの生成(台本・サムネイル・キャプション)からアップロードまでを一貫して自動化するワークフローも構築できる。
SKILL.mdの冒頭に「いつ使うか」のトリガーワードを明示する
コマンド例は動作確認済みのものだけを載せる(Agentはそのまま実行する)
エラー時のリトライ手順・切り分け観点を箇条書きで含める
主要4プラットフォームにSkill同梱済み、AI Agentが自然言語で投稿作業を解釈
SKILL.mdには CLIの使い方・エラーハンドリングまで記述されている
Agent + Skill構成は「7プラットフォーム2〜3分投稿」まで時短可能
定時発布・スケジューリングの設計パターン
sauが個別投稿だけでなくクリエイターに選ばれている理由は、定時発布への対応だ。各プラットフォームは元々「予約投稿」機能をUIで提供しているが、プラットフォーム間で時刻設定・タイムゾーン・許可される日時幅がバラバラで、手動運用では統一が面倒だ。
sauの定時発布機能
多くのUploaderが --publish-at のような日時指定オプションに対応している(プラットフォーム・バージョンにより挙動が異なるため、最新の sau <platform> upload-video --help を参照すること)。定時発布は各プラットフォームのネイティブ予約投稿APIに委譲する形で実装されている。
cronで外側から定時実行する
より柔軟なのは、cronやGitHub Actionsで sau コマンドそのものを定時実行する設計だ。
# crontab 例:毎日8時・12時・20時に動画アップロード
0 8,12,20 * * * cd /opt/sau && /usr/local/bin/sau douyin upload-video \
--account brand-a \
--file /data/queue/next.mp4 \
--title "朝の更新" --desc "本日の一本"
# GitHub Actions 例
name: daily-upload
on:
schedule:
- cron: "0 23 * * *" # JST 08:00
jobs:
upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install uv && uv sync
- run: sau douyin upload-video --account $ACC --file $FILE --title "$T" --desc "$D"
env:
ACC: brand-a
FILE: videos/today.mp4
T: 朝の更新
D: 本日の一本
「cron + sau CLI」の組み合わせで、サーバー1台で7プラットフォーム分のスケジュール投稿を一元管理できる。プラットフォーム側の予約UIを開き直す必要がない。
投稿時刻の選択と運用
定時発布で悩みやすいのが「何時に投稿するか」だ。プラットフォームごとに視聴のピーク時間が異なるため、アカウントごとにインサイトを確認して最適化するのが望ましい。sau自体には分析機能はないため、視聴データはプラットフォーム側のアナリティクスで確認する。
定時発布はプラットフォームのネイティブ予約に委譲、CLIフラグで指定できる
cron / GitHub Actionsで `sau` を外側から定時実行すれば一元管理が可能
投稿時刻の最適化は各プラットフォームのアナリティクスで行う
導入時の注意点と現在の開発ステータス
sauを本番運用に組み込む前に、把握しておきたい注意点を整理する。
プラットフォーム仕様変更への備え
ブラウザ自動化に依存するため、各SNSのUI変更・内部API変更で一時的に動作しなくなる可能性がある。GitHub Issues・Discussionsで最新の動作状況を確認する習慣が欠かせない。
# 週次の健全性チェック例
sau douyin check --account myaccount
sau bilibili check --account myaccount
sau xiaohongshu check --account myaccount
sau kuaishou check --account myaccount
cronで毎朝 check サブコマンドを走らせ、失敗時にSlack通知する設計がおすすめだ。
ヘッドレスモード(無頭模式)が主線
現在の開発方針では、無頭模式(ヘッドレス)が主線となっている。ブラウザウィンドウを表示せずにバックグラウンド処理が走るため、VPSやコンテナでの常駐運用に向く。開発中のデバッグではヘッドフルモードに切り替えて挙動を観察する運用が現実的だ。
Web版は非推奨
過去にはWeb UIが提供されていたが、現在のメインラインではCLIとSkillが主軸で、Web版のコードは保守対象外となっている。「Web UIがあるから簡単そう」という理由でsauを選ぶのは避けたほうがよい。
Bilibiliログインの注意
BilibiliのQRコード認証は、ユーザーが実際のターミナルで実行することが推奨されている。QRコードが端末に正しく表示されない場合は、生成される qrcode.png を直接開いてスキャンする方法が案内されている。SSH越しのヘッドレスサーバーに対しては、一度ローカルでログインしてCookieを持ち込む運用が現実的だ。
リファクタリングの進行
2026年3月時点で、プロジェクトは大規模なリファクタリング中だ。各プラットフォームUploaderの構造統一、CLI統一接入、patchrightへの移行が進められている。バージョンアップ時はREADMEとCHANGELOGを必ず確認すること。
# 定期メンテ
git pull origin main
uv sync
sau --version
週次 `check` サブコマンドで各アカウントのログイン維持を監視
ヘッドレス環境でログインCookieが切れた場合の復旧手順を文書化
投稿失敗時のアラート(Slack/Discord/メール)を cron から飛ばす
最新リリースの breaking change を `git log` で追う
UI変更リスクは常にある、`check` サブコマンドで週次ヘルスチェック必須
ヘッドレス主線・Web UIは非推奨、本番運用はCLIまたはSkillに寄せる
リファクタ進行中につきバージョンアップ時はCHANGELOG確認を習慣化
類似ツール比較:いつsauを選び、いつ他を選ぶか
SNS自動投稿ツールは複数存在する。sauの得意領域と不得意領域を把握したうえで選ぶのが重要だ。
| ツール | 得意な領域 | 苦手な領域 | 向いているユーザー |
|---|---|---|---|
| social-auto-upload | 中国圏SNS・CLIでの大量投稿・AI Agent連携 | 英語圏SNS(Instagram等)の一部・SaaS的UI | 中国圏クリエイター・エンジニア・Agent運用者 |
| AiToEarn | マルチプラットフォーム統合・報酬管理 | セルフホスト・完全ローカル運用 | 個人クリエイターでSaaS利用前提 |
| 純正の各プラットフォーム予約投稿 | プラットフォーム仕様100%追従 | 横断運用・複数アカウント | 単一プラットフォームに集中する運用 |
| 汎用ブラウザ自動化(Browser Use等) | カスタム操作・未対応サイト | SNS固有のログイン・UI安定性 | 一度きりの特殊運用 |
sauが最も刺さるのは、「中国圏SNSを継続的に横断運用する」かつ「自前サーバー/オンプレで完結させたい」ユーザーだ。AiToEarnのようなSaaSは手軽だが、投稿データの外部預けを避けたい企業・クリエイターにとってsauの価値は大きい。
選定フロー
中国圏中心か?"} B -->|"Yes"| C{"自前サーバーで
運用したいか?"} B -->|"No"| D["英語圏向けSaaSや
各プラットフォーム純正予約"] C -->|"Yes"| E["social-auto-upload
(本記事)"] C -->|"No"| F["AiToEarn等SaaS"] E --> G{"AI Agentに
委譲したいか?"} G -->|"Yes"| H["Skill + Claude Code等"] G -->|"No"| I["sau CLI + cron"]
中国圏SNS横断 × 自前運用ならsauが第一候補
SaaS志向ならAiToEarn、単一プラットフォームなら純正予約で十分
AI Agent委譲を狙うならsau + Skill + Claude Codeの組み合わせが最強
📌 まとめ
social-auto-uploadは、抖音・Bilibili・小紅書・快手・視頻號・百家號・TikTokの7プラットフォームを横断運用するクリエイター/マーケター/エンジニアのための、実用段階にあるオープンソースSNS自動投稿ツールだ。
本記事で見てきたポイントを再整理する。
- 統一文法:
sau <platform> <verb>の構造で新プラットフォームの学習コストが増えない - 3層アーキテクチャ:CLI → Uploader → patchright / biliup の分離で拡張しやすい
- Skill同梱:主要4プラットフォームにSKILL.md同梱、AI Agent連携で自然言語操作が可能
- 定時発布:プラットフォーム予約APIとcron / GitHub Actionsの二刀流で一元管理
- ヘッドレス主線:VPS常駐・CI/CD組み込みが容易、Web UIは非推奨
- 注意点:UI変更リスクへの週次ヘルスチェック、Bilibiliログインの端末依存、リファクタ進行中
「SNS投稿の繰り返し作業にかかっている毎日30分を、フォルダ1つのセットアップで2〜3分に圧縮する」──それがsauの提供価値だ。
もしあなたが複数SNSを横断運用しているクリエイターで、自前サーバーまたはAI Agent環境を持っているなら、今日 git clone から始める価値は十分にある。まず sau douyin login --account test でログインを通し、1本の動画をアップロードするところから体験してみてほしい。