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