X(Twitter)に GitHub Actions を使用して予約投稿するツール(スレッド投稿にも対応)を作ってみた

ある程度まとまった数の X(Twitter)予約投稿、かつスレッド投稿を含むものを効率よく管理、自動投稿するためのツールを Node.js 環境で作ってみたという話。GitHub Actions を使用することで、予約投稿用の YAML を作るだけで比較的簡単に自動投稿の仕組みが回せます。

X (Twitter) で、予約投稿をある程度ためておいて定期的にツイート (ポスト) するような運用を考えたとき、単発ツイートだけじゃなくて、スレッド投稿もできると便利。

ところが、X (Twitter) が標準で提供している予約投稿機能って、スレッド投稿に対応していなくて、X Pro (TweetDeck ですね) もそういう機能は持っていないので、面倒くせぇなと思っていたんですが、じゃあ自分が使いやすいように簡単に作っちゃおってことで以下に公開しました。

何がしたかったのか

マーケティング目的で、ツイートのバリエーションをばーっと何種類も作っておいて、投稿内容や投稿時間帯を変化させつつ分析するみたいなことをやろうと思ったときに、さすがに 1 件ずつ X (Twitter) や X Pro (TweetDeck) の画面から予約投稿作ってたら面倒くさいですし、管理も大変。

また、致命的な問題点として、前述の通り標準機能だとスレッド投稿が作れないので困ったなと。もちろんサードパーティのツールなんかを探せば解決するのかもしれませんが、私がやりたいこと程度なら自前で作っても大した手間ではないだろうと言うことで新たに作ってみたという流れです。

このスクリプトは大まかに以下のような機能を持っています。

  • GitHub Actions で定期実行する事を想定したスクリプト
  • X (Twitter) API を利用 (無料版でも使える)
  • YAML で投稿用のデータを書くことができる
  • テキストの投稿だけでなく、画像や動画の添付も可能
  • 画像には個別に代替テキスト (alt) を設定することも可能
  • 単体投稿だけでなく、スレッド投稿投稿も作ることができる

対象となるユーザー

対象としては以下のような方々です。

  • スレッド投稿を含む、大量の予約投稿を Git 上で管理しながら X (Twitter) アカウントを運用したい人
  • YAML とか詳しく説明されなくてもわかる人
  • X (Twitter) API とか、GitHub Actions とか、その辺が細かいこと言われなくてもわかる人

簡単な使い方

README.md を読んでいただければだいたいわかると思うんですが、肝となる、ツイートデータは以下のように YAML で書くことができます。

schedule_at が予約投稿したい日時。スレッド投稿したい場合は、thread: でネストしていけば親投稿のツイート ID を使用してツイートをぶら下げていくことが可能です。

tweets:
  - number: 1
    schedule_at: "2026-02-02T13:00"
    text: |
      予約投稿のテストです。
      改行もそのまま反映されます。
      https://example.com
    images:
      - path: "../assets/images/one.png"
        alt: "画像の alt テキスト"
      - path: "../assets/images/two.jpg"
    thread:
      - number: 2
        schedule_at: "2026-02-02T13:20"
        text: "「number: 1」に対する返信ポストとして投稿されます。"
        thread:
          - number: 3
            text: |
              「number: 2」に対する返信ポストとして投稿されます。
              「schedule_at」が省略されているので、「number: 2」の日時指定を踏襲します
              #hashtag
            images:
              - path: "../assets/images/three.png"
                alt: "画像の alt テキスト"

  - number: 4
    schedule_at: "2026-02-03T09:30"
    text: "別の予約投稿。"
    video: "../assets/videos/demo.mp4"

標準でリポジトリに含めている、ワークフローファイル (scheduled-post.yml) は、cron を 15 分毎に実行するようにしてあるのと、GitHub Actions における cron 実行は確かベストエフォートで、確実にその指定時間通りに実行されるとは限らないため、schedule_at にあまり細かい時間を指定しても意味ないってことはご了承の程。

その辺の細かいことを気にしなければ、例えば 1ヶ月分とか、1年分のツイートデータをまとめて作っておいて、あとはほったらかしておくだけで適時投稿されるような仕組みを作ることも可能です (X API のレート制限には気をつけてくださいね)。

注意点

  • X (Twitter) の文字数制限とかあまり気にしない実装になっていますので、YAML 作る側で調整してください
  • YAML の構文がおかしかったりするとエラー吐いて投稿されません
  • うまく投稿されないなとかいう場合はログを見てご自身で解決してください

関連エントリー

記事をここまで御覧頂きありがとうございます。
この記事が気に入ったらサポートしてみませんか?