X投稿を自動化した──HTML1枚から37日
連載第2弾「毎朝、機械がぼくの代わりにXへ投稿するまで」の最終話です。
X投稿を自動化しました。毎朝、ぼくが起きる前に、自動で4つのことが終わっています。前日までの投稿を台帳に記録する。話しかける相手の候補を探す。承認済みの投稿を出す。ボードを更新する。ぼくがやるのは、前日にボードを見て承認することだけです。8月10日にHTML1枚で始めて、9月16日の朝で37日です。
| やったこと | 結果 | つまずき |
|---|---|---|
| X投稿の自動化(記録・候補探し・投稿・ボード更新) | 8月28日〜9月16日の20日間で、朝の自動投稿が出た日は16日。出なかった4日のうち3日は当日の予定が無く、1日は初日で定時前 | 返信と手動投稿は自動化していない。同じ期間の50本のうち自動は17本、ぼくの手が33本 |
| 出したか・出していないかの自動確認 | 公開19本のうち2本がXに出ていなかったと分かった(13日と21日) | 機械は3日前から表示していた。読んでいなかったのはぼく |
| 確認の穴を3つ直した | 翌朝、3枚の投稿が正しく記録され、未告知0 | 規則に書いた「台帳なし」表示は、まだ作っていない |
これまで
| 話 | 題名 | 公開日 | Xの短報 |
|---|---|---|---|
| 第1話 | 下書きの置き場──X投稿の管理を、HTML1枚で作った日 | 8月29日 | 9月12日(自動) |
| 第2話 | 隠したURLは、隠れていなかった──棚を作り直した日 | 9月1日 | 9月5日(自動・URLなしの版)、9月14日(自動・URLあり) |
| 第3話 | 機械が、はじめてぼくの代わりに投稿した朝 | 9月5日 | 9月6日(自動) |
| 第4話 | 記事のURLを貼る投稿を、棚から5本外した日 | 9月9日 | 9月9日(ぼく)。翌10日に自動でもう1本出た(重複)。ぼくが消したらしい。記憶に無いが、Xにもう無い |
| 第5話 | 台帳を作った翌朝、台帳が消えた | 9月15日 | 9月18日の予定(自動) |
表の短報は、自動が5本(消えた重複1本を含む)、ぼくが1本です。ツールの告知で第1話を案内した返信は数えていません。
自動化した全体
第1話で作ったのは、HTML1枚でした。下書きをカードで並べ、本文をコピーしてXに貼り、「投稿済みにする」を押す。記録はブラウザの中だけ。最終話の朝、同じ役目をしているものは、こうなっています。右の列は、その行がどの話で入ったかです。
| 第1話のHTML1枚(8月10日) | 最終話の一式(9月16日) | 足した話 | |
|---|---|---|---|
| ページの置き場 | 公開サイトの、教えていないURL | 自分だけが入れる、鍵つきの非公開ページ | 第2話 |
| 記録の置き場 | ブラウザの中。その端末にしかない | コードの倉庫の中のファイル | 第2話 |
| ページの更新 | ぼくが手で | 自動。毎朝の定時実行の中で、記録の取り込みの後・投稿の直後・実行記録の後に更新する。棚を書き換えるたびにも | 第2話 |
| 投稿 | 本文をコピーしてXに貼る | 自動投稿。承認したものを毎朝定時に出す | 第3話 |
| 記録 | 「投稿済みにする」ボタン | 自動記録。手動も自動も、翌朝Xから取り込んで同じ台帳に並べる | 第5話 |
| 見えるもの | 棚・次に投稿・投稿済みの3区画 | 予定・投稿済み・見送り・記事ごとの告知状態・今朝の実行 | 第6話 |
| ぼくがやること | 全部 | 承認、手動で出す日の投稿、数字投稿をプロフィールに固定すること | ── |
ボードは見る側です。書き換える操作はボードにありません(あるのは本文をコピーするボタンだけ)。動かすのは棚のファイルと自動処理で、承認は毎回ぼくがチャットで番号を指定します。「画面で操作する」を「ファイルを書き換えると画面が変わる」に逆転させたのが第2話で、そこから先は1話ごとに1行ずつ足していきました。

自動化していないもの
数字で言います。8月28日から9月16日までの20日間で、このアカウントの投稿は50本。自動投稿が17本、ぼくの手が33本です。手の33本のうち21本は返信で、12本は新規の投稿です。
自動化したのは「朝の投稿」で、誰かへの返信と、その日に思いついて出す投稿は、ぼくが手で出しています。承認も毎回ぼくです。同じ20日間で、棚のカードを承認済みにした回数は35回でした(状態の変化で数え、誤った記帳を戻した2回は除く)。
自動投稿が出た朝は16日。出なかった4日のうち、3日は当日の予定が棚に無かった日(9月4日・8日・13日)、1日は自動化の初日で、定時の前に手で起動した日(8月28日)です。予定があって出なかった日は0日です。
出ていない記事が2本あった
第5話の終わりに、こう書きました。「台帳があることと、台帳を読むことは別です」。この最終話の出来事は、その続きです。
台帳ができたので、公開した記事のURLと、Xに出した投稿のURLを自動で突き合わせるようにしました。
| 記事 | 公開日 | Xに出た日 | 空白 |
|---|---|---|---|
| 第2弾 第2話「隠したURLは、隠れていなかった」 | 9月1日 | 9月14日 | 13日 |
| 第1弾 第5話「サイトが文字化けした日」 | 8月25日 | 9月15日 | 21日 |
公開19本のうち2本。どちらも、ぼくは出したつもりでいました。第2話は9月5日に自動で1本出ていますが、その版は本文にURLが無く、機械の判定では告知に数えません。
原因は、規則と記憶
原因は2つ、記録にそう書いてあります。
1つは、9月2日に決めた規則です。「記事のURLを貼る投稿は、公開日に1本だけ。翌日以降はURLなし」。第4話で書いた、棚から5本外した日の規則です。この規則だと、公開日に出し損ねた記事は、永久に出せません。
もう1つは、出したかどうかを、ぼくの記憶で管理していたことです。
9月13日に規則を書き換えました。改訂前と改訂後の抜粋です。
改訂前(9月2日・抜粋): URL付きの記事短報は「記事の公開日に1本」のみ。翌日以降の棚はURLなし。公開日から2日以上離れたURL付き短報は予定を外す。
改訂後(9月13日・抜粋): 記事短報は記事ごとに1回。公開日が原則だが、台帳に同URLの投稿が無い未告知の記事は、日をずらして1回だけ出してよい。台帳が30日分揃うまでは「未告知」と断定せず「台帳なし」と表示する。文面に告知の遅れや運用の事情を書かない。
「回数」の規則に変えた、ということです。日付ではなく、台帳に有るか無いかで決める。
機械は、表示していた
ここが、この話でいちばん書きたくなかったところです。
毎朝自動で作られるキュー(その日のリプライ候補を並べた文書)の先頭には、9月10日から「未告知の記事」という節がありました。9月11日の版には、3本並んでいます。第1弾第5話、第2弾第1話、第2弾第2話。
ぼくが2本に気づいたのは9月14日です。3日間、機械は毎朝それを出していて、ぼくは毎朝キューを開いていて、読んでいませんでした。キューは「リプライ候補を見る文書」で、記事の告知を見る場所だと思っていなかった。
気づいた瞬間の記録は、ありません。残っているのは、9月14日の深夜0時21分に、ボードの記事区画が「未告知 2本」と出した記録だけです。
だから、置き場所を変えました。毎朝かならず見る1枚、投稿ボードに、記事の区画を作った。記事区画は、サイトの記事の一覧、自分の投稿の台帳、投稿の棚の3つを自動で突き合わせます。記事のURLが台帳の投稿にあれば「告知済み」、棚に下書きがあれば「承認待ち」、承認済みなら「予定あり」、どこにも無ければ「未告知」。
作った深夜のうちに2本の短報を棚に入れて、「未告知 0本、承認待ち 2本」になりました。
区画は、2回嘘をついた
翌朝から、この区画は嘘をつきました。
| 朝 | 自動で出た短報 | 同じ朝のボードの表示 |
|---|---|---|
| 9月14日 08:37 | 第2弾第2話の短報 | 第2弾第2話は「未告知」 |
| 9月15日 08:59 | 第1弾第5話の短報 | 第1弾第5話は「未告知」 |
出した直後の朝に、出していないと表示する。原因は、毎朝の処理の順番です。台帳の取り込み→ボードの更新→投稿、の順だったので、その朝の投稿は翌朝まで台帳に入らず、ボードは投稿前の台帳で判定していました。
これは実害があります。ボードを信じて「未告知だから出そう」と起案すると、同じ記事の短報が2本出ます。9月13日に決めたばかりの「記事ごとに1回」を、ボードが破らせに来る。
9月15日の夜に3点直しました。台帳だけでなく、棚の「投稿済み・URLあり」のカードも告知済みの根拠にする。投稿の後にボードを更新する工程を足す。承認待ちに数えるのは下書きだけにして、承認済みは「予定あり」と別に数える。
同じ日、自動記録も嘘をついた
同じ9月15日の朝、もう1つ嘘がありました。
その日の夜に、ぼくが手動で出す予定の3段投稿が棚にありました。①②③の3枚。朝の自動処理が終わると、①と③が「投稿済み」になっていました。まだ出していないのに。
| カード | 当たった投稿 | その投稿の日 | カードを作った日 |
|---|---|---|---|
| ① | 9月11日の投稿(同じGitHubのURL) | 9月11日 | 9月14日 |
| ③ | 9月12日の投稿(同じ記事のURL) | 9月12日 | 9月14日 |
手動で出した投稿を、翌朝「同じURLの投稿がある」で照合して投稿済みにする自動記録の仕組みが、カードを作る2〜3日前の投稿に当たっていました。3段投稿は前に出したURLをもう一度貼る型なので、出すたびに①と③が出す前に消えます。
気づいたのはぼくで、夜にボードを見て「2枚足りない」と言ったからです。自動処理の記録は「投稿1本・失効0本・全工程成功」で、何も異常に見えませんでした。
直したのは条件1つ。「投稿の日時が、カードを作った時刻より後」のときだけ照合が成立する。それと、照合で投稿済みにしたカードを毎朝の実行記録に残す。何が消えたかが、あとから分かるように。
翌朝、はじめて正しかった
9月16日 08:42。前夜に出した3段投稿の3枚が、正しい投稿に自動で記録されました。

ボードの記事区画は、未告知0本、承認待ち0本、予定あり2本。8月25日の記事は「告知済み(9月15日・公開から21日)」と出ています。
もう1つ、ボードの最上部に行を足しました。

「今朝の実行」の行です。その日の自動処理が動いたか、どの工程が成功したか、ボードをいつ更新したか。動いているのに静かに欠ける失敗は、記録が「成功」としか言いません。8月27日と28日に2日間止まったときも、記録には何も残っていませんでした。動かなかった日は、この行の日付が前日のままになる。それで気づく、という作りです。
数字
記事区画が出した本数です。9月13日以前は区画がありません。
| 日 | 朝の自動処理の版 | その日の最後の版 |
|---|---|---|
| 9月14日 | 未告知1・承認待ち1 | 未告知1・承認待ち2 |
| 9月15日 | 未告知1・承認待ち1 | 未告知0・承認待ち0・予定あり2 |
| 9月16日 | 未告知0・承認待ち0・予定あり2 | 同じ |
9月15日の夜までの版は、承認済みのカードも「承認待ち」に数えています。「予定あり」の数え方は15日の夜からです。
書いたが、作っていないもの
9月13日の規則には「台帳が30日分揃うまでは『未告知』と断定せず『台帳なし』と表示する」とあります。この表示は、9月16日の時点で作っていません。ボードもキューも、台帳の日数にかかわらず「未告知」と出します。規則を書いたときに、実装を指示書に入れなかった。ここは直します。
最終話として
自動化したのは、投稿だけではありませんでした。
| 自動化したもの | いつから | 何が分かるか |
|---|---|---|
| 投稿 | 第3話・8月28日 | 承認したものが毎朝定時に出る |
| 記録 | 第5話・9月13日 | 手動でも自動でも、何をXに出したか |
| 確認 | 第6話・9月14日〜15日 | どの記事がXに出ていないか。自動処理がその日動いたか |

投稿の自動化は8月28日の朝(第3話)にできていました。そこから最終話までの19日は、投稿する仕組みではなく、出したか・出していないか・動いたかを自動で確認するためにかかった時間です。ぼくの記憶で管理していたものを、1つずつ機械に渡していきました。
第1話のHTML1枚は、ツール「X投稿ボード v1」として公開しました。この最終話の時点の一式も、ツールとして公開しています。
ツール: X自動投稿ボード一式
第1話のHTML1枚の、最終話時点の形です。棚のファイル・毎朝自動で更新されるボード・自動投稿・台帳への自動記録・受領票(毎朝の実行の記録)。この記事の時点で固定した v1.0 で、話しかける相手を探す部分は含みません。動かすには X API の鍵と、GitHub の非公開リポジトリが要ります。料金は確かめていないので、README に「要確認」と書いています。
- ツールのページ: X自動投稿ボード一式
- ファイル: github.com/mhitori/haif-tools/tools/x-autopost-board
- v1(HTML1枚)との違いは、上の「自動化した全体」の表のとおりです
連載「毎朝、機械がぼくの代わりにXへ投稿するまで」全6話
- 第1話下書きの置き場──X投稿の管理を、HTML1枚で作った日
- 第2話隠したURLは、隠れていなかった──棚を作り直した日
- 第3話機械が、はじめてぼくの代わりに投稿した朝
- 第4話記事のURLを貼る投稿を、棚から5本外した日
- 第5話台帳を作った翌朝、台帳が消えた
- 第6話X投稿を自動化した──HTML1枚から37日この記事
この記事について
同じところで詰まった、ここが分からなかった、があれば聞かせてください。次の記事の材料にします。ツールを使って詰まった場合は、リポジトリのIssueでも受け付けています。
Xで返信する →