しずかなインターネット

日記やエッセイにちょうどいい
文章書き散らしサービス

ログイン

GitHub Actionsで構築する、Bluesky・Misskey・mixi2への同時投稿システム

touban_546
·
公開:2026/5/5

パソコンから、複数の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)」

🏛️ システムの全体構成

アーキテクチャは非常にシンプルです。

  1. 入力・送信: ブラウザで開ける「自作のHTMLファイル」

  2. 中継・実行: GitHub Actions (repository_dispatch で外部から起動)

  3. エンドポイント: 各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 例

https://sedate-word-409.notion.site/GitHub-Action-_-github-workflows-post-yml-357e72820163807b990ccf291a9be4e2?pvs=73

あとは、リポジトリ内に配置した 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を詰めたのですが、ローカル環境で実施した方が良さそうなので、今後はそちらを実施してみようと思います。

ということで自宅サーバに構築した話は下記です。