X投稿の下書きをAIエージェントで半自動化した話 — GitHub Actions・メール通知まで

リード

こんにちは、ぽまらのです。

内省テック(Introspection Tech) のテーマで、X(@syouwanotaisyou) に毎日1本、仏教の教えと生活の実践を短く発信したいと思いました。
ただ、毎朝「調べて・書いて」は続きにくい。一方で、X への 完全自動投稿 は品質や規約の面でも不安があります。

そこで作ったのが、調査と文案作成だけを AI エージェントに任せ、確認と投稿は自分がやる半自動 の仕組みです。
実行は GitHub Actions、通知は Gmail、エージェント本体は Cursor SDK です。生成された文案は毎朝メールで届き、内容を確認してから @syouwanotaisyou に投稿しています。

この記事では、なぜ半自動にしたか、構成、つまずいた点、再現の要点をまとめます。


何を自動化し、何を人間がやるか

担当作業
エージェント題材調査、投稿文案作成、下書きファイル保存
人間(ぽまらの)内容確認、必要なら手直し、X(@syouwanotaisyou) にコピペ投稿

X API での自動投稿は 意図的に入れていません。理由は次の3つです。

  1. 品質 — 仏教の教えは出典不明の「名言」になりやすく、人間の目が必要
  2. 規約・炎上 — 自動投稿はアカウント停止リスクもゼロではない
  3. 文体 — 日本語 X は 140字上限。短く整える最終判断は自分でしたい

「毎日1本・続けられる」ことと「雑に流さない」ことのバランスを、半自動に寄せました。


投稿のテーマと1本の型

ブランド 内省テック に合わせ、次のテーマに固定しています。

  • 一言 — 仏教の教え・概念(「〜と言われる」調。偽の「仏陀の言葉」は禁止)
  • 今日の一歩 — 仕事・SNS・家事など、今日できる小さな実践
  • 文字数 — 日本語 X は 140字以内(ハッシュタグ・改行も含む)

執着を「悪い癖」にしない — 気づいて距離を置く3つの練習 で書いた CBT・ACT 寄りの内省と矛盾しないよう、仕様書でトーンも縛っています。

曜日ごとに題材の軸をローテーション(気づく/無常/慈悲…)し、直近30日と同じ概念を避けるルールもエージェントに渡しています。


全体の流れ(構成図)

flowchart LR
  subgraph cloud [GitHub Actions 毎朝7時 JST]
    A[Cursor SDK] --> B[下書き .md 作成]
    B --> C[リポジトリに commit]
    B --> D[Gmail で通知]
  end
  E[ぽまらの] --> F[メールで確認]
  F --> G[X に投稿]
  D --> F
  C --> F

もう少し噛み砕くと、次のとおりです。

  1. 毎朝 7:00(日本時間) — GitHub Actions が起動
  2. Cursor SDK — リポジトリ内の仕様書・プロンプトを読み、エージェントが1本生成
  3. social/x-drafts/YYYY-MM-DD.md — 投稿本文と出典メモを保存
  4. Gmail — 投稿本文をメールで送信(設定時)
  5. 自分 — メールまたは GitHub 上で確認 → @syouwanotaisyou に貼る

ソースコードは pomarano/x_auto_writing に置いています。


使った技術

要素選んだもの理由
エージェント実行Cursor SDK@cursor/sdk調査+ファイル保存まで一任しやすい
定期実行GitHub ActionsPCの影響を受けない
通知Gmail SMTP個人運用で設定しやすい
投稿手動半自動方針どおり

実行環境は最初から GitHub Actions にしました。


エージェントに渡している指示(要点)

エージェントへのプロンプトでは、次を必須にしています。

  • 仕様書 x-shuuchaku-agent-spec.md に従う
  • 出典不明の「仏陀の言葉」を使わない
  • 投稿本文は 140字以内(保存前に文字数を数え直す)
  • 同じ日のファイルが既にある場合は 二重生成しない(スキップ)

以前の AIハーネス実測記事 で書いたように、AI には「お願い」だけでなく ルールと検証 を渡す方が安定します。今回は文字数チェックや重複回避が、そのハーネスの簡易版だと思っています。


つまずいた点(正直なメモ)

メールが届かない

ワークフローは成功(緑)だったが、受信トレイに無い。→ 受信側でブロック されていただけ。送信元を許可リストに入れたら届くようになった。

手動実行なのにメールがスキップされた

「今日の下書きが既にリポジトリにある」と、当初は 新規作成時だけ メール送信していた。→ 手動実行(Run workflow)のときは 既存下書きでもメール するよう条件を修正。

Node.js 20 非推奨警告

GitHub Actions の checkout / setup-node / action-send-mail が古いと警告。→ v6 / v17 など Node 24 対応版に更新。

日本語 X の文字数

一度 280字想定で書いていたが、日本語投稿は140字 が上限。仕様とプロンプトを再調整した。


設定の概要(再現したい人向け)

細部はリポジトリ内の automation/x-daily/README.md に書いています。ここでは骨子だけ。

GitHub Secrets

名前用途
CURSOR_API_KEYCursor SDK(Dashboard → API Keys)
NOTIFY_EMAIL通知先
MAIL_USERNAME送信元 Gmail
MAIL_APP_PASSWORDGmail アプリパスワード

GitHub Variables

名前
X_DAILY_EMAIL_ENABLEDtrue

動作確認

Actions タブから X Daily Draft を手動実行 → メールに投稿本文が届く → @syouwanotaisyou に貼れるか確認。


うまくいったこと・これから

うまくいったこと

  • 毎朝、調査済みの文案がメールで届くリズムができた
  • @syouwanotaisyou で毎日1本、内省テックの発信が続いている
  • 「続ける」負荷が下がり、ブログ記事・執着アプリ(開発予定)と同じ世界観で X も回せる

これから

  • 英語 X 用の別下書きは必要になったら追加
  • 執着を手放す アプリ公開時に、週1程度でブログ URL を入れる運用
  • 投稿済み status: posted の管理を、もう少し楽にする

まとめ

  • X 投稿を 完全自動 にせず、調査・文案だけ AI、投稿は人間 の半自動にした
  • GitHub Actions + Cursor SDK + Gmail で、Mac スリープに依存しない毎朝運用ができる
  • 投稿先は X @syouwanotaisyou。日本語 X は 140字、仏教テーマは 出典に注意 — ルールを仕様書とプロンプトに書いた
  • つまずき(メールブロック、文字数、Actions 警告)はすべてログと条件で潰せた

エージェント記事の続きとして、「作って運用してみた」まで書けたのが今回です。同じように小さく半自動から始めるのが、個人ブログには合っていると感じています。


コメント