kmyblueの『フレンドサーバー』機能の概要

Mastodonのフォークの1つであるkmyblueはこのたび、『フレンドサーバー』という機能を実装しました。

人によっては、フレンドサーバーは連合リレーの代替になるという考えもあるかもしれません。しかし逆に考えて、すでに連合リレーがあるのにわざわざフレンドサーバーを実装する必要はないのです。この機能にはkmyblue特有の事情が深く関わっています。一方で、これはkmyblueの魅力を最大限に引き出す機能の1つでもあります。

この機能の実装について、背景・経緯も含めて解説してみます。


ローカル公開について

『フレンドサーバー』とは何か、そしてkmyblueにおける『フレンドサーバー』の強みを正しく知るには、まずローカル公開から理解する必要があります。ローカル公開から先に説明します。

ご存じの方もいらっしゃるかもしれませんが、kmyblueには独自の公開範囲があります。「ローカル公開」です。

ローカル公開ができるまで

kmyblueは、2023年2月11日の夜にひっそり始まったMastodonサーバーです。2月14日、4月、7月2日を経て、少しずつ人数を増やしており、現在の月間アクティブユーザーは約1000人になっています。(総登録は2000以上)

そんなkmyblueが始まったばかりの頃、Mastodonは絵文字リアクション機能を5日かけて頑張って実装した以外はほとんどバニラでした。公開範囲は「公開」「未収載」「フォロワーのみ」「指定された相手のみ」の4種類しかありませんでした。
そして「公開」にすればローカルタイムラインに載せることができます。

でもkmyblueは同人作家・読者の集まる、同人関係のテーマサーバーです。敵ってのは言い過ぎにしても、同人に対して攻撃的な方が一定数いらっしゃってて、同人作家の中にはそれを気にする人も多くいます。そのような方のところに自分の投稿が流れることは避けたい。

でもはっきり避けようとすると、公開範囲を「未収載」にしなければいけません。なぜなら「公開」投稿は、他のサーバーの連合タイムラインにも流れるからです。大きなサーバーならともかく、小さいサーバーの連合タイムラインでは特に目立ってしまうかもしれません。

そもそも連合タイムラインとは。相手のサーバーから自分へフォローがないと、相手のサーバーの連合タイムラインには流れません。一見、自分をフォローするのは同人に興味のある人だけだろうから自分の発言もそういうサーバーにだけ流れると思うでしょう。しかしこれには、同人作家から見て2つの例外があります。

  • 例外1・相手は同人をテーマとしたサーバーのユーザーであるとは限りません - Mastodonにはいろいろなサーバーがあります。その中には汎用サーバーも含まれます。汎用サーバーは、同人に興味のある人とない人、同人が嫌いな人がまとめて利用しています。そのようなサーバーの連合タイムラインに流れるのにはリスクがあります

  • 例外2・リレーサーバーに流れます - リレーサーバーというものがあります。Mastodonがあらかじめリレーサーバーと接続設定をしておくと、全ての公開投稿をリレーサーバーに渡します。これによって、恥ずかしい公開投稿が全て他の小規模サーバーの連合タイムラインに流れます。リレーサーバーを切れという話ではありますが、それはそれで人の少ない小規模サーバーの連合タイムラインが寂しくなる、リレーサーバーに登録しているサーバーの中には同人作家もいるかもしれないのに新しい出会いがない、といったデメリットも甘受しなければいけません

一方で、公開範囲を「未収載」にしてしまうと、以下のデメリットがあります。

  • デメリット1・ローカルユーザーとの交流が難しくなります - 「未収載」にした投稿は他のサーバーの連合タイムラインに流れませんが、同時に自分のサーバーのローカルタイムラインにも流れません。そのため、ローカルユーザーに自分に気づいてもらえなくなります。自分から能動的にフォローしない限り、誰かに自分に気づいてもらえなくなるかもしれません

  • デメリット2・ローカルタイムラインを中心に見る人に発言が届きません - デメリット1より、必然的に未収載投稿を見たい人はそのアカウントをフォローすることになります。しかしMastodonにはローカルタイムラインがあり、現実問題として、それしか見ない人も実際にkmyblueには多くいます。そのような人たちは、せっかくアカウントをフォローしても、未収載投稿に気づかないかもしれません。そのサーバーでのローカルタイムラインの依存度が高いほど、渾身の尖った作品を未収載で投稿しても、誰も気づかないかもしれません

  • デメリット3・自分の投稿を誰も検索することができません - 未来の話が入ってしまいますが、Mastodon v4.2.0ではあらかじめ設定したアカウントの公開投稿を誰でも自由に検索できるようになりました。未収載投稿は当然ですが、その枠組みの中に入りません

同人作家の中には排他的な考えを持つ人も多くいます。これはいきさつを考えれば仕方のないことだと考えています。それに最大限配慮したい(自分も使いたい)と考え、kmyblueはサーバー設立から1ヶ月足らずの3月6日に、ローカル公開を実装しました。

ローカル公開とは

ローカル公開は、初心者向けには「同人に興味のある人のタイムラインに流す」公開範囲だと説明しています。その説明がどこから来ているかを、機能面で説明します。

ローカル公開の仕組みは単純です。自分のサーバーの中では「ローカル公開」と認識され、ローカルタイムラインに流れます。しかし、これを他のサーバーに配送するときに「未収載」投稿であると偽装します。他のサーバーからは「未収載」と認識されるため、連合タイムラインには流れません。

これを可能にしている理由はいくつかありますが、そのうちの1つが「自分のサーバー向けのデータ(REST API)」と「他のサーバー向けのデータ(ActivityPub)」のフォーマットや生成方法が異なる、という点でした。また、「未収載」というMastodonの既存の連合の仕組みだけを使った機能です。これをうまく使って動作させています。

「公開」投稿はローカルタイムラインに流れて、そのサーバーにいる誰もが確認できます。一方で他のサーバーでは「未収載」になるため連合タイムラインには流れませんが、フォロワーのホームタイムラインには流れます。

連合タイムラインは「フォロワーと同じサーバーにいる全てのアカウント」が認識できますが、ホームは「フォロワー」ただそれのみが認識できます。そしてそのフォロワーは、すなわちkmyblueのアカウントに直接興味を持ちフォローしてきた本人です。それらのユーザーのタイムラインにしか流れないようにすることで、先述の説明を実現しています。

ローカル公開の問題点

一見全てを解決するように見えたローカル公開ですが、銀の弾丸ではありません。運用していく上で、以下の問題点が見えてきました。

  • 問題点1・未収載投稿のデメリットを引き継いでいます - ローカル公開投稿も、ブーストで拡散されることによって意図しない人に見つかるおそれがあり、私も何度か自分の投稿でこれを経験しています。これはMastodonの未収載投稿でも起こりうる問題であり、ある程度は仕方ないと思っています。本当にまずい投稿は公開範囲を「フォロワーのみ」にするしかありません

  • 問題点2・ローカル限定投稿とは異なります - ローカル公開はMisskeyにあるローカル限定と異なり、連合します。そして他のサーバーのアカウントにも届きます。これは一見メリットですが、ローカル限定投稿には自分の投稿の複製を防ぐ、著作権上ナーバスな問題を解決する、内輪の話を完全に外に出さないという側面があり、ローカル公開はそれを解決しません。
    話はそれますがローカル限定投稿は同時に、特定の人気インフルエンサーの投稿を全て確認するには同じサーバーに登録しなければいけない、全てのインフルエンサーを追いたければローカル限定機能のある全てのサーバーに登録しなければならず管理が大変、分散型SNSのメリットを半殺しにするといった状況を作り出すためkmyblueでの実装予定はありません

  • 問題点3・連合を阻害します - これがローカル公開の最大の問題点だと思っています。以下に詳述します

そもそもローカル公開は連合を一部制限する目的で実装した機能ですが、それが連合を阻害することをデメリットに数えるのは一体なぜでしょうか。

もし同人関係のサーバーがこの世界でkmyblue1つだけであれば、これは問題にはなりません。なぜならローカル公開は同人に興味のあるすべての人にまんべんなく届くからです。
しかし現実には、同人関係のサーバーは大量にあります。その中には当然、kmyblueと考え方の非常に近いサーバーもあります。そのようなサーバーに対して、ローカル公開は不便です。

ローカル公開には以下の特徴がありますが、ことごとくkmyblueと非常によく似た他のサーバーとの連合に適していません。

  • 特徴1・他のサーバーの連合タイムラインに流れません - これはkmyblueと非常によく似たサーバーの連合タイムラインにも同時に流れないことを意味します。連合タイムラインを見る人からの接触を得る機会を失います

  • 特徴2・他のサーバーから検索・購読できません - Mastodon・FedibirdやFirefishでは、公開投稿であれば自由に検索・購読できるよう設定することができます。ただし未収載投稿にこの設定は適用されません。検索や購読で、自分と趣味の同じ人から見つけてもらう機会を失います。ただしMisskeyは他サーバーの未収載投稿を自由に検索できるため、これに当てはまりません(kmyblueでは対策機能も実装しています)

  • 特徴3・他のサーバーのトレンドに掲載されません - ローカル公開を「自分と趣向の近い人にだけ見て欲しい」と意図して使っているのであれば、未収載投稿をトレンドに掲載しない他のサーバー、とりわけ自分と趣向の非常に似ているサーバーの仕様が不便に感じることもあります

一言で言うと、ローカル公開は確かに自分と異なる人から発言を隠すのには向いていますが、他のサーバーにいる自分と趣味の近い人からも同時に隠れてしまいます。

ローカル公開は「同人に興味のある人のタイムラインに流す」公開範囲であると本稿の冒頭で説明しましたね?
実態は「自分と同じサーバーのユーザーとつながる」ための公開範囲という側面が強くなっています。趣味ではなくサーバー単位での分断になってしまうのです。これはローカル公開の本来の設計意図とそくわないものです。

フレンドサーバー

ローカル公開の問題点は、私も早いうちから認識していました。ローカル公開を実装した約1ヶ月後の4月10日にこのようなアンケートをとる程度には、危機感がありました。

いくつかの紆余曲折を経て、期間は空いてしまいましたが10月9日に『フレンドサーバー』機能を実装しました。この記事の本題となります。

ローカル公開投稿は、他のサーバーには未収載として配信されると説明しました。
しかし、もしその相手サーバーが自分のフレンドサーバーとして登録されていれば、ローカル公開のまま配信します。相手のサーバーにはローカル公開として認識され、連合タイムラインに流れます。

つまり、趣味や傾向のよく似ているサーバー同士でお互いの投稿を認識しやすくすることで、サーバー同士の結びつきを強くしようとしたものです。

どうしてもフレンドサーバー機能を作らなければいけなかった理由

これに関して、一部の読者にとっては複数の合理性に関する疑問が発生するでしょう。それについても触れておきます。

  • 疑問1・趣味や傾向の非常に近いサーバー同士であれば、最初から1つにまとめて運営すべきでは? - 2つのサーバーは全く同じではありません。ローカルユーザーの微妙な違いによって、雰囲気が大きく変わることもあります。構成員ではなく最初期に発言した人によってサーバー全体の雰囲気が決まることもしばしばあります。このようなサーバーを1つにまとめるのは営利団体にとってほぼ唯一の選択肢ですが、あえて分けられるのが個人運営の多い分散型SNSの強みでしょう

  • 疑問2・わざわざそんな規模の小さいサーバーに登録しなくても、大きいサーバーに集まればいいのでは? - ローカルタイムラインやプライバシーをさほど気にしない人にとっては、それが答えになります。一方で、ローカルタイムラインの居心地のよさはサーバーの知名度や規模とは比例しません。サーバーの数だけ雰囲気があって、人々は自分に一番合ったサーバーを探します。これも分散型SNSの強みの1つです

ローカル公開投稿を見たいという理由でkmyblueに登録することを防ぐのも、何日もかけてフレンドサーバーを実装した目的の1つでもあります。人が増えるほど、意見の差も大きくなります。1つのテーマサーバーの中に、特定ジャンルが好きな人、嫌いな人が混在するようになります。フィルター機能によって嫌いな人はみずからそのような投稿を自分の視界から消すことも可能ですが、そもそも投稿する人が心理的にいづらくなります。この投稿者の感情は、技術や合理性で説明することはできません。
全ての同人大好きなオタクをkmyblueに集めるのは不可能です。サーバーのスペック上の問題は関係ありません。サーバーごとに雰囲気が違いますが、単一の雰囲気を全員のオタクに押し付けてはいけません。

このことから、ローカル公開によるつながりを求めてkmyblueに人が大量に集まるのは、数千人程度ならまあメリットのほうが上回りますが、そのうちリスクが気にかかるようになります。サーバー単位で繋がりを排除する機能があってはならないと考えているのです。

以上が、kmyblueフォークを採用しているサーバーが自分以外ない中でどうしてもフレンドサーバーを作りたかった理由です。有り体に言うと、ローカル公開に対する批判というか、ないと思いますが万が一でもローカル公開を理由にkmyblueに人が集まる前に、先に逃げ道を作っておきたかったのです。
実際、フレンドサーバーは特に大きなサーバーから小さいサーバーが分裂するシチュエーションにもよく向いています。分裂の敷居を下げる側面もあります。

フレンドサーバーの特徴

上の方でも軽く触れましたが、改めてフレンドサーバーについて説明しましょう。10月9日時点で、フレンドサーバーには以下の機能があります。

  • 特徴1・ローカル公開投稿をそのまま配信します - 先程も説明しましたがフレンドサーバーの最大の特徴であり、目的そのものです。フレンドサーバーは、お互いのローカル公開投稿を連合タイムラインで見られ、また投稿によっては自由に購読・検索できます。お互いの結びつきの幅が広がることになります。
    逆に言うと、数ある他のサーバーの中でわずかしかない自分と趣向の近いサーバーに投稿を届けるため、公開範囲を「公開」にするなど我慢する必要性も下がります

  • 特徴2・全ての公開・ローカル公開投稿を例外なく共有します - 自分のサーバーの「公開」「ローカル公開」投稿をもれなく相手のサーバーに送信することで、ローカルタイムラインにある全ての投稿を共有します。
    ローカル公開に興味のない人にとってはこれが最大の特徴になるかもしれませんが、連合リレーで済む場合は連合リレーを使うべきです

これらの特徴をまとめると、例えば以下の状況でフレンドサーバーは威力を発揮します。

  • 特定ジャンルに偏ったコミュニティが複数のサーバーに分散している時、フレンドサーバーによってサーバーを超えて、お互いのローカル同士の結びつきを強くできます

  • 大きなサーバーから1つまたは複数のサーバーが分裂する時、大きなサーバーとフレンドサーバーで繋がって全ての投稿を共有することで、ローカルユーザー同士の結びつきを維持できます(それ以外の外部のサーバーとの繋がりはどうしても弱くなりますが)

ただしこれらのメリットはローカル公開の存在が前提であり、ローカル公開の存在しないMastodonにとってはどうしても連合リレーを差し置いてまで利用するメリットは弱くなります。

連合リレーの欠点

先程も話はありましたが、連合リレーはMastodonに標準で搭載されている機能の1つです。連合リレーについての説明は他のサイトに委ねるとして、ここでは使い分けについて説明します。

使い分けというか、先にお互いの欠点を説明して、最も妥協できる点を見出すのがいいでしょう。

  • リレーサーバーは公開投稿しか配信しません - そもそもの問題として、リレーサーバーは公開投稿だけを選択して配信するよう実装されているものがあります。つまり、リレーサーバーにローカル公開投稿を送っても配信してくれないのです。なのでローカル公開をリレーサーバーに限って公開に変換しなければいけないのですが、これは投稿者の意図に反するものであり不適切です

  • リレーサーバーは投稿を共有するサーバーを個別に選べません - ひとたび投稿を送れば登録されている全てのサーバーに送信するのが連合リレーです。たとえ連合リレーに登録されている中に自分と思想の異なるサーバーがあっても、例外なく配信します。これは同人のような、連合する相手を選びたいサーバーには不利に働きます

以上の欠点は、成人向け創作やボーイズラブなど特にセンシティブな話題を扱うコミュニティにとってはとりわけ大きく見えます。

連合リレーはサーバー間の結びつきを単純にするメリットもありますが、一方で細かいカスタマイズには適していません。

特定テーマに沿った話題だけを配信する連合リレーサーバーを探す/建てるのも手です。しかしそれでも、その話題に関する最も当たり障りのない部分だけを共有しようとするサーバーは出てしまいます。

フレンドサーバーの欠点

ローカル投稿が銀の弾丸でないのと同時に、フレンドサーバーにも現在考慮する上でも欠点が存在します。最初から無敵を前提に設計した機能ではありません。

  • デメリット1・連合の結びつきが複雑になります - 連合リレーは多数のサーバーをひとまとめにしたシンプルな構造であるのに対し、フレンドサーバーは2つのサーバー同士の結びつきが基本です。サーバーが多数あるとそれだけフレンドサーバーの関係を作らなければいけません。サーバーが増えるほど、その結びつき、マップの作成は複雑を極め、ユーザーが全容を把握するのは困難になります

  • デメリット2・連合リレーよりも負荷が高くなりえます - フレンドサーバーには、全ての公開・ローカル公開投稿をお互いに送受信する機能があります。この機能において、投稿の受信は問題なくても、送信の時にサーバーの数だけ送信しなければいけないため、その分負荷がかかります。投稿を他のサーバーに配信する負荷をリレーサーバーに分担できないのです。
    とはいえMastodonでは、フォロワーの数に関係なく1つのサーバーには1回しか送信リクエストしないのが基本なので、小規模サーバーが大量に発生しない限り懸念するほどの負荷はすぐには発生しないでしょう

  • デメリット3・フレンドサーバー同士は運命共同体になりかねません - フレンドサーバーはお互いに強く結びつきます。これはアカウント単位での連携となるデフォルトのMastodonよりも強いものです。そのため、例えば片方のサーバーにスパムがわく、迷惑ユーザーが出現するなどすれば、もう片方のサーバーも不利益をこうむります。ただしkmyblueにおいては、フレンド関係を一時的に無効にすることも可能ですし、いつでも接続を完全に解除できます

  • デメリット4・フレンドサーバーの管理者同士のトラブルになりかねません - これはフレンドサーバーというよりも運用する人の問題ではありますが、フレンドサーバーにもアカウントと同様に、システム内部でフォロー・フォロワーの関係があります。「いつの間にかフレンドを解除されていた」「フレンドを抹消されていた」「投稿の送信が止められた」などで管理者同士のトラブルに発展しないよう、ユーザーの利益も天秤にかけた上で上手い立ち回りや連携が求められます。フレンドサーバーが増えるほど、連合リレーの結びつきよりも人間関係のほうが複雑になりかねません。本当に仲良くやっていけると思ったサーバーとだけ結ぶのも有効でしょう

  • デメリット5・そもそもフレンドサーバーを実装しているサーバーがほとんどありません - フレンドサーバーを実装しているのは、今のところkmyblueだけです(連合が前提の機能を実装してるサーバーが1つしかない時点で有効に機能していないともいえます)。また、お互いのサーバーがフレンドサーバー機能を実装する必要があります。したがってフレンドサーバーに固執するメリットはほとんどなく、たいていは連合リレーなどすでにあるもののなかから対応を選ぶことになるでしょう

  • デメリット6・そもそもローカル公開という公開範囲を実装しているサーバーがほとんどありません - フレンドサーバーは、現在kmyblueしか対応していないローカル公開という公開範囲の問題点を改善するために作ったものであり、そもそもその公開範囲がないコミュニティでは必要性はほとんど感じないと思います

以上のことから、カスタマイズ性やローカル公開投稿の共有を重視する場合はフレンドサーバー、連合リレーの欠点を甘受できるようなコミュニティであれば連合リレーが適しているでしょう。ちなみにkmyblueには、ローカル公開投稿を禁止する管理者オプションも存在します(5.x LTSには搭載されていません)。

フレンドサーバーの実装

フレンドサーバーを現在実装しているのはkmyblueだけですが、どなたでも自由にkmyblueのプログラムを使って自分のサーバーを立てることが可能で、実際kmyblueもフォークとして整備しています。

ですがそれ以外のサーバーがフレンドサーバーを実装したいと考える場合、連合リレー連携の実装が大いに役に立ちます。

まず、フレンドサーバーは「自分から相手に申請」「相手から自分に申請」と、申請に方向がありますが、実際にはどちらか片方が有効になっていれば有効として扱われます。

申請・却下・承認のフローには、通常のアカウントフォローと同じFollow、Accept、Rejectが使われます。オブジェクトはフォロー相手のURIの代わりに公開コレクション「https://www.w3.org/ns/activitystreams#Public」が使用されます。

全ての公開・ローカル公開投稿を共有するためには、お互いのサーバーの設定が有効で、かつ全ての投稿を送る設定・受け入れる設定の2つを有効にしなければいけません。
理由として、Mastodonにはもともと、自分と関係のない投稿が来ても受け付けない・ブロックするという仕様があります。フレンドサーバーはそれを迂回しなければいけませんが、まずお互いのサーバーでお互いがフレンドサーバーとして認識されないと話になりません。そのような事情があって、全投稿の共有は相互有効が前提になっています。

詳細な実装はここから参照できます。

まとめ

kmyblueは同人テーマサーバーという性質上、このような複雑な公開設定を実装するに至りました。
もちろん、ローカル公開を実装しなければこんな複雑なものも実装する必要はないということは、私でもさすがに思い至っています。

kmyblueは、これ以外にも検索に関する諸設定が存在し、全体的にローカルに閉じるコミュニティに適していると考えます。ローカルに閉じるだけでなく、趣向の似たサーバー同士がつながるためにフレンドサーバーは効果的です。

連合リレーと比較したデメリットも考慮の上で使って欲しい(その前にまず実装して欲しい)なーって思ってます。

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