この記事は、「Fediverse Advent Calendar 2024」に参加しています。空いていた12/9の記事として書かせて頂きました。

自己紹介

はじめまして、「ぷーざ」と申します。Fediverse(以下、Fedi)との付き合いは長く、今年で7年となります。Fediには多くの同士がいるであろう、「2017年4月組」の中のひとりです。
自分の場合は最初から自分のサーバーを立てるつもりで、記録によれば4月15日にPawooにお試しアカウントを作成したのが最初で、5日後の4月20日に最初のサーバーである美食丼を立てました。
その後、以下のような経歴を経て、

現在は、Fediの中で以下の4サーバーを所有する管理人(以下、鯖缶)として活動させて頂いています。

  • 美食丼 壁打ち・汎用(Mastodon)
  • キュアスタ! プリキュアシリーズテーマサーバー(Mastodon)
  • デルムリン丼 「ドラゴンクエスト ダイの大冒険」テーマサーバー(Mastodon)
  • ダイスキー「ドラゴンクエスト ダイの大冒険」テーマサーバー(Misskey)

また、自分で管理はしていませんが、キュアスタ!とは別のプリキュアシリーズのテーマサーバーきゅあすきー(Misskey)にも参加しています。

ここで、プリキュアではキュアスタ!きゅあすきー、ダイの大冒険(以下、ダイ大)ではデルムリン丼ダイスキー。といった具合に、それぞれで同テーマのMastodonとMisskeyのサーバーに参加していることに注目してください。
この様な、同テーマのサーバーを複数運用する管理手法のご紹介が、この記事のお題です。

デフォルトハッシュタグ

自分はFediに関わるようになる前から、プリキュアシリーズやダイ大のファンです。
Fediの中で、同じ作品のファン同士でコミュニティを作る方法はいくつかあります。プリキュアを例にすれば、 #プリキュア などと作品名のハッシュタグを公開投稿に加えるのはまずお手軽ですし、キュアスタ!の様なテーマサーバーを立て、ローカルタイムラインで会話するという手法もあります。

どちらの方法もグループチャットに近いもので、同じタイムラインを共有していることを前提としています。相手は特定せずに投稿することが多く、この場合、はたからはエアリプに見える投稿も名目上はメンバー全員に宛てた投稿となります。
作品名のハッシュタグで会話する前者の方法には「サーバーの垣根が超えられる」というFediならではの利点がありますし、後者のテーマサーバーにはサーバー自体に作品に特化したカスタマイズが加えられるという別の利点があります。この両方の利点を享受できる管理手法が「デフォルトハッシュタグ」です。(縮めて「デフォルトタグ」とも)

デフォルトハッシュタグを実現するには、以下の対応が必要とされます。

  1. すべての公開投稿に同じハッシュタグを追加する機能追加。(追加されるタグを「デフォルトハッシュタグ」と呼ぶ)
  2. サーバーのローカルタイムラインを、このデフォルトハッシュタグのタイムラインと置き換える機能追加。

後者は強く推奨されるものの、実際にはオプションで、「デフォルトハッシュタグのタイムラインをローカルタイムラインだと思ってください」という運用やコンセンサスで代えることも可能と思います。

デフォルトハッシュタグの面白いところは、デフォルトハッシュタグも他のサーバーからみれば普通のハッシュタグのひとつですから、サーバーの垣根を超えた乗り入れが可能なところです。
他サーバーからデフォルトハッシュタグを伴う公開投稿を行うことは、そのサーバーのゲストとして振る舞うことに似ています。「テーマサーバーに登録するほどではないが…」という選択肢をユーザーに対して柔軟に提供できるところが、このアイデアの優れた点であると私は感じます。

この「デフォルトハッシュタグ」は、当然ながら私が発明した概念ではありません。
記録によればtheboss.techというサーバーで実装されたのが最初で、その後複数のサーバーで採用されたとあります。冒頭に私の参加しているサーバーを挙げましたが、気づけば美食丼以外の全てにデフォルトハッシュタグがありますね。

MastodonとMisskey

長年Mastodonを利用し続けていた自分ですが、Misskeyにも興味を持ちました。とりわけ、カスタム絵文字による「リアクション」が利用できるのは、Mastodonにはない利点だと思います。
自分が管理していたテーマサーバー(及びデフォルトタグ #precure_fun#delmulin のコミュニティ)に、カスタム絵文字などMisskey由来の要素を採り入れるにはどうすればいいか?

「Mastodonにリアクション対応の改造を加える」というFedibirdのガチすぎる対応は既に存在しましたが、その様な大規模な改造は自分には到底手に負えないです。
デフォルトタグを持ったサーバーの鯖缶である自分は、そこで自分なりの方法を考えました。Fedibirdのような改造が直球であるとすれば、「同じデフォルトタグを持ったMisskeyをもう一つ立ち上げる」という変化球めいたアイデアです。
各サーバーが同じデフォルトハッシュタグを持つなら、ローカルタイムライン(Misskey側では「ホームタイムライン」)も同じものになることに注目してください。実質的には、それぞれのサーバーが同一のコミュニティに参加していることになりますね。
ユーザーは、MastodonとMisskeyの好きな方(使い慣れている方)を選べる利点がありますし、ヘビーユーザーの方は用途に応じて使い分けて頂くこともできます。

とはいえその頃(2023年)、既に3つのMastodonを持っていた自分には、更に追加で2つのMisskeyを管理することが難しく感じられました。
このアイデアを長年キュアスタ!を支えてきた同志である先代管理人、鴉河雛さんに相談したところ、 #precure_fun 側のMisskeyを受け持つことを快く引き受けてくれました。この経緯によって誕生したMisskeyサーバーがきゅあすきーで、同時に自分も #delmulin 側の新しいMisskeyサーバーダイスキーを新設したわけです。

Mastodon側の対応

Mastodon側ではデフォルトハッシュタグ自体のルーツであるtheboss.tech由来の改造や、そのバリエーションが一般的な様ですが、自分は拙作ツールmulukhiya-toot-proxy(通称「モロヘイヤ」)にこの仕事をやらせています。

デフォルトハッシュタグ対応は、以下の要素で構成されると前述しました。

  1. すべての公開投稿に同じハッシュタグを追加する機能追加。(追加されるタグを「デフォルトハッシュタグ」と呼ぶ)
  2. サーバーのローカルタイムラインを、このデフォルトハッシュタグのタイムラインと置き換える機能追加。

モロヘイヤに担当させているのは前者で、後者の対応はnginxだけで行っています。少なくともデフォルトハッシュタグ実現の為に、Mastodon本体への改造を行っていないことにお気づきでしょうか。モロヘイヤにデフォルトハッシュタグを実装した時、自分はMastodonの改造を維持できる自信を持てなかったので、この判断をしました。
機能追加自体は他サーバーの改造を参考にすれば実現できますが、一方でMastodon自体も更新されるのですから、共存していかなければいけません。 改造された箇所の理解は、鯖缶の責任で必ず行わなければいけません。当時の自分にはそれが出来そうもなかったですが、それでも機能実現の手綱は自分が握っていたかったのです。

モロヘイヤ自体の紹介は長くなるから、ここではしません。リポジトリの方をご覧ください。

Misskey側の対応

Misskeyにもデフォルトハッシュタグ改造がある様ですが(ふるすきーさんとか)それは採用せず、独自実装はきゅあすきーと分担して進めました。何より、既存実装を知らなかったから。

デフォルトタグの追記はMastodon同様、モロヘイヤで実現しています。 一方、ホームタイムラインの改造は、きゅあすきーの成果です。当時のMisskey(13.x)ではタグタイムラインのストリーミングは未実装でしたが、実は概ね動作するコードがコメントアウトで無効化された形で存在しており、それを修正してホームタイムラインとして採用したのが始まりだったと思います。

v2023.10系からFTT(Fan-out Timeline)なるRedisを活用したタイムライン技術が実装され、それまでの改造が利用できなくなりました。

Misskeyのパフォーマンス改善の取り組み⁠⁠⁠⁠・2023年11月
https://gihyo.jp/article/2023/11/misskey-08

FTT対応のホームタイムライン(及びソーシャルタイムライン)改造は、自分が行いました。
以前の改造が「ホームタイムラインのタグタイムライン化」であるとするなら、新しい改造は「デフォルトタグを持った投稿をホームタイムラインに加える」というもので、「ホーム」投稿の判定の拡張と言い換えてもよいです。
タグタイムラインをホームタイムラインとして利用していた頃は、性質の違いに悩まされたりもしました。新しい改造では「ホーム」判定の拡張だけを行っていて、性質はあくまでホームタイムラインのままだった為、挙動が予想できるものになりました。

実は一度、この改造をMisskey本家にプルリクエストしたのですが。
「一度デフォルトハッシュタグに設定したサーバーから、デフォルトハッシュタグを無効に戻すことはない」という想定で、設定項目は設定ファイルに記述する形で実装しましたが、「画面(鯖缶が利用するコントロールパネル)からも設定できなければいけない」等のご指摘を受け、採用は一旦見送られています。
その為の作業時間を捻出することが、自分にはなかなか難しい状況で、お恥ずかしながらちょっと頓挫しちゃってます。

リレー

MastodonとMisskeyのそれぞれを改造するだけでは不十分で、実際には、互いのすべての投稿が連合タイムラインに含まれる必要があります。
つまり、構成する両サーバーを同じリレーに参加させる必要があります。

#precure_fun#delmulin の各サーバーでは当初、日本のFediコミュニティで最初期に登場したハッシュタグリレーを利用していました。 その後プライベートのリレーサービスも設けて、各サーバーから接続することにより、動作を安定させて現在に至っています。

プライベートリレーでは、めいめいさんのpub-relayフォークを更にフォークして使わせて頂いています。
Crystal言語が全くわからない自分が(シンタックス自体はRubyに近いのですけどね)、この先保守を続けていける自信がないのが悩みの種で、使い慣れたRubyベースのリレーを採用することも最近は考えています。いくつかある様ですね。

最後に

デフォルトハッシュタグを通じて、複数のサーバー(自分たちの場合はMastodonとMisskey)を連結することができます。「採用事例が増えれば面白いのだけどな」と思い立って、自分のアイデアを紹介させて頂きました。
詳細な構築手順にまではとても踏み込めませんでしたが、ご興味ある鯖缶の方からのご質問を頂けたら歓迎します。ご用の方は、私の本アカウントまで。2025年以降のFediを、一緒に盛り上げていきましょう。