- 公開日:
AIとGitHub Actionsで定期的に記事の宣伝をXに投稿する
- Authors
- Name
研究ノートと銘打ったこのブログもだいぶ記事が溜まってきた。以前に投稿した記事もXなどで露出を図るとよいのだが、文面を考えるのが面倒でつい放置してしまっていた。
そこでAIに文面を考えてもらい、GitHub Actionsのスケジュールワークフローで定期的な宣伝を繰り返す仕組みを構築した。
ひとまず1日2回、以下のような過去記事へ誘導する投稿が無人で行われるようになった。

処理の流れ
次のように非常にシンプルだ。
- GitHub Actionsのスケジュールワークフローを設定する
- ランダムに記事を抜き出す
- AIに投稿文を考えてもらう
- URLを付加してXにポストする
GitHub Actions スケジュールワークフロー
GitHub ActionsのワークフローはCron形式で指定したスケジュールでも自動実行できる。日本時間の9時と15時に起動するようにした。
on:
schedule:
# 日本時間 09:00 (UTC 00:00)
- cron: '0 0 * * *'
# 日本時間 15:00 (UTC 06:00)
- cron: '0 6 * * *'
このブログはGitHubで公開しているので、以下で全体を確認できる。
ランダムに記事を抜き出す
記事は年ごとにMarkdownで書いている。これをランダムにひとつ抜き出す。
まだ1年も経っていないので全ての記事を対象にしているが、ゆくゆくは直近1年とか、新しい記事が確率的に出やすくする工夫をしたい。
AIに投稿文を考えてもらう
抜き出した記事のMarkdown原稿を生成AI(Gemini)に渡し、宣伝のための投稿文を考えてもらう。
この投稿文を考えるのが苦手だ。ある程度キャッチーな文言でアクセスを誘いたいが、自分のつまらない頭から捻り出すのはとても疲れる。AIが考えてくれるなんて最高だ。
プロンプトでは例をいくつか与えた。
1. **全体の要約**: 「この記事では〇〇の全体像をわかりやすく解説しています」
2. **意外性のある事実**: 「えっ、〇〇って実は△△だったの?」
3. **困りごとへの問いかけ**: 「〇〇で悩んでいませんか?」
4. **新たな提言・推奨**: 「これからは"〇〇"が当たり前になるかもしれません」
5. **物語・体験談風の導入**: 「昔、〇〇で失敗した話をします…」
6. **数字・統計を使った強調**: 「〇〇%の人が知らない〇〇の話」
7. **常識への疑問・ツッコミ**: 「"〇〇すべき"って本当? 実は…」
8. **図解・スライド付きで視覚訴求**: 「この記事を図解でまとめました👇」
9. **比較・ランキング風**: 「3つの〇〇を試してみた。最も効果的だったのは…」
10. **引用・一節紹介**: 「"〇〇〇〇"──この記事で一番響いた一文」
11. **Before/After型の変化を見せる**: 「この記事を読む前のあなた→〇〇。読んだ後のあなた→△△」
12. **対立構造で煽る**: 「あなたは〇〇派?それとも△△派?」
13. **タイムリーな話題に便乗**: 「今日のニュースを見てこの記事を思い出しました」
14. **失敗や後悔の共有**: 「昔の自分に教えたい記事」
15. **短いクイズ・なぞかけ風**: 「Q. なぜ〇〇がうまくいかない?A. 答えはこの記事に👇」
16. **あえて結論を隠す型**: 「読んだ後に"ゾッとする"内容です…」
17. **制作背景・裏話**: 「この記事を書いた理由は〇〇です」
18. **ミニマル強調(たった1つ)**: 「"これ1つ"だけで〇〇が改善します」
19. **逆張りの視点**: 「実は〇〇って必要ないと思ってます」
21. **明確な対象提示型**: 「✔〇〇な人へ届けたい内容です」
22. **他記事・著名人との関連付け**: 「〇〇さんの話を聞いてこの記事を思い出しました」
23. **保存・再訪を促す**: 「これは"ブックマーク必須"の記事です」
当然、この例も生成AIに考えてもらい、自分で少し調整した。これがレギュレーションにもなり、突拍子のない投稿を防止する役割にもなると期待している。
ちょっとあざとい気もするが、自分では思いつかないフレーズばかりだ。返ってAIに任せてよかった、となるかもしれない。
次のXへのポストも含め、以下のファイルに一連の処理を記述している。
APIでXにポストする
最後に作成された投稿文をAPI経由でXにポストする。
API経由のポストは、次の認証情報さえあれば簡単だった。
TWITTER_APP_KEY
TWITTER_APP_SECRET
TWITTER_ACCESS_TOKEN
TWITTER_ACCESS_SECRET
認証情報は開発者ポータルから取得し、先ほどのGemini用のAPIキーと合わせてGitHubのSecrets(機密情報)に登録しておく。
月間500ポストまでは無料プランで利用できる。
なお、開発者ポータルに入るときにどのような目的で利用するのか記述を求められた。英語で250語以上が必要とのことで、意外と長文になる。大きな声では言えないが、このプロジェクトの概要を伝え、ChatGPTに考えてもらった。
今後の展開
更新頻度は低いがブログもあり、また、Qiitaにもときどき記事を書く。それら過去記事についても同様に露出を増やしていきたい。
Facebookにもいちおう企業ページがあり、Threads、Blueskyなどの新興SNSも気にはなっている。今までは運用する時間がなくて放置していたが、AIの力を借りて改めて活用したい。
また、AIに質問してもらうなど、ネタフリをしてもらう活用もよいと考えている。自分から企画を考えるのは、必然性、つまり今なぜそのネタなのか?を問うて頭が重くなることがある。それに比べると質問に回答するのはキータッチが走る。
いずれにせよ、やらなきゃやらなきゃと思っていた作業からひとつ解放された。AIがどんどん心強い味方になっている。