「Bluesky Advent Calendar 2024」 12月21日分の記事です。 Blueskyの3rdPartyクライアント「Klearsky」の知られざる機能を50個くらいまとめています。
Klearskyとは
私( mimonelu )が個人的に開発しているATProtocol/Bluesky用のWebクライアントです。特徴は以下の通り。
- オープンソース(BSD-3-Clause license) ※ GitHub
- Cloudflareでホスティング ※ https://klearsky.pages.dev
- たぶんサーバレス
- X/TwitterライクのわかりやすいUI
- 公式アプリの機能+α(色々な便利機能)
- ややエンジニア寄りでリテラシーの高い人向けかもしれない
- 2023年3月下旬あたりにリリースした老舗クライアント。もうじき90回目の更新を迎える。更新履歴は こちら
「とにかく面白そうな機能は後先考えず実装してみようぜ」の精神で真っ先に地雷を踏んできました。以下に挙げる大体の機能はKlearskyが初めて実装した機能になります。たぶん。違ったらご指摘ください。大体役には立ちませんが、ひとつくらいは役に立つかも?ではどうぞ。
アカウント関連
アカウント作成機能
たぶん他の3Pクライアントでは実装していない、アカウントを作成する機能です。が、あまりテストしていないので非推奨。公式から作成してください。ちなみにログイン時の二要素認証にも対応しています。OAuthはまだ。
メール認証アイコン
メールアドレスの認証が済んでいるかどうかを✔アイコンでお知らせしています。認証しないと未成年扱いですよ。
投稿関連
カスタムリンク
本文中に [文字列](URL)
と書くことで任意の文字列にテキストリンクを張れます。便利!
Zapリンク
本文中に @zap
と書くことでZapリンクを張れます。ただし「設定」→「その他の設定」→「Lightning」にアドレス類を入力しておくこと。もちろん閲覧者側もWallet of Satoshiなどのウォレットアプリをインストールしている必要があります。
アニメーション画像の添付/再生
アニメーションGIF、アニメーションPNG(.apng)、WebPなどを添付できます。SVGもアニメーション付きで再生可能。ただし他のクライアントでは静止画像(JPEG)で表示されるでしょうね。たぶんKlearskyしか対応していないし、公式が対応しない限り3Pで対応してもね…といったところ。
(ポストの)カスタムラベル
カスタムラベル(任意の文字列)を設定できます。何の役にも立ちません。エンジニアが遊びやテストで使うような機能です。
リストメンション
任意のリストを選択して投稿すると、そのリストユーザーに通知が届きます(最大30人まで)。表面的には普通のポストで、通常のメンション文字列( @mimonelu.net みたいな)が表示されることもありません。つまり表向きにはメンションしているかどうかすらわかりません。実際これは facets という内部機能を勝手に応用しているので褒められたものではないのですが、多数の知り合いに呼びかける際などには有用です。
過去ポスト
ポストの投稿日時を変更できます。役には立ちませんが、例えば645年6月12日に設定して「大化の改新なう!」みたいな遊びができますね。ただし公式アプリでは投稿日時が改ざんされている旨が表記されるのでバレます。悪用はやめましょう。また最新のポストではないのでTL上にも流れてきません。これを利用して誰にも気付かれずにポストすることも可能と言えば可能です。
「本日の投稿可能な動画数/動画容量」
そのままですが、投稿可能な動画の本数と合計サイズを表示しています。この情報を表示しているクライアントは他にあるのかな?あってもまず見ないでしょうけど
検索関連
検索キーワードの保存
検索キーワードを保存・呼び出すことができます。地味に便利。
me
me
チェックボックスをONにすると自分自身のポストから検索できます。 from:me
と書くのと一緒。
トレンドタグ with SkyFeed
SkyFeedが提供しているトレンドデータをタグクラウドっぽく一覧表示します。トレンドと言っても使用頻度の高いハッシュタグなので、大体が一人で同じタグを使い回しているよくわからないユーザーばかりですね…これは公式のトレンド機能が実装されたら撤去する予定。
通知関連
種類別タブボタン
リプライやリポスト、引用RPなど通知の種類ごとにフィルタリングできます。通知数も表示。
通知別にまとめて表示
公式もこの形式ですが、取得した通知ごとにまとめる方式なので何度も同じ通知が表示されるんですよね。Klearskyはすべてひとつにまとめます。この機能はリリース当初から実装している自慢の機能なんですよ、はい。
フィードジェネレーターへのいいねを通知
青いハートの通知がそれです。
スターターパック経由で新規登録したフォロワーを通知
たしか、カードのアイコンが表示されている通知がそれです。うろ覚えです。
チャット関連
チャットまわりは特に独自機能と呼べるものはありません。翻訳、DID・本文のコピー、ソースの表示くらいです。
ポスト関連
ポストを非表示にはしない方針
機能というか方針なんですが、コンテンツフィルタやワードミュートなどにヒットしたポストでも完全には非表示にせず、折り畳んだ状態で表示します。これは「なるべくすべての情報を表示する、少なくとも存在はユーザーに知らせる」というKlearskyの方針によるものです。
自動翻訳
Bluesky初の自動翻訳機能なんですよ。「設定」→「ポスト設定」→「自動翻訳」から設定可能。ポスト本文の下に翻訳を表示します。でもAPI制限もあるし、もっぱら本文中の「翻訳する」リンクで翻訳してますね。
強制翻訳
自動翻訳や「翻訳する」リンクはポスト言語が設定されているポストでのみ有効です。設定されていない外国語のポストを翻訳したい場合はポストメニューの「翻訳する」を選択してください。後はGoogle翻訳がよろしくやってくれます。
ブックマーク
お気に入りのポストをブックマークできます。タグも付けられます。そしてデータはPDSに保存されるので閲覧環境が変わっても安心。カスタムコレクションを使った機能ですね。ちなみにSkyFeedでインポート可能なJSON形式に変換することもできます。
タイムフィード
「特定のポストを基点として、その前後のポストを表示する」機能です。これは何に使うかと言うと、例えば何か興味を引くリポストが流れてきたとして、そのポストがどういった文脈で投稿されたのか気になったことはありませんか?それを解決するために実装した機能です。
「この直後に投稿する」
読んで字のごとし、前述の「過去ポスト」の応用で、そのポストの直後に投稿したように見せかける機能です。以前に投稿したポストを補足するようなポストを人知れず投稿したい時に役に立つ、かもしれません。
固定ポスト
今でこそ公式の機能ですが、最初に固定ポストを先走ってカスタムプロパティで実装したのは私でした。その後、例の悲劇が起きました。ということだけ伝えさせてください…
各種コピー機能
公式URLとかDIDとかハンドルとか本文とか、色んなものをコピーできます。メニューによって中身は変わるので注意。
「外部アプリで開く」
Klearskyと言えばこれですね。他のATProtocol/Bluesky関連サービスでポストやアカウントを開く機能です。Klearskyは早くから他の3Pサービスと連携する機能を開発していて、一時期はけっこうな数の3Pクライアントが名を連ねていました(クライアントは今は2つだけ…)。下4つはエンジニア向けです。
「共有する」
私にもよくわからないんですが、OS?ブラウザ?のシェア機能を呼び出せます。環境によっては項目自体表示されません。なんすかこれ?
「ソースを表示する」
ポストやアカウントのデータ(APIレスポンス)を別タブで表示します。が、レスポンスそのものではなく、Klearskyが扱いやすいように整形したり、インジェクションしたデータが入っちゃったりしています…いやちょっとメモリがですね、はい
ポストメニューの「プロフィール」のアイコン
さりげなくポストユーザーをフォローしている/されている状態をハートのアイコンで示しています。 (Blueskyにはリストがあるし、フォロー機能自体必要ないと個人的には思っていますが…とりあえず。)
添付画像を背景に設定する機能
Klearskyには画像のURLを入力することで背景画像に設定できる機能があります(「デザイン設定」→「壁紙」)。で、ポスト画像を拡大表示した時に表示される左上のアイコンを押すと、自動的にその画像が背景画像になるってわけ。へぇ〜
リンクカードの埋込再生
Apple Music・Giphy・Spotify・Tenor・Twitch・YouTube・Vimeo・ニコニコ動画の埋込再生に対応しています。埋込再生も最初に実装したのはKlearskyなんですが、これがまた重いんですよ。そして見えないところでエラーが大量に発生しているはずです(私のせいではない)。なのでOFFにした方がよろしいかと
ラベル押下でラベラー設定を直接表示
公式もこうすればいいのに。
引用元の引用元を表示
実はポストデータには「引用元の引用元」まで含まれています。で、Klearskyはそれを表示することが可能です。入れ子の入れ子ですね。
プロフィール関連
ハンドル変更履歴
ハンドル押下でハンドル変更履歴ポップアップが表示されます。主にエンジニア向け。なりすましの調査に利用したりすることもあります。
(アカウントの)カスタムラベル
これもエンジニアのおもちゃみたいな機能です。「プロフィールの編集」から設定できます。できますがしない方が良いと言っておきます。
「ポスト検索」
そのユーザーのポストだけを対象にして検索できます。 from:ハンドル
と一緒。
「最初のポストを見る」
そのユーザーが最初に投稿したポストを前述した「タイムフィード」で表示します。つまり古い順でポストを閲覧できます。気になるあの人の最初のポストを見てみたい!という時にどうぞ
「投稿画像をダウンロード」
色々条件付きですが、そのユーザーが投稿した画像を一括ダウンロードしてZIPに固める機能です。悪用厳禁…とは言え悪用する人はこんな機能使わないか。一人で楽しむ人用の機能です。
「APIをコールする」
まさにエンジニアのおもちゃです。大体 describeRepo
を叩くためにあります。自分自身のプロフィールメニューではさらに3つのAPIをコール可能。
Atmosphere コンテンツの表示機能
これもKlearskyを代表する機能ですね。カスタムコレクションを利用した他サービスのコンテンツを一覧表示します。最近はサービスの数も増えてきて追い付けていない感ありますが…というか全部対応するのは無理があるのでどうにかしたいところ。というかというか、この機能だけ別サービスとして切り出した方が良くないですか?私誰と喋ってるんですか?
1日あたりの平均ポスト数
何気に気に入っている機能です。フォローするかリストに入れるかの判断材料にどうぞ。
Blueskyの開始日
「俺はこんな昔からいるんだぜ」と自慢したい時にどうぞ。嫌われます。
リポスト一覧機能
そのユーザーのリポストを一覧表示します。自分自身のプロフィール画面ではいいねしたポストの一覧も表示できます。実はいいね一覧を初めて実装したのも公式ではなくKlearskyで、当時は他人のいいね一覧も表示していたんですが、精神衛生上よろしくないと思われたため撤去した過去があります。
おすすめユーザー一覧機能
そのユーザーに関連するユーザーを一覧表示します。そういうAPIがあるので作ったわけなんですが、これ公式は使ってない?のかな?なんなのこれ?
フィード関連
前提として、マイフィードは公式アプリと連動しています。
マイフィードのソート機能
マイフィードポップアップの左上にあるアイコンでフィードをソートできます。いいねの多い順とか、名前順とか。ただし一度ソートしたら元に戻すことはできません。あしからず。
マイフィードのドラッグ&ドロップによる入れ替え機能
PC版には右サイドバーにマイフィード一覧があるんですが、そこでフィードをドラッグ&ドロップして順番を入れ替えることができます。便利。
リスト関連
リストも公式アプリと連動しています。
「リストの複製」
最近実装した機能ですね。文字通りリストを複製します。ただし色々条件付き。そしてAPI制限を受けやすい機能でもある。GitHubのフォークみたいなものです。
「フォロー中ユーザーの検証」
そのリストにフォローしているユーザーが含まれているかどうか検証します。これは「リストミュート・ブロックしたらそのリストにフォローしているユーザーも含まれていてさぁ大変」現象を回避するために実装しました。
リファレンスリストの表示
リファレンスリストとはスターターパックで使用されるリストのことです。公式アプリでは表示されませんが、Klearskyでは表示できます。つまり後からスターターパックのユーザーを編集できます。
スターターパック関連
ユーザーをリストで指定
公式アプリでスターターパックを作成する際はいちいちユーザーを一人ずつ指定する必要がありますが、Klearskyではリストで指定できます。簡単!
ユーザーリストの変更
スターターパックを作成すると、自動的に登録したユーザーをまとめたリファレンスリストも作成されます。そしてKlearskyではスターターパックで使用するリストそのものを後から変更可能です。これができるのはKlearskyだけ!なぜか一部の海外ユーザーに重宝されているようです。
ラベラー関連
ラベラーまわりは特別な機能はありません。ラベルの説明文を翻訳できたりとか、その程度。なおラベラーアカウントのサムネイルは四角で表示されます。
その他
マイワード
よく使う単語を保存して本文に挿入するだけの機能なので別にいいです。
ワードミュート
公式のAPIは使わずに独自に実装しています。メリットとして、ひとつのワードミュートに複数のワードを設定でき、簡単にON/OFFできる、ローカルストレージだから保存が早い、などがあります。
メディアの制御
画像や動画を表示しないようにできます。「適度」を選択するとフォロー中ユーザーのみ表示する、だったかな?
時間表記の切替
相対表記(「15分前」)と絶対表記(「10:15」)を切り替えられます。
各種新着情報の取得間隔
新着通知・新着チャット・新着フォロー中フィードを取得する間隔を設定できます。取得しないようにもできます。
心理的安全性の設定
リアクション数を非表示にしたり、ポストの投稿ユーザーを匿名化したりできます。これはもしかしたら撤去するかも
グローバルフィード
リアルタイムにすべてのポストを表示するヤバい機能です。 subscribeRepos
いわゆるFirehoseのデータをほぼそのまま表示しています(本当はJetstreamを使いたいんだけどWebなので…)。「いつか消す機能」筆頭なんですが、ずっと残ってますね。いつか消します。
他にも正確に書き出せば上記の倍くらいはあるんですが、気持ち悪くなってきたのでやめます。
Klearskyの今後については考えないようにしているので特にお伝えすることはありません。マイルストンなんて設定したら仕事になっちゃうし。行き当たりばったりです。まぁ、さしあたってはOAuthとリファクタ、パフォーマンス改善ですかね。特にリファクタ。今かなりひどいので…というわけで何か要望・不具合等ございましたらBlueskyか GitHubのイシュー へお願いします。
それでは良い年末を 三🦀