文字を伏せた投稿ができるSkyblurをリリースして3日経ちました。
https://skyblur.uk/
きっかけ
私はFF14ヒカセンラベリングというサードパーティラベラーを運営していますが、この中に「ネタバレを防ぐ」機能を作っています。
https://bsky.app/profile/label.wol.blue
ただし、サードパーティラベラーは「投稿時にラベリングできない」という制限があります。また、特定の界隈向けのラベラーのため、他の界隈の方向けの機能があるといいなぁと漠然と思っていました。
そのような中、ふせったー的なものをAppViewの要領で作ればいいんじゃね?と思い立って実質3日ぐらいで作りました。
仕組み
Skyblurで伏字を指定して投稿すると
- app.bsky.feed.postに伏字ありの投稿をする https://pdsls.pages.dev/at/did:plc:4sm3vprfyl55ui3yhjd7w4po/app.bsky.feed.post/3lcwrhi7lyv26
- uk.skyblur.postに伏字なし(原文)のレコードを作るhttps://pdsls.pages.dev/at/did:plc:4sm3vprfyl55ui3yhjd7w4po/uk.skyblur.post/m4i676pxghrwu
SkyblurのWebサイトにアクセスすると、
- uk.skyblur.postに伏字なし(原文)のレコードを取ってきて表示する https://pdsls.pages.dev/at/did:plc:4sm3vprfyl55ui3yhjd7w4po/uk.skyblur.post/m4i676pxghrwu
それだけです
開発のハイライト
Blueskyに投稿する機能は過去BOTを運営していた、collectionにデータを作るのは汎用カスタムフィードジェネレータのStarryskyで実績があった、WebアプリもいくつかBlueskyを始めてから作っていたので開発は順調でした。ただ、後からこうすればいいなというところはいくつもありました。
というか20%ぐらいしか知らなくてもとりあえずアプリ作れてしまうATProtoの汎用性の高さ、すごいですね。危ないところはハッカーの皆さんが突っ込んでくれるBlueskyの世界がありがたいです。
rkeyの生成
独自のcollectionを作成する際はrkeyを指定する必要がありますが、rkeyはtidが推奨されるとのことです。これのおかげでレコードが高速に取って来れるのでしょう。後から生成ルールを変えると時系列に並ばなくなるので注意したほうがよさそうです。
https://atproto.com/ja/specs/tid
TypeScriptを使用している場合は、公式がライブラリを出しているのでそれを使うと手っ取り早く安全です。
npm i @atproto/common-web
import { TID } from '@atproto/common-web'
const rkey = TID.nextStr()
基本的には時刻をベースに作ってある文字列(時系列)なら良いようです。
HTMLインジェクション
何も気にせず作ってしまってご迷惑をおかけしました。
npm i dompurify
import DOMPurify from 'dompurify';
DOMPurify.sanitize(str);
TOKIMEKI
このサービスをリリースしたのは12月10日17時、ほりべあさんからTOKIMEKIでの伏字解除の打診(しかも仮実装済み)があったのは22時、日付が変わる頃にはデプロイされていました。
サードパーティクライアントの皆さんが遊べる余地を仕込んでおきたいなぁと思った要素を(私の実装的にはATProtoの流儀的にはイマイチだったようですが)データから汲み取っていただき本当にありがとうございます。
PDSls
デバッグが頗ります。ログインするとJSON修正できる、神ツールです。
今後
需要があればドラフト機能を作ろうかと思います。公開範囲設定はPDSにデータを溜め込む仕様上、全公開しかできないので実装の予定はありません。何かあれば私までお声がけください(全てのご要望には添えない場合がありますのでご了承ください)