X の投稿ネタを毎朝自動で作る|Claude と GitHub Actions で下書きまで任せた構成と詰まった 3 点
- 毎朝 5:00 に ツイート案 4 本を下書きまで自動で作る構成
- 公開前に必ず人が見る「下書き止まり」の設計
- 動かしてみて 実際に詰まった 3 つの原因と直し方
結論:投稿はしない。下書きまでを自動にした
X の運用で一番続かないのは、毎日「何を書くか」を考える部分でした。ここだけ自動にして、公開ボタンは人が押す形にしています。
流れはこの 4 ステップです。
- RSS からその日のネタを集める(重複は除外)
- Claude に渡して、ツイート案を 4 本作らせる
- 禁止表現などを機械的にチェックする(lint)
- Typefully に下書きとして送る
GitHub Actions の cron で、毎朝 5:00(日本時間)に動かします。実行結果は、成功でも失敗でもメールで届きます。
使ったもの
| 役割 | 使ったもの |
|---|---|
| ネタ収集 | RSS(Python) |
| 文章生成 | Claude(Sonnet) |
| 下書き管理 | Typefully API |
| 定期実行 | GitHub Actions |
| 通知 | Gmail(アプリパスワード) |
Claude は Sonnet にしました。短い文を 4 本作るだけなので、上位モデルは要らないと判断しています。
詰まった 3 点
1. 動かす仕組みの一部が Git に入っていなかった
ワークフローのファイルを push する前に気づいてよかった点です。ワークフローが呼ぶスクリプトの置き場所が、まるごと Git の管理外になっていました。そのまま push していたら、全部のジョブが「ファイルがない」で落ちていました。
push 前に git status で ??(未追跡)を見るだけで防げます。
2. 出力先のフォルダが gitignore されていた
実行履歴を commit する手順があったのですが、出力先の reports/ が .gitignore に入っていました。git add が失敗します。
売上データなど隠したいものは除外したまま、必要な 2 つだけ除外を外しました。
reports/*
!reports/topics_seen.json
!reports/weekly/
3. モデルを変えたら応答の形が変わって落ちた
いちばん分かりにくかったのがこれです。モデルを Opus から Sonnet に替えたら、次のエラーで止まりました。
AttributeError: 'ThinkingBlock' object has no attribute 'text'
応答の先頭が「思考ブロック」で、本文は 2 番目以降に入っていました。content[0].text と決め打ちしていたのが原因です。type が text のブロックだけを集める書き方に直しました。
raw = "".join(b.text for b in resp.content if b.type == "text")
思考の分も出力枠を使うので、max_tokens も 2000 から 4000 に増やしました。
費用を抑えるためにやったこと
- API は プリペイドで、最初は 5 ドル分だけ入れた
- 自動チャージはオフにした(残高が尽きたら止まる)
- 呼び出しは 1 日 1 回、4 本まとめて作る
- 最初は
dry_run(下書きに送らない)で動作確認した
1 日 1 回の呼び出しなので、月の費用は小さい見込みです。実際の請求額は、1 か月回してから追記します。
セキュリティで気をつけた点
- 外部の Action は コミットの SHA で固定した(タグだと中身が差し替わる可能性がある)
- ワークフローの
permissionsを、必要な最小の権限に絞った - API キーは GitHub の Secrets にだけ入れ、リポジトリには置かない
- メール通知の宛先がない場合は、通知だけ飛ばして本体は止めない
まとめ
- 自動にするのは「ネタ出しと下書き」まで。公開は人が押す
- 最初は dry_run で、1 回だけ流してから本番にする
- モデルを変えたら、応答の形が変わっていないかを疑う
- 費用はプリペイドと自動チャージオフで、上限を物理的に作る
実際に出てきた下書きは、そのままでは使えないものもありました。数字や出来事が作り話になっていないかは、毎回自分の目で確認しています。自動化は「考える時間を減らす」ためのもので、「見なくていい」ためのものではない、というのが今の感覚です。
関連記事
- Claude Code でブログ運営を半自動化する 5 つの実例
- Claude Code で副業ブログを 1 週間で立ち上げた話
- Search Console の BigQuery エクスポートが止まった
本記事は実体験の記録です。アフィリエイトリンクは含みません。