パソコンから、複数のSNS(Bluesky、Misskey、mixi2)へテキストを一斉送信できる自分専用の投稿ツールを構築した際の備忘録です。
半分くらい生成AIに書かせている。+2026/05/04時点での動作の状況になります。
外部の連携サービス(SaaS)に依存せず、「手元の簡易HTML」と「GitHub Actions」のみで完結させることで、APIの仕様変更や外部ツールの障害に強い堅牢なシステム構成にしています。
⏰️ 各SNSのAPI取得
投稿したい各SNSでAPIを取得します。
取得したAPIはGitHubの「⚙️Setting」→「✳️Secrets and variables」→「Actions」内の「New Repository secret」に保存します。

X(旧Twitter): 課金しないとAPIが利用できないので諦めました。
Bluesky: 「設定」→「プライバシーとセキュリティ」→「アプリパスワード」→「アプリパスワードを追加」にて必要な情報を確認可能。
mixi2: こちらに関してはメインアカウントから投稿するというよりもbot用アカウントを作成してそちらから送信という形。Developer Platformへの登録が必要。「アプリケーションを作成」から必要情報を入力して作成し認証情報から各種情報を確認可能。
Misskey: 「設定」→「サービス連携」→「アクセストークンの発行」より。権限は「アカウントの情報を見る」「ドライブを見る」「ドライブを操作する」「ノートを作成・削除する」辺りを許可。
また、HTML→GitHub用にGitHubのアクセストークンを取得する必要があり。
「Settings」→「Developer Settings」→「Personal access tokens」→「Tokens(classic)」→「Generate new token(classic)」
🏛️ システムの全体構成
アーキテクチャは非常にシンプルです。
入力・送信: ブラウザで開ける「自作のHTMLファイル」
中継・実行: GitHub Actions (repository_dispatch で外部から起動)
エンドポイント: 各SNSのAPI
ブラウザの画面からGitHub APIへPOSTリクエストを送り、それを受け取ったGitHub Actionsが各SNSへの投稿スクリプト(PythonやNode.js)を実行するという流れです。
💻 入力・送信: ブラウザで開ける「自作のHTMLファイル」
数十行のHTMLファイルを作成し、PCのデスクトップ等に置いておきます。これをブラウザで開くことで、いつでも投稿画面を呼び出せます。

HTML 例
https://sedate-word-409.notion.site/GitHub-Actions-_HTML-357e7282016380878de6ef83a49b078c?pvs=73
⚙️ バックエンド:GitHub Actionsの受け入れ設定
GitHubリポジトリ側に .github/workflows/post.yml を作成し、外部からのリクエスト(post_trigger)を受け取れるようにします。
.github/workflows/post.yml 例
あとは、リポジトリ内に配置した bot.jsの中で、環境変数 POST_MESSAGE を読み込み、以下の3つのAPIへ同時にリクエストを送る処理を書くだけです。
bot.js 例
https://sedate-word-409.notion.site/GitHub-Actions-_bot-js-357e728201638019a112f532b7c40cfe
📡 各SNSへの通信方式まとめ
それぞれのSNSで通信方式が異なるため、スクリプト内で適切に処理を分けます。
Bluesky: AT Protocolを使用。標準的なAPI通信で、アプリパスワードを利用して認証・投稿が可能。
mixi2: gRPC通信を使用。 RESTではないため、専用のgRPCクライアントをコード内に実装して投稿処理を行う必要がある。
Misskey: REST APIを使用。アクセストークンを発行し、指定のエンドポイントにJSONをPOSTするだけで簡単に投稿可能。
🚀 今後の課題:画像対応と「完全ローカル化」
テキストの同時投稿はこれで完璧に動作しますが、画像を直接送信することができません。
色々生成AIを詰めたのですが、ローカル環境で実施した方が良さそうなので、今後はそちらを実施してみようと思います。
ということで自宅サーバに構築した話は下記です。