連載第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行ずつ足していきました。

毎朝の自動処理の順番。前日までの投稿をXから取り込んで台帳に記録→候補を探す→承認済みを投稿→ボードを更新。ぼくは前日にボードを見て承認する
毎朝の自動処理の順番。前日までの投稿をXから取り込んで台帳に記録→候補を探す→承認済みを投稿→ボードを更新。ぼくは前日にボードを見て承認する

自動化していないもの

数字で言います。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枚が、正しい投稿に自動で記録されました。

9月16日 08:42 の実行記録のうち、照合の結果。カード①②③の3枚が、いずれもURL一致で、9月15日21時51分〜52分の投稿に記録された。投稿URLの末尾は伏せている
9月16日 08:42 の実行記録のうち、照合の結果。カード①②③の3枚が、いずれもURL一致で、9月15日21時51分〜52分の投稿に記録された。投稿URLの末尾は伏せている

ボードの記事区画は、未告知0本、承認待ち0本、予定あり2本。8月25日の記事は「告知済み(9月15日・公開から21日)」と出ています。

もう1つ、ボードの最上部に行を足しました。

9月16日のボード。最上部の「今朝の実行」行は全工程が成功。記事区画は未告知0本・承認待ち0本・予定あり2本で、8月25日の記事は告知日9月15日(公開から+21日)
9月16日のボード。最上部の「今朝の実行」行は全工程が成功。記事区画は未告知0本・承認待ち0本・予定あり2本で、8月25日の記事は告知日9月15日(公開から+21日)

「今朝の実行」の行です。その日の自動処理が動いたか、どの工程が成功したか、ボードをいつ更新したか。動いているのに静かに欠ける失敗は、記録が「成功」としか言いません。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月10日から9月16日まで。8/10 HTML1枚、8/27 非公開ボード、8/28 自動投稿の初日、9/13 自動記録、9/14 記事区画と1回目の嘘、9/15 2回目の嘘と照合事故と修正、9/16 はじめて正しかった朝
8月10日から9月16日まで。8/10 HTML1枚、8/27 非公開ボード、8/28 自動投稿の初日、9/13 自動記録、9/14 記事区画と1回目の嘘、9/15 2回目の嘘と照合事故と修正、9/16 はじめて正しかった朝

投稿の自動化は8月28日の朝(第3話)にできていました。そこから最終話までの19日は、投稿する仕組みではなく、出したか・出していないか・動いたかを自動で確認するためにかかった時間です。ぼくの記憶で管理していたものを、1つずつ機械に渡していきました。

第1話のHTML1枚は、ツール「X投稿ボード v1」として公開しました。この最終話の時点の一式も、ツールとして公開しています。

ツール: X自動投稿ボード一式

第1話のHTML1枚の、最終話時点の形です。棚のファイル・毎朝自動で更新されるボード・自動投稿・台帳への自動記録・受領票(毎朝の実行の記録)。この記事の時点で固定した v1.0 で、話しかける相手を探す部分は含みません。動かすには X API の鍵と、GitHub の非公開リポジトリが要ります。料金は確かめていないので、README に「要確認」と書いています。

この記事について

同じところで詰まった、ここが分からなかった、があれば聞かせてください。次の記事の材料にします。ツールを使って詰まった場合は、リポジトリのIssueでも受け付けています。

Xで返信する →