本文へスキップ

plastic skies /

SNS戦争から抜け出すためにオレオレマイクロブログを立てた

書いた人 salty_7 #106

  • cloudflare
  • astro
  • kv
  • slack
  • posse
Slack に書いてリアクションを付けると Lambda が動き、自サイトに原本、X にコピー、Notion に公開URLが渡る流れの構成図

つぶやき投稿先を自分のドメインに作りました。

はじまり

「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 では以下の処理を実施しています。

  1. 自分のサイトに原本を作る。 本文を Cloudflare の KV(キーと値だけの小さな保管庫)に、 画像を R2(ファイル置き場)に入れます。画像は webp に変換し、 撮影場所などのメタデータはここで捨てます。この時点で公開URLが決まります。
  2. X にコピーを流す。 Xに本文コピーと画像を投稿します。
  3. 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. 「自分で作るんだよ!」

plastic skies の一覧へ RSS