目次
Fediverseインスタンスを建てた
2024年8月21日にFediverseインスタンス「いいがうラボ」を作成してから約1年と6か月が経過しました。報告と知見を残しておきます。
Akkomaインスタンスを立てた
実は、筆者は人生で2回ほどFediverse上のインスタンスを渡り歩いてきたことがあります。一つ目は2017年ごろの「ますとどんちほー」と、二つ目は「Misskey.art」です。一つ目は筆者がけものフレンズ関連のコンテンツを嗜んでいたころにお邪魔していたMastodonインスタンスです。2つ目は、絵画や手芸、工作、音楽などを楽しんでいる方向けのサーバーで、筆者の友人が管理人をしていたということ、そして自分自身も作曲をしていたことから参加したサーバーです。いずれも良いところで、思い出に残っています。前者はMastodonベースで、後者はMisskeyベースでした。
もちろんこういったサーバーにとどまることもできます。しかし、自分の興味関心はもう少し外れていて、より背伸びして投稿できるサーバーが必要でした。筆者は、技術分野への関心があり、かつ自分自身でインスタンスを稼働させることに興味もあったため、ぜひお一人様インスタンスを立てる決定をしました。
Fediverseについてはまた後日。
本記事は、筆者が望むFediverseインスタンスの要件を考えた上で、実際のAkkomaのセットアップ、およびその後の使用感について軽く述べたいと思います。
Fediverseインスタンスに求める要件
まず、Fediverseインスタンスを立てる前に要件を考えることは重要です。一度立てたインスタンスは無責任に潰すことはできません。まず、今回お一人様インスタンスを作成するにあたってあるとよいと考えていた性質は、メモリや計算資源は極力使わないこと、MisskeyやFedibirdなどのリアクションが使用できることでした。
エコであること
まず、メモリや計算資源は極力使わないことは重要です。インスタンスを一人で使う場合、わざわざ複数人が使うことを想定したソフトウェアアーキテクチャの上にたったユーザー数1人しか乗らないということになりますから、構造上コストパフォーマンスは悪くなりがちです。だからこそ、オーバーヘッドは少ない方が良いです。人数が増えるのに対してじわじわと計算リソースが増えるのに対して、そもそもインスタンスを最低限維持するのにもリソースが必要なわけです。どれだけ少ないリソースで維持できるか、ということは気になります。
リアクションが使用できること
また、2つ目に関しては、筆者がもともとリアクションを利用したいと考えていたことに由来します。Misskeyには「ノート」とよばれる投稿に対して、リアクションという絵文字を付加できる機能が存在します。ユーザーはその投稿を読んで、どのように感じたかをユーザーの好きな絵文字で反応することができます。この機能はActivityPubの標準仕様からは外れているため、 Mastodonにはリアクション機能がありません(※)。
※ただし、Fedibirdなどの独自拡張を施したインスタンスを除く

投稿に対しておやすみというスタンプ的ボタンがついている。
ポストLINE、Discord・Slackの筆者は、テキストメッセージ主体の投稿に対して画像やアニメーションGIFなどのグラフィカルなメディアを用いて反応ができることは、意思伝達の方法に多様化をもたらし、メッセージ送信および反応者のより効率的な意思伝達を促進すると考えています。そのため、この機能は私が求めているものでした。
Akkomaという選択
いろいろ吟味した結果、Pleromaと呼ばれるActivityPubを実装したソフトウェアのフォーク版であるAkkomaを利用することにしました。

リソース使用量に関して、本記事は定量的に提示できるデータを提示することを趣旨にするものではないため省略しますが、かなり軽快に動作すると思います。
リアクションに関しては、Akkomaでは、他のサーバーに対して可能な限りリアクションの互換性を担保してくれます。基本的にFedibird以外のMastodonインスタンスでは絵文字が利用できません。そこで、仮にMastodonインスタンスから投稿された投稿に対して絵文字を付けると、Mastodon側ではお気に入り登録として通知されるようです。
いったんソフトウェアが決まれば、実際にインスタンスを立ち上げるだけです。
Akkomaの設定いじり
さて、実際のAkkomaのセットアップについて大変親切なドキュメントが用意されているため、設定は簡単でした。やるべきことはほぼすべてドキュメントに書いてあります。
ただし、設定変更が落ち着くまでには比較的多くの歳月を費やしています。あまり体力がなく積極的にAkkomaのコードを読んでこなかったのと、運用が不慣れだった影響ですね・・・。
AIを味方にして実装を調べる
AkkomaはElixirという関数型の言語を用いて開発されています。筆者自身はこの言語の読み書きはあんまりできないので、恥ずかしながらAkkomaのコードベースも読まずに放置してました。しかし、エージェント系AIの進化もあり、支援を受けながら「この機能ってどこで実装してるんですかね?」的なノリでちまちまコードを読んだりすることができるようになりました。あとは実装を知ってActivityPubの仕様を知るとかもあった感じです。

とりあえずドキュメントを何回も見る
運用を続けていく中で、Akkomaのアップデートが何回かあったり、個人だからこそできる突発的なメンテナンス作業でドキュメントを何度も見返したりするうちに、ぼちぼち機能の理解が進んできたのも大きいです。
インスタンスを立ち上げてやったこと
そんな感じで、当該インスタンスをちょっとづつチューニングしていったというイメージが近いと思います。この節では、そんな経験からドキュメントには書いていないけどやったほうがいいなと思ったことを記述してみます。
リレーサーバーの設定
まず最初に、リレーサーバーを設定しました。ActivityPubは他のインスタンスとの連合を可能にしますが、インスタンスに自分一人しかおらず、しかもフォロー・フォロワー関係が少ない場合は未知のインスタンスとの出会いはなかなかありません。リレーサービスはインスタンス間の中間に介在し、1:N(※)状にインスタンスの投稿を配信してくれるようなサービスです。これにより、タイムラインがにぎやかになります。
※N=リレーを登録しているFediverseインスタンスの数
- YUKIMOCHI Toot Relay Service
- 国内ではとても有名なリレーサービスです。ありがたく使わせていただいています。
- 炒めて切った野菜ジュース Activity Relay Service
- おともだちのcedさんが運営しているリレーサービスです。
MRFの設定
Akkoma含むPleromaにはMRF(Message Rewrite Facility) という機能があります。この機能は、インスタンス管理者がインスタンス内に流れてきたメッセージを書き換えたり、破棄したりすることを可能にする一連のフックとして実装されています。この機能を利用すると、特定ワードを含む投稿を検閲したり、スパムに対してフィルターをかけたりすることができます。デフォルトで実装されているMRFポリシーを利用するほか、Elixir言語を用いて任意のポリシーも記述できるようになっています。
そこで、MRF.SimplePolicyというMRFポリシーを設定しました。MRF.SimplePolicyは特定インスタンスからの投稿をreject(拒否)したり、添付メディアに強制的にCW(※)を設定したりできます。
※CW(Content Warning)投稿主が内容から投稿文や投稿メディアを自主規制して、マスクできる機能。
なぜやるのか?
リレーサービスを通じて流れてくる投稿は決して特別扱いされることはなく、ローカルタイムラインに投稿した内容と同様に扱われます。投稿にハッシュタグがあればそのページが自動的に有効になるし、投稿主のCWの有無もそのまま反映されます。これらが善良な投稿であればよいのですが、全部が全部そうではないです。たまに過激な思想を含む投稿や、露骨な画像も流れてくるので、適切に処理する必要があります。
自分のインスタンスの場合は、Googleなどで「site:akkoma.yokkin.com」などで画像検索をかけるとどえらいことになっていたので慌てて設定しました。やることとしては以下の3つですが地道にやっていきましょう。
- まずは設定ファイルを設定
- 過去のDBを検索して
- Googleにインデックスされている場合はSearch Consoleなどから削除を実施

MediaProxyを設定しておく
MediaProxyを設定して、ほかのサーバーの画像や動画を取得する際に自分のサーバーを経由して再度配信するようにしました。設定しないとブラウザから直接相手のサーバーのリソースを取得しに行きますが、中にはAkkomaが自らかけているCSPヘッダーや、CORSの制限でうまく取得できないものもあります。
正直設定せずとも実用には耐えるのですが、開発者コンソールを開くと大量のエラーログが出力されています。これが精神衛生上よくなかったので、ちゃんと設定しました。
他のMisskeyインスタンスの投稿を全部流す
特定Misskeyインスタンスでパブリックの投稿をすべて自分のインスタンスに流すようにしました。私にはお気に入りのMisskeyインスタンスがあります。普段、フォローはしていないけれどお世話になっている人に、自分のサーバーからリアクションできたり、会話に参加できずともインスタンスの雰囲気がわかれば面白いです。そこで、YUKIMOCHIさんのActivityPubのリレー実装を改変して、特定Misskeyインスタンスの投稿をWebsocketでリッスンして自分のインスタンスのinboxに向けて流しまくるようにしました。
https://github.com/froggie3/Activity-Relay/tree/feature/implement-misskey-listener
終わりに
ここまでAkkomaを選定した理由と、インスタンスを運用する中で実際に実施するべき事柄などについて触れてきました。結果的には本当に作ってよかったと思ってます。
- Xのタイムラインで投稿がリアルタイムで流れていく若き頃の体験を追体験できて懐かしい。リレーで流れてくる投稿をボーっと眺めているだけで幸せになれる。
- 同一世界における他の存在との「協調」というインターネット特有の考え方が、ActivityPubにもフラクタルな構造として具現化されており、それは自分のメンタルモデルと一致している。
- この理由から、中央集権的なソーシャルメディアのサイト内だけで投稿が伸びるということが少なく(少なくとも各インスタンス単位に分散される)、ヒエラルキーが顕在化しにくいのが良い。
コメント
コメントはありません。