この記事は Fediverse (2) Advent Calendar 2024 8日目の記事です。

こんにちは。もりかぷと申します。
初めましての方は初めまして、既にご存じの方はお世話になっております。

今回はタイトルにある通り、独自機能の話をできたらと思います。
(本ページで紹介するのは独自で実装した部分が中心となります。他サーバー様から取り込んだ機能は省略致します。)

スーパーざっくり自己紹介

簡単に自己紹介させてください。
Otaku Social、という適当に考えたブランド名を付けてMastodonやMisskey、BlueskyのPDS、リレーサーバーなどを運営しています。

Otaku Social
Otaku Socialポータルサイトです。MastodonやMisskeyを用いたサーバーを運営しています。

好きな食べ物はハンバーガーやラーメン、寿司です。

本題

本題です。既にサーバーを建てている方はご存じのように、MastodonやMisskeyはライセンスの下でソースコードが公開されており、誰でもサーバーを建てたり、ライセンスの範囲内で独自機能を入れたり、カスタマイズをすることができます。

それでは早速書いていきます。

(画像などはクリック/タッチで拡大できます。じっくり見たい方はご利用ください。)

Maniakey / Maniakey Homes

投稿した画像などを一気見できるように

これを導入した経緯として、個人的に好きなイラストなどを描かれている方をフォローしており、ファイル付きノートを辿っていくのも良いのですが、ある程度一気見したいな~と思いギャラリー方式で見れる「メディア」タブを追加してみました。

既存のAPIを利用してデータを取得しているので、公開範囲に応じて表示されるようになっています。

クリップでサムネイルを表示できるように

これは自分用...というよりは「シリーズものをまとめた時に、どんな画像があるのかを確認できると嬉しいのかな~」位の気持ちで作りました。

特定ジャンルのイラストやシリーズものの漫画をまとめたりするときに、画像があるとより見やすいのではないかなと思い作りました。

プロフィールページのタブを整理

これはスマホでMisskeyをしている時に、ちょっとタブが多いかな?と個人的に感じたので整理してみました。

良く使うものは常時表示で、アクティビティやリスト、ページなどは「もっと!」というタブを新設しまとめています。

なお、リモートユーザ(他のサーバーのユーザ)で連合しない機能は非表示にすることでタブを更にスッキリさせてみたりしています。

リモートユーザ表示時のタブ

公開タイムラインを非表示にできるように

Web版のみではありますが、ある程度タイムラインが整備出来てきた・フォローしているユーザを中心に投稿を見たい、という方向けにローカルタイムライン、ソーシャルタイムライン、グローバルタイムラインを非表示にできるようにしてみました。

一応Maniakey Homesというルートポリシーでローカルタイムラインを無効化しているサーバーもありますが、Maniakeyは自身で選択できるようになっています。

これにより様々な用途や目的に合ったご利用ができるかと勝手に思っています。

アクセストークンの発行をロールで制御できるように

これはどちらかといえば運用側の理由で作りました。
アクセストークンの発行をロールで制御できるようにすることにより、過度なBotアカウントの作成を防ぐことができるのではないかと思い実装しました。

ただ、アクセストークンの発行を無効にするとプラグインのインストールやサードパーティークライアントが初期では利用できなくなるので、バランスが難しいところです。

[PC版] チャンネル一覧の表示を複数列で表示できるように

チャンネルの作成はある程度自由にできるようにしていて、色々な方がチャンネルの作成・会話をしています。

ただ、チャンネルがたくさんあった時、全てのチャンネルを見るのは結構なスクロールが必要となります。

そこで画面のサイズに応じて最大3列に表示することにより、一度にたくさんのチャンネルを見つけることができるようになっています。

ドライブの空き容量をさりげなく表示するように

凄く軽微なものですが、ドライブの割り当て容量と空き容量をドライブページに配置してみました。(ちなみにクリックすると設定ページに移動し、詳細情報を確認できます。)

これはPCを触っていて、Windowsなどを見ると以下のように空き容量がパッとわかるようになっています。

こんな感じで、普段見ている画面にさりげなく表示できるようになると個人的に良いな~という完全な自己満足で実装してみました。

絵文字のインポート時にショートコードが重複した場合はスキップして通知する用に

これも運用側の観点で実装したものになります。

現時点では絵文字の申請があった時に

  1. 申請受領
  2. ライセンス、ガイドライン審査
  3. ファイルを特定のフォルダに入れて、メタデータ作成ツールを実行
  4. フォルダ圧縮
  5. 絵文字の一括インポート

という手順を行っています。
ただ、多くの方から様々な絵文字を申請頂くため、ショートコードが重複していた時に既存の絵文字が上書きされるという事象が発生しました。

(コードを見る限り、絵文字の一括インポート時にショートコードが重複した場合、既存の絵文字を削除して新規登録する仕組みでした)

絵文字の数も結構多いため、毎度重複チェックを手動でやるには結構な時間がかかってしまうことから、サーバー側に重複チェック、重複時はスキップして通知する仕組みをいれることによって、既存の絵文字が消える事故を防止するようにしました。

Otadon

リモートユーザの場合、プロフィールから元のページを開きやすくしてみた

リモートユーザの場合、自サーバー上では必ずしも正しいデータ(フォロー数・フォロワー数など)があるわけではありません。

そのため、元のサーバーのページを見に行くケースがあるのですが、Mastodonの場合、... ボタンから「元のページを開く」という操作をする必要があり、2ステップとなります。

普段はMisskeyを良く使っているのですが、Misskeyだと以下のような表示があり、元サーバーのページを直ぐに開くことができます。

この仕組みをMastodonにも欲しいな~と思い実装してみました。

フォローされていることを分かりやすく表示

Mastodon 4.3系(?)からフォローされているか確認方法として、フォローボタンの内容を確認する必要があり、個人的に少しわかりにくい仕様となっていました。

(フォローされている場合は「フォローバック」または「相互フォロー中」という表示になる)

あまりフォロー状況とかは気にしないのですが、パッと見て分かりやすくなるようにユーザ名の下に「フォローされています」という表示を付けてみました。

公開タイムライン(リアルタイムフィード)の表示ON/OFFを設定できるように

これはManiakey / Maniakey Homesと同様です。
それぞれの使い方に合わせたカスタマイズができるようになっています。

Otadon Hashtag Cloud

Otadon Federated Hashtag Cloud
Web site created using create-react-app

これはあったら面白いよね、というアイデアで知人に開発いただいたサービスです。

Otadon上の公開タイムラインに流れてくる投稿についているハッシュタグを集計してワードクラウドを生成します。

(公開タイムラインを対象としているため、未収載/控えめな公開、フォロワーのみ、ダイレクト投稿は対象外です。Mastodon APIを経由して取得できる公開タイムラインの情報のみとなります。)

これはMastodonのトレンドタグの拡張版が欲しい!、話題作りにもしかしたら役に立てるかも?というアイデアから生まれたものです。

終わりに

簡単にではございますが、独自機能の紹介でした。
オープンソースなのでライセンスの範囲内であれば、自身の好きなようにカスタマイズをすることができ、色々と楽しむことができるのではないかと思います。

ただ、カスタマイズをした場合、バージョンアップなどでカスタマイズ元との仕様などに差分が発生するため、コードと少しにらめっこする必要があります。

今回は自身が運営しているサーバーの機能紹介でしたが、他サーバーも独自で実装している機能などがありご自身の使い方に合わせてサーバーを選択することができます。

もちろん、各サーバー同士で繋がったり、アカウント毎にテーマを変える運用ができるので是非色々なサーバーを見ると面白いのではないかなと思います。

以上、もりかぷでした!
お読みいただきありがとうございました!

運営しているサーバーに入れた独自機能の話