【2023/08】Mastodon検索の最新事情

以前もこういう記事を書いていましたが、先日Fedibirdとkmyblueの仕様変更がありましたので、あらためて最新情報について説明します。
当記事はMastodonサーバー視点で記述しますが、Misskeyの仕様の話も入っています。

忙しい人向けにざっくり説明すると、FedibirdとkmyblueはMisskey系フォークのサーバーの「パブリック(公開)」「ホーム(未収載)」のすべての投稿を誰でも検索できるように修正しました。これによって、検索できる投稿の幅が広がりました。
この記事では背景から説明します。

MisskeyとMastodonの検索の違い

Mastodonの検索仕様

まずMastodonでは、全文検索において、以下の投稿しか検索できません

  • 自分がリプした投稿

  • 自分がお気に入り登録した投稿

  • 自分がブーストした投稿

  • 自分がブックマークした投稿

  • 自分が投票した投稿

  • 自分の投稿

詳しい理由は他をあたってほしいのですが、Mastodonでは『見せたくない人に見せない』という大きなコンセプトがあります。
Mastodonの全文検索が上記に限定されているのは、ユーザーがこれまでに見た投稿のうち気に入ったものだけをもう一度見る、という意味合いが強いかもしれません。

ですが結果的に、全文検索による出会いがなくなってしまうというのも確かです。

Mastodonはハッシュタグ検索に特化しており、ハッシュタグ検索であれば上記制限に関係なく特定のタグが付いた「公開」投稿を検索することが可能です。しかもリアルタイムストリーミング可能というおまけ付きです。

要するにMastodonは全文検索をあまり重要視していないのです。全文検索だと、思いもあらぬ方向から自分の投稿が検索されるリスクがある。ハッシュタグ検索であれば、検索されたいキーワードでしかこの投稿は引っかかりませんから、自分の想定した人に検索してもらえる。そういう違いがあります。
ユーザーは各投稿に検索して欲しいキーワードを添付します。検索する人は、『ユーザーがこのキーワードなら検索してもいいよと指定したキーワード』を使って検索します。くるっぷも同じ仕様ですね。

Misskeyの検索仕様

Misskeyの仕様はいたってシンプルです。

公開範囲「パブリック」「ホーム」の投稿を、自由に検索できます。例外はありません。サーバーの認識するすべての投稿について、検索できます。
また、採用している検索エンジン次第では、フォローしているユーザーに限り「フォロワーのみ」投稿も検索できるサーバーもあるようです。misskey.ioでは「フォロワーのみ」は検索できません。

自由すぎるがゆえにMastodonとの競合の問題も起きるほどですが。。

Mastodonの検索が不便だと感じた方の代替手段

ハッシュタグ検索、日本人の間ではあまり広まっていないと感じています(政治クラスタの間では広く使われているようです)。理由はわかりませんので勝手な想像になるんですけど、単に文化の違いというか、日本人のオタクは外国人ほど自己主張が激しくないのかもしれません。

Mastodonは全文検索が弱い、ハッシュタグを使うべきだ、と分かっていても不便と感じる方は多くいらっしゃいます。そこでMastodonユーザーにある主な手段は2つあります。

1つはMisskeyにもアカウントを持って、Misskeyから検索すること。ズルと言っちゃえば終わり、良くて迂回手段です。これでMastodonを含むすべてのサーバーの投稿を検索できます。
もちろん一部Mastodonユーザーにとっては想定外の行為であることを補足しておきます。

1つはnotestockを使うこと。notestockはTwilogのようにユーザーの投稿を記録するシステムではありますが、アカウント縦断検索の代替手段として紹介されることがあります。notestockは、自分の投稿を検索されてもいいかどうかを設定することができますから、Misskeyと比べてプライバシーへの配慮はあります。

Fedibird・kmyblueのこれまでの対応

さてMastodonの理念は結構ですが、初心者から見てどう思うでしょうか?

例えばなぜTwitterに人が集まったかと言うと、自由な検索で自分と属性の近い人と繋がれる、災害や事件が起きたときに他の人たちの反応を見る、共通の話題で盛り上がれる、そういう側面もあるんじゃないかと思います。
Mastodonにはそれがありません。Mastodonはハッシュタグ検索が前提です。なのでTwitterのような自由な検索はサポートしません。そのためか、自分の周囲では検索機能が弱いと感じる人がかなりいらっしゃいます。その人達にとって、Misskeyの自由な検索システムは魅力的に見えます。

Mastodonの検索機能はTwitterと比較すると改善の余地が大いにあると言わざるを得ず、新しい出会いの場にもなりえません。そのためにFedibirdやkmyblueは、投稿の検索機能を拡張するためにあれこれ工夫しています。

Searchabilityシステム

まずFedibirdが導入したのが「検索範囲」というシステムです。これ、kmyblueでは呼び方が違ってて「検索許可」という名称になってますので、この記事ではまとめてSearchabilityと呼称します。

なぜMisskeyのような自由な検索ではなくSearchabilityという回り道を使ったかと言うと、本家Mastodonに対する配慮が入っています。他のMastodonの設計思想を尊重しつつ、自由にできるところだけ自由にしようという発想からきています。

Searchabilityは、投稿ごと・アカウントごとに以下の値を設定します。

  • public - 誰でもこの投稿を検索可能

  • private - フォロワーのみ(kmyblueでは反応者も追加される)

  • direct - リアクションした人のみ(kmyblueでは反応者と訳している)

  • limited - 投稿した人のみ(kmyblueのみ)

1つの投稿に対して「投稿のSearchability」「アカウントのSearchability」2種類の値があるのですが、厳しい方が優先されます。例えば投稿が「public」でもアカウントが「direct」ならば、その投稿のSearchabilityは「direct」として扱われます。

kmyblueは「アカウントのSearchability」をローカルユーザーが設定することをサポートしないことでシステムを簡略化していますが、Fedibirdやその他のサーバーから来た「アカウントのSearchability」設定は考慮されます。

なおSearchabilityは投稿の公開範囲とも連動します。Fedibirdとkmyblueの重要な差異もここにあるのですが、ややこしくなるので説明は下に回します。

このシステムを採用することで、Fedibird、kmyblueは、検索できる投稿の範囲が広がりました。各投稿をいちいちお気に入りに登録しなくても、未知の投稿を、投稿者のプライバシーに配慮しつつ、広い範囲で検索できるようになりました。
これだけ言うと聞こえはいいんですが、実際に検索できる範囲はどこかというと、以下の範囲になります。

  • Searchabilityに対応したサーバーの投稿

  • プロフィールに特定キーワードが含まれるアカウントによる投稿(kmyblueのみ)

1つ目のSearchabilityに対応したサーバーはどこかというと、Fedibird、kmyblueしかありません。Misskeyも含まれていません。Fediverse全体で見ると非常に狭いです。しかもその中から、デフォルトでdirectになっているSearchabilityをわざわざpublicにした人の投稿しか検索できないわけです。Fedibirdの場合は、投稿・アカウントの2段階の設定が必要です。大きなスイカを切って取り出した種を割って、中の核をピンセットで取り出すような作業です。

2つ目のプロフィールに特定キーワードが含まれるアカウントというのはkmyblueしか対応してなかったんですが、これはSearchabilityに対応していないサーバーからでも、kmyblue内の検索に掲載されるよう設定できることを意図したものです。
実態として、デバッグ用に使った自分のアカウント以外にこれを設定しているアカウントが確認されなかったので実質ゼロです。しかも途中からはバグでpublicに設定できなくなっていたので世話ありません。

Searchabilityによって確かに投稿の自由度は上がりましたが、なお多くの課題は残されました。Searchabilityは投稿者のプライバシーを優先した制度ですが、それゆえにそれぞれのアカウントに「自分の投稿を自由に検索可能」と宣言してもらわなければならず、確かに従来のMastodonよりはいいんですが、Misskeyと比べると効率の悪いものでした。

購読/アンテナ

実はFedibirdにもkmyblueにも、Searchabilityを無視して欲しい投稿を収集する機能があります。「購読」「アンテナ」です。
Fedibirdは「購読」kmyblueは「アンテナ」と呼んでますが、Misskeyのほうに同名称の「アンテナ」機能があるため、区別のために本記事では「購読」とします。

購読は、公開タイムイライン(連合/ローカル)に掲載されているもののうち、特定キーワードを含む投稿を拾って、指定したリストにまとめて読みやすくすることを意図した機能です。キーワードのほかにドメイン、ハッシュタグ、アカウントも指定できます。

購読においてSearchabilityは無視されるため、対応サーバーに限らず、他のMastodonやMisskeyの投稿を自由に収集できるメリットがあります。また最新情報を素早く追うこともできます。
対してデメリットは、過去の投稿が検索できないことに尽きます。一般に購読にキーワードを設定するのって、そのキーワードが有用だと分かった後での設定ですよね。自分が興味を持つ前に何が起きたか、経緯、過去のユーザーの作品や知見、そういうのを拾うことができません。悪い言い方すると、情弱ほど不利なシステムです。

それでもSearchabilityが無視されるのにはリスクが伴うため、kmyblueは「購読を拒否する」設定が可能で、Fedibirdも連合アカウントに限ってこれをサポートしています。

Fedibird・kmyblueの検索仕様変更

両者の全文検索機能は、他のMastodonと比較すると確実に優れています。プライバシーにも配慮しているという点で、Mastodonフォークの中でトップクラスの仕様であることは間違いありません。
とはいえ、自由な全文検索をサポートするMisskeyのユーザーが爆発的に増え、比較されるようになると、窮地に陥る事は疑いの余地がありません。

そこで8月4日にFedibirdは検索の仕様を大幅に変え、同日kmyblueも追従しました。この変更点はシンプルに説明すれば、Misskeyの投稿をSearchabilityに関係なく自由に検索できるようにしようというものです。

そもそもMisskeyはSearchabilityを無視して「パブリック」「ホーム」投稿を自由に検索できます。これはMastodonにとってみると不利な仕様ですが、Misskeyのユーザーにも同じ仕様が適用されます。ということは、MisskeyユーザーはMisskeyを使っている限り、自分の投稿が誰でも自由に検索できるということに同意したと見なすことができます。これを利用して、Misskeyの投稿を検索できるようにしたというわけです。

倫理的な問題

同じことはkmyblueでも考えていましたが、Fedibirdが対応するまで実装してきませんでした。この実装を倫理の観点から見てみます。

そもそもSearchabilityは、自分の投稿は自由に検索可能であると、各ユーザーが明示的に宣言することを前提としたシステムです。Fedibird、kmyblueともにデフォルトのSearchabilityはdirectとなっており、ユーザーが自分でpublicに設定するという手間が必ずあるように設計されています。
しかし今回の実装ではMisskeyサーバーのユーザーは、存在するだけで自分の投稿を自由に検索していいと「暗黙的に同意」したと見なされます。Searchabilityに「明示的な宣言」と「暗黙の上の同意」が混在した状態になるわけです。果たしてこれでSearchabilityの信頼が揺らがないかという懸念は自分ありました。

しかしSearchabilityを提唱したFedibird自身がそのような実装をしたことにより、kmyblueが対応するにあたって倫理上の懸念は取り除かれたと考えています。

ただしFedibirdも似たような懸念を持っていたのかもしれないのですが、FedibirdもMisskeyユーザーに対して「明示的な拒否」のサポートを追加しました。
ちなみにきっかけは全く違うとはいえ、kmyblueも同様の理由でそのような機能を追加しています。

プロフィール文の特定キーワードによるSearchability指定

Searchabilityに対応していないサーバー(mstdn.jp、misskey.ioなど)のアカウントは、プロフィール文に以下のハッシュタグを記載することで、自分のアカウントの投稿のSearchabilityを制御することができます

#searchable_by_all_users
(すべてのアカウントが投稿を検索できます)
#searchable_by_followers_only
(フォロワーのみ(kmyblueでは反応者も追加)が投稿を検索できます)
#searchable_by_reacted_users_only
(リアクションした人のみが投稿を検索できます)
#searchable_by_nobody
(kmyblueのみ:投稿者自身しか検索できません)

これは上述したSearchabilityの2種類の設定のうち「アカウントのSearchability」設定に該当します。(これはkmyblueの挙動ですが)Misskeyの投稿は「投稿のSearchability」がpublicになるわけですから、「アカウントのSearchability」によってこれが制御されます。そのほかのサーバーからの投稿に関しても、「投稿のSearchability」はいい感じに変換されますので、mstdn.jpの投稿にもSearchability=publicを適用することができます。

ただしこの設定にはデメリットもあります。「自分が検索できない」というところです。mstdn.jpのユーザーはこの設定をすれば、Fedibirdやkmyblueからは自分の投稿が検索できるようになるかもしれませんが、設定したところで自分が追加で何ができるというわけでもないため、ほとんどメリットを感じないかもしれません。
むしろ検索のメリットを享受するのはFedibirdやkmyblueのユーザーだけで、これはFediverse全体で見るとスイカの種1個をミキサーでかけた残りカスにもなりません。拡散の効果を期待するなら、むしろMisskeyに意識が向きます、Misskeyならばこれを設定しなくても検索できます。自分の投稿の検索結果への掲載を拒否しようとしても、Misskeyからはどっちみち検索できてしまいます。究極な話、これらのタグはプロフィール文を汚すので設定すべきではないのです。(筆者の私見です)

とはいえ、これらの「searchable_by_all_users」などのタグを設定している人が増え、認知度が上がると、Mastodonの開発者にもこの話が行ってもしかしたらMastodonの仕様が変わるかもしれないです。ゼロよりもましな可能性の話でしかありませんが。
のえるさんも同様の発言を、投稿の後半で説明しています。Searchabilityは、Misskeyと比べてプライバシーに配慮しているという利点を持ちます。Misskeyのような自由な検索か、あるいは投稿者のプライバシーにも配慮した優しい検索か、どちらの検索システムがいいか投票するようなものです。そういう意味では、Misskeyユーザーが「searchable_by_all_users」を設定することにも価値が出てくるでしょう。

時系列検索

Fedibirdは今回の仕様変更に伴い、時系列検索を正式にサポートしました。これまでは検索キーワードに特定のキーワードを含める必要がありましたが、そのキーワードがなくてもデフォルトで検索結果が時系列に表示され、最新の投稿を追うことができます。
これはkmyblueと同じですが、時系列検索に関する細かい話とkmyblue・Fedibirdの仕様の違いについては後でまとめて書きます。

そもそも本家Mastodonでは、検索結果は関連度順に出てきます。これもおそらく『意図しない人に投稿を見られない』ための工夫の一環でしょう。検索キーワードに最もマッチする投稿が、時系列を無視して、上位に表示されます。でもそれでは、最新情報を追うTwitterのような検索を求める人にとっては不利になります。

Fedibirdも同じ問題を認識していたようですが当初、関連度順に出てきた検索結果を時系列に表示するという挙動をしていました。これはどういうことかというと、検索結果の上位に関連度1~10位の投稿を時系列に並べ、遡れば11~20位の投稿を時系列に並べ、といった具合です。なので検索結果の10番目と11番目の時系列が逆になります。検索結果をすらーっと流してみれば、時系列がばらばらになっているように見える状態でした(実際は10件ごとではありませんが説明のために簡単にしてます)

kmyblueは従来から時系列順検索に対応していましたが、Fedibirdも今回の仕様変更で対応しました。これは、検索結果を関連度で並べ替えず、最初から時系列で並べ替えるものです。

【余談】ElasticSearch+Sudachiと連携した時系列検索の実態

Fedibirdのソースコードを調査した結果、Fedibirdでも確かにkmyblueで以前発生していた問題が起きているのですが根本的原因が異なる可能性があるため当項目を削除します。お詫びして訂正します。

Fedibirdとkmyblueの細かい差異

SearchabilityについてFedibirdとkmyblueには細かい点で差異がありますので、それもついでに説明します。

Fedibirdと違ってkmyblueにはローカルタイムラインがあります。そこで『ローカルタイムラインには載せたくないが検索されたい』という需要が発生しました。
他のサーバーの連合タイムラインに載せたくなければ、「ローカル公開」という公開範囲がすでにあります。しかしローカルタイムラインに載ると、自分と違うジャンルの人もたくさんいますから、その人達に見られる可能性があります。それすら載せたくないと考える人達が、うちが同人サーバーというのも関係しているでしょうか、多くいらっしゃいました。

Fedibirdでは、Searchabilityは公開範囲(Visibility)とも関連付けられます。「未収載」投稿のSearchabilityをpublicにすることはできませんので、誰でも検索できるようにはできません。
kmyblueもはじめはそれと同じ仕様にはしていましたが、要望を受けて「未収載」投稿のSearchabilityをpublicにすることができるようにしました。

この変更は7月上旬のことですが、地味に今回の検索仕様変更にも影響が出ました。
FedibirdではMisskeyの「ホーム(未収載)」投稿のSearchabilityはunlistedとなります。これはFedibird内でprivateと同等の扱いになるため、フォロワーでないと検索できません。
kmyblueでは上記仕様変更も関係してMisskeyの「ホーム(未収載)」投稿のSearchabilityがpublicとなり、誰でも検索できるようになります。これはMisskey内検索機能と同じ挙動です。Misskeyの検索機能と、kmyblueのSearchability仕様がたまたま合致したことにより、簡単に実現できたものです。

またkmyblueには、limitedという「自分以外検索できない」Searchabilityが独自にあります。これはFedibirdにはありませんが、本家Mastodonで標準で検索できる設定よりも狭いため、limitedに設定したところで他のMastodonからは検索できるため意味がありません。
そのため削除するつもりでいましたが、今回、Misskeyで「misskey.ioを含む一部サーバーにおいて、フォロワー限定投稿が一切検索できない」ということが発覚したため、Misskeyの状況により近づける目的で、Misskeyの限定投稿はlimitedに設定することとしました。連合から来た投稿に関しては検索できる人が誰もいないということになります。

Misskey開発者の説明を見る限り、フォロワー限定の投稿をフォロワーですら検索できないという仕様は意図的なものではなく、検索エンジンの実装に依存しているように見えました。ですがMisskeyでは、misskey.ioの利用者が突出して多いのが現状であり、misskey.ioの仕様に合わせることができるなら合わせたほうが他サーバー利用者の顰蹙を買いにくいと判断しました。
もちろんこの仕様にしたところで、他のMastodonやFedibirdから検索できることには変わりありません。

それでもMisskeyに劣ることは変わらない

Fedibirdの実装を長々と説明して、自分のサーバーでも実装しておいてこんなこと言うのもあれですが、Misskeyよりも検索機能で劣る状況は変わりません。

検索機能を拡張したところで、他のMastodonサーバーの投稿が自由に検索できるわけではありません。Misskeyでは自由に検索できます。これが違います。
もちろん他のサーバーでもプロフィールに特定のキーワードを記述することでFedibirdやkmyblueから検索することはできますが、キーワードを設定する人にメリットがあるかは不透明です。設定する人が多ければ多いほど、という話もしましたが。。

Misskeyの「自由な検索」を前にして、Searchabilityという「優しい検索」がすべきことは、プライバシーに配慮しているという点を打ち出すことしかありません。しかしそれには、投稿者だけでなく検索する人の同意も必要になります。その同意は、ソフトウェア開発者にも声として届くだけでなく、利用者がTwitterや他のSNSに戻るかという話にも関係しえます。検索する人が不便を受け入れてでも、投稿者のプライバシーを考慮した「優しい検索」に同意してくれるかが、今後の鍵になることは間違いありません。


この記事が気に入ったらサポートをしてみませんか?