(2026-09-24・図1・表3)

結論

X への投稿を毎朝1回、自動で出す仕組みは、スクリプト9本・データ12ファイル・外部3つでできていて、月の費用は9月(24日まで)で概算12ドル、動かし始めてから止まった箇所は16件でした。

この仕組みのコードは公開していません。公開しているのは投稿ボードの部分だけです。この記録は、部品の名前よりも「どの順で・どこで・どう壊れたか」と「月いくらか」を持ち帰ってもらうためのものです。

部品の関係図

X 自動投稿の部品と流れ
X 自動投稿の部品と流れ

(図1: 左が人と外部、真ん中が毎朝の工程、右がリポジトリの中のデータ。矢印は読む・書くの向き)

一言でいうと、GitHub Actions が毎朝1回ワークフローを起動し、X から自分の投稿と返信を読んで台帳に写し、棚(投稿の予定表)にある承認済みの1本を X に出して、結果を受領票に書き、変わったファイルをコミットする。ぼくが手で行うのは、棚に登録して承認することと、手動の投稿だけです。

止まった箇所

日付何が止まったかどう直したか
8/10〜27投稿ボードが HTML 1枚で、記録が端末1台の中だけ。URL を知れば読めた8/27 に棚(リポジトリのファイル)と Cloudflare Access の鍵に作り直した
8/27定時実行が発火しなかった時刻を端数の分にずらした
8/286時間半遅れで発火し、出力が git add の一覧に無くて失敗、消えた一覧に追加。「出力を足す改修は git add の一覧とセット」を決まりに
9/7git add の glob が当たらない日に exit 128固定パスと「あれば add」に分けた
9/9〜10記事の短報が手動と自動で二重に出た手動の投稿も棚に通し、台帳で照合する形に
9/11台帳が .gitignore に当たって保存されず消えた例外を1行。「check-ignore で確かめる」を決まりに
9/11棚を操作したコミットでボードが前の状態に戻った9/13 に決まりを追加
9/10〜12「キューの前に投稿」「取り込み失敗でも投稿」の順序事故が起きうる作り9/13 に1本のワークフローに統合し、順序を固定。受領票を追加
9/14〜15投稿済みの記事2本が「未告知」と出た(台帳だけで判定していた)棚の投稿済みも根拠に。投稿の直後にボードを作り直す
9/17〜定時の遅延がおよそ2時間(最長 2時間30分)予定は変えず、週次で中央値を見ている
9/20停止中に queue_out が drafts.json を要求して失敗無ければ空として読む
9/20下書きの流れの失敗で投稿まで止まる作り投稿と接点の取得を、取り込みの成否だけに繋いだ
9/21〜22自動起案の登録行がコミットされず、同じカードが作り直された登録記録をコミット対象に。二重の判定を「登録記録か棚」に
9/22〜23画像の t.co が「URL あり」に数えられた本文の URL だけで判定
9/23長文の投稿が途中までの本文で記帳されていた全文を取り直す形に(9/24 朝に2行が置き換わった)
9/23手元でボードを作り直すと weekly.json の履歴が消えたweekly.json を正本にした

16件(8月10日〜9月23日)のうち、X API 側の仕様に当たったのは2件(長文・t.co)。残りは全部、自分の作りの順序と保存の問題でした。

月の費用

部品9月の費用出どころ
X API12.2ドル(概算)読み取り1件 0.005ドル・投稿1本 0.015ドルで数えた値。請求の実額は記録なし。8月は 3.9ドル
画像の送信0(単価が公式表に無い)開発者ポータルの課金の行に画像の項目が出ないかを確認中
GitHub Actions09月は47回・合計およそ11分。非公開リポジトリの無料枠の中
Cloudflare Pages・Access0無料枠

概算は実費ではありません。実費は開発者ポータルの残高の差で測り、計器盤の「月ごとの費用」の行に出します。

部品ごとの役割

部品役割置き場
ワークフロー x-ops-daily毎朝 06:47 の予定で全工程を順に呼ぶ.github/workflows/
own_posts.py自分の投稿を取り込み、手動投稿を棚と照合するscripts/x_ops/
article_cards.py記事を公開したとき、棚に承認待ちのカードを作るscripts/x_ops/
run.py下書きの流れ(いまは停止中で、キューの出力だけ)scripts/x_ops/
queue_out.py下書きをリントに通してキューを作るscripts/x_ops/
post.py棚の承認済みを X に出す(画像1枚まで)scripts/x_ops/
contacts.py自分宛の返信・メンションを取るscripts/x_ops/
shelf.py棚への登録・承認・見送り(人が使う唯一のもの)scripts/x_ops/
common.py支出の概算・リントの橋渡し・URL の判定・画像の検査scripts/x_ops/
board.py投稿ボード(HTML)を作るscripts/
台帳 own_posts_x.json自分の投稿の写し。照合の根拠data/
棚 shelf.json投稿の予定と結果board/
登録記録 shelf_registered.jsonl自動で作ったカードの控え(二重登録を防ぐ)scripts/x_ops/
週次 weekly.json週ごとの数字の正本board/
受領票 run_receipt.jsonl毎朝の成否。失敗しても書くdata/
支出の概算 x_ops_spend.json読み取りと投稿の件数から出す概算data/
X API読む5つ・書く2つのエンドポイント外部
開発者ポータル鍵と残高。実費はここでしか分からない外部
Cloudflare Access投稿ボードの鍵外部

関係する記録

  • 連載第2弾(この仕組みを作った時間の順の記録)
  • 投稿ボードのツールページ(x-autopost-board)

2026-10-02 更新: 「止まった箇所」の件数を、表の行数に合わせて15件から16件に直しました。

この工場の続きはXで実況しています → @hitoriaifactory