超分かりやすい Bluesky ラベラーの解説
2026年1月時点の話です。簡単なものからレベル付けしてみました。
レベル1. ラベラーはユーザーアカウントの一種である
- ラベラーを探すには、ユーザーを見つけるのと同じ検索の仕方で探す
- 名前空間・UI を分けてもいいとは思うけど…
- ラベラーはアカウントの一種なので、フォロー・フォロー解除やいいね、リポストもできる
- ラベラーアカウントは普通に投稿もできる
- ラベラーを運用してる人は、何かトラブルがあったときに、ユーザーをスイッチしてラベラーアカウントで運用アナウンスしたりもする
レベル2. ラベラーアカウントはユーザーアカウントが成るものである
- ラベラーになると、通常のフォロー・フォロー解除の部分に『ラベラーを登録する』ボタンが現れる
- 要するに、公式クライアントでは UI がちょっと変わる
- 購読ボタンの代わりにフォローボタンは消えて、メニューの奥まったところにフォローのメニューが現れる
レベル3. Bluesky の初期状態で、みんなデフォルトラベラーを購読している状態である
設定 > モデレーションにある購読中のラベラー一覧にすでに含まれているBluesky Moderation Serviceというデフォルトラベラーは購読を外すことができない- https://bsky.app/profile/moderation.bsky.app
- 例: えっちな投稿に「これはえっちだ」とラベルを貼る
- 例: スパム投稿気味なアカウントに「この人はスパマーだ」とラベルを貼る
レベル4. ラベラーは、購読している・していないに関わらず、誰にでもラベルを貼ることができる
- 購読してない人に対しても、ラベルを貼ることができる
- 例: 一部のユーザーに都合の悪い投稿・あるいは投稿者に対してラベルを貼る
- 例: どこかに所属していることを示すために、申請しつつ自身にラベルを貼る
レベル5. ラベラーを購読すると、ラベルそれぞれについて、見る見ないが選べる
- 見るもの、見ないものは自身で決められる
オフを選ぶと、ラベルが表示されなくなる非表示を選ぶと、ラベルの付与されたユーザー自体が表示されなくなる- 分かりづらい… 🥺
レベル6. ラベラー側からは、誰が購読してるかは確認できない
- 直感と異なり、ラベラーの購読情報は秘密情報
- 分かりづらい… 🥺
- ラベラー自身からも分からない
- ラベラーがラベルを貼るユーザーは、購読とは別の方法で特定できていないといけない
- リアルタイムに投稿を監視する(無差別)
- ユーザー自身にアクションしてもらう(フォローやいいねなど)
レベル7. ラベラーアカウントは、ほぼ全てボットアカウントである
- ラベラーはただラベル定義するだけじゃなく、常にラベルを貼ったり剥がしたりしないと価値がない
- 常時ラベル貼りのことを考えないといけないので、人力で運用はほぼ不可能
- いつどれに(どの投稿に)どういうラベルを付与するか?は自分でラベラー用のサーバーを立てて提供する必要がある
レベル8. ラベラーはAPIを叩いてラベラー定義をすればラベラーとして認識される
- API 経由でラベル定義を投稿すると、ラベラーになる
- いつもの投稿とは違うスペースに投稿すると、ラベル定義が投稿できて、ラベル定義があるとラベラーとして認識される
- 通常の投稿は
app.bsky.feed.postという場所(コレクション)に保存される - ラベル定義は
app.bsky.labeler.serviceという場所(コレクション)に保存される
- 通常の投稿は
- ラベラー定義は常に最新上書きなので、空のラベラー定義を投稿すれば変身が解ける
- ラベラーは多言語対応が可能、言語ごとに設定すれば適切なものを使ってくれる
ちなみに、おみくじラベラーではこんなデータを追加しています。
{
repo: bot.profile.did,
collection: "app.bsky.labeler.service",
rkey: "self",
record: {
$type: "app.bsky.labeler.service",
createdAt: new Date().toISOString(),
policies: {
labelValues: [
"daikichi",
"kichi",
"chukichi",
"shokichi",
"suekichi",
"kyo",
"daikyo",
],
labelValueDefinitions: [
{
identifier: "daikichi",
severity: "inform",
blurs: "none",
defaultSetting: "warn",
locales: [
{ lang: "ja", name: "大吉", description: "今日の運勢は大吉!最高の一日があなたを待ってる!" },
],
},
// 以下略
レベル9. ラベラーのラベル貼りには自身でサーバーを立てる必要がある
- サーバーを立てないとラベル貼りは無理
- ここがエンジニアリングしないと難しいところ
- カスタムフィードはサーバーを立ててくれている方に乗っかる形でフィード作成することができるが、ラベラーはアカウントが成るものなので、なかなかサービス化して他の人にラベラー作成してもらうのも難しい
レベル10. ラベル貼りの情報をラベラーサーバーから提供するには WebSocket で繋ぐ必要がある
@skyware/labelerを使うと楽、必須エンドポイントを提供してくれる- Skyware ライブラリを使わずにやるなら、自前で WebSocket を繋ぐ必要がある
以上です! 有識者の方、間違いがあれば指摘してください!
おまけ: おみくじラベラーでの話
- さっきの話の通り、購読だけだとラベラーからもユーザーがわからないので、フォローしてもらう
- フォロー・フォロー解除をDBに記録し、日付をまたいだタイミングでラベルの貼り替え、ラベル剥がしを行う
- 日本時刻の0時にまとめて動かすので、日本語のみに限定している
- タイムゾーン情報が拾えない、欲しい!