Mastodonには、予約投稿する機能が標準で実装されています。
しかも、導入されたのは2019年1月20日にリリースされたMastodon v2.7.0。なんと4年前です。
でも、たぶんほとんどの人が知らないと思います。
なぜなら、APIしかなく、ユーザーインターフェースが無いからです。
クライアントアプリのいくつかがMastodon本体の予約投稿機能に対応しており、これを利用できます。
予約日時は最短で5分後の未来です。5分未満の日時を指定すると、予約にならず、即座に投稿されます。
仕組みとしては、
投稿する際に、未来の日付をscheduled_atというパラメータで指定し記憶しておきます。
予約投稿と認識した投稿は、文字数オーバーになっていないかなどエラーを検査し、添付ファイルをあらかじめ処理しておいてから、生の投稿データをデータベースに記録します。
生の投稿データというのは、本文などの入力したテキストをそのまま持っているということです。メンションやハッシュタグの処理はまだ行いません。
5分前まではデータベース上に眠らせておき、5分間隔で定期チェックします。
5分以内に投稿するデータをみつけたら、sidekiqというジョブキューに載せ、可能な限り丁度のタイミングに実行します。