Mastodonには、予約投稿する機能が標準で実装されています。
しかも、導入されたのは2019年1月20日にリリースされたMastodon v2.7.0。なんと4年前です。
でも、たぶんほとんどの人が知らないと思います。
なぜなら、APIしかなく、ユーザーインターフェースが無いからです。
クライアントアプリのいくつかがMastodon本体の予約投稿機能に対応しており、これを利用できます。
予約日時は最短で5分後の未来です。5分未満の日時を指定すると、予約にならず、即座に投稿されます。
仕組みとしては、
投稿する際に、未来の日付をscheduled_atというパラメータで指定し記憶しておきます。
予約投稿と認識した投稿は、文字数オーバーになっていないかなどエラーを検査し、添付ファイルをあらかじめ処理しておいてから、生の投稿データをデータベースに記録します。
生の投稿データというのは、本文などの入力したテキストをそのまま持っているということです。メンションやハッシュタグの処理はまだ行いません。
5分前まではデータベース上に眠らせておき、5分間隔で定期チェックします。
5分以内に投稿するデータをみつけたら、sidekiqというジョブキューに載せ、可能な限り丁度のタイミングに実行します。
Fedibirdでは、このMastodon本体が持っている予約投稿の機能が利用できるよう、投稿フォームに日時指定する機能を実装しています。
(公開終了日時を指定する独自機能とセットになっていますが、それぞれ別の機能です)
・カレンダーからの選択
・プリセット(5分、30分などの候補)からの選択
・テキスト入力による日時指定
・テキスト入力による相対指定(5mで5分後、2d12hで2日と12時間後など)
が可能です。
また、予約投稿した一覧を確認するカラムと、その編集して更新、削除の機能を追加しています。
Mastodon本体が持っていない機能として、予約投稿されたタイミングでユーザーに通知する機能を追加しています。
そろそろ本家に載せたいところですが、日時関係の機能って合意形成が難しいんだよねえ。
#fedibird #fedibird_info