SNS戦争から抜け出すためにオレオレマイクロブログを立てた
#106
つぶやき投稿先を自分のドメインに作りました。
はじまり
「Twitter/Xはもう終わりだ」
そんな言葉を何度聞いただろうか。
そのたびに、Threads、Mastodon、BlueSkyその他諸々への移住が行われたが、結局大部分の人はTwitter/Xに戻ってきた。
きっとこれからも同じようなことを繰り返していくのだろう。
でも、もう終わりにしよう。誰かに振り回されるのは。
できたもの
https://renidentia991.com/notes/
| URL | 中身 |
|---|---|
/notes/ | 一覧(最新50件) |
/notes/000001/ | 個別のpermalink |
/notes/latest.json | トップページの「つぶやき」欄が読む |
/api/notes/ | 書き込み口(POST / PATCH / DELETE) |
書き込みのUIはSlackです。日記用のチャンネルに1行書いて、公開用のリアクション(例:🐦)を付けると、 自サイトに原本が作られ、同じ内容の投稿がXにも流れます。 画像を添付していれば、EXIFを落としてwebpに変換したうえで、サイトとXの両方に投稿されます。
日記用に使っていた仕組みを流用しているので、思いついて書いていたものを後から公開できます。
仕組み
Slack にリアクションがついたイベントで AWS Lambda を叩き、各所に配信します。 3月に作った、slack→Notion連携も同じ仕組みで、 今回はそこに公開用の処理を足しました。
Lambda では以下の処理を実施しています。
- 自分のサイトに原本を作る。 本文を Cloudflare の KV(キーと値だけの小さな保管庫)に、 画像を R2(ファイル置き場)に入れます。画像は webp に変換し、 撮影場所などのメタデータはここで捨てます。この時点で公開URLが決まります。
- X にコピーを流す。 Xに本文コピーと画像を投稿します。
- Notion の日記にURLを書き足す。 どのつぶやきをどこに出したかを日記に残すため。
なお、Slack からの通知は同じものが二度届くことがあります。 Slack のメッセージが持つタイムスタンプを鍵にして、 すでにあるものは作り直さない作りにしてあるので、二重に投稿されることはありません。
毎回ビルドしないでつぶやきが増える仕組み
renidentia991.com サイトは Astro で作っていて、記事や作品のページは 手元でビルドしたときに HTML になって配信されます。 文章を直したら、ビルドして置き直す、という流れです。
つぶやきをこの方式にすると、1回つぶやくたびにサイト全体をビルドし直すことになります。 Lambda からビルドを起動する手もありますが、公開まで数分かかるうえ、 Cloudflareのビルド時間の無料枠を食いつぶすかもしれません。
そこで、つぶやきのページだけは読まれたときに組み立てるようにしました。
/notes/ にアクセスがあると、Cloudflare Workers(配信のすぐ手前で動く小さなプログラム)が
KV から本文を読んで、その場でページを作って返します。
KV に1件増えれば、次のアクセスからはもう表示され、ビルドは不要になります。
そのうえで、この方式にするのは /notes/ と書き込み口だけにしました。
つぶやき以外のページは今までどおり、ビルドしたHTMLを表示します。
使っている技術は以下の通りです。
| 役割 | 使っているもの |
|---|---|
| 書く場所 | Slack |
| 通知を受けて処理する | AWS Lambda(Python) |
| 本文の保管 | Cloudflare Workers KV |
| 画像の保管・配信 | Cloudflare R2(img.renidentia991.com) |
| ページの生成・配信 | Cloudflare Workers + Astro |
| 手元の記録 | Notion |
おわりに
これで、つぶやきも自分の領域で公開できるようになりました🙌🙌
Q. 「逃げるったってどこに逃げるんだよ。」
A. 「自分で作るんだよ!」