noellabo's tech blog

@noellaboの技術ブログ

Mastodonの開発活動について

この投稿は、Fediverse Advent Calendar 2020の25日目の記事です。

(あれ、のえるさん、今は26日の夜で、そろそろ27日になりそうじゃないですか? おかしいですね?)


普段は利用者として、あるいは運営者として関わっているMastodonですが、もう一つ、開発者としての関わりを持っています。本記事は、私のMastodonの開発についてのお話です。

Mastodonの魅力

2017年4月、Twitterで見たいくつかの投稿とネットメディアの記事で、mstdn.jpが設置されて盛り上がっているという情報をみかけて大慌てで登録しました。あの日から、ずーっとMastodonを追いかけています。

Mastodonに魅力を感じたのは、

  • Twitterのようなサービスを自分で設置できる
  • ソースコードが公開されていて自由に改造できる
  • 採用技術が新しめ
  • 開発が活発で発展の途上にある
  • サーバ同士が相互接続する仕組みがあって、最初から世界を対象に機能する
  • 利用者が急激に増えていて注目を集めている

などがありました。

利用者急増などの動向は年月が経過して変化していますが、すでにやりがいのある規模に成長しています。それ以外の魅力は今もまったく変わっていませんね。

こんな面白い話は無いぞ、と思って始めましたが、いまでも、こんな面白い話はないぞ、と思っています。

Mastodonの開発はすごく楽しい

Mastodonは非常に実践的なアプリケーションで、設置した初日から大量のアクセスを捌き、Fediverseのノードとしての役割を引き受ける、とても面白いプログラムです。日々、安定動作の維持に気を配りながら、問題のある部分をみつけて改善していくことが必要です。これが、技術者として凄く面白いわけです。

また、たくさんの利用者がヘビーに利用しています。ユーザー体験の向上や、不具合の改善、新機能の提案などは、そのたくさんの人達に直接影響します。自分自身もそのヘビーな利用者の一人です。こんなにやりがいのあることってなかなかないと思いませんか?

そして、Fediverse。中央集権的ではない仕組みを作ろうぜ! という取り組みが面白いし、実際に様々なサービスがつながって機能しているのを見るのは最高にエキサイティングです。いまはまだまだ発展途上で、実験的な取り組みとして地味にやっていますが、本格的に脚光を浴びたら要求が桁違いになります。そのとき、ちゃんと機能する仕組みとして整備できるのか。Mastodonが果たす役割、後進のプロジェクトに引き継ぐものは何か。考えることが無限にあるように思います。

そんなわけで、Mastodonに関わる開発が面白くて仕方が無いわけです。

Fedibirdという活動

Mastodonは、自分達のポリシーを大切にし、とても慎重に機能の取捨選択をしながら開発されています。これが強い信頼感に繋がっていて、快適な空間を提供することに大きく貢献しています。

しかしその中で、採用しなかったり、この先に試される機会がなさそうな、様々な可能性が捨てられています。他のFediverse対応のプロダクトがいずれ実現するかもしれませんが、それならMastodonで実現してみたって良いはずです。想定していなかったものの中に新しい発見があれば、もっとMastodonが良くなるかもしれません。あるいは、採用されることはなくても、そういうバリエーションがあっても良いはずです。

そういったMastodonやFediverseの可能性をもっと追求するための私的なプロジェクトとして、FedibirdというMastodonフォークを作り、実際に利用者を抱えるfedibird.comとnightly.fedibird.comを運営し、様々な提案と実験、サービスとしての実践を行っています。

フォローに頼らずに様々な情報取得を可能とする購読系の機能や、UIの機能追加、そしてLTLを無くす実験など、これまでいくつかの提案を行ってきました。ある程度は利用者がいないと実験にならないので登録者が1,000人を越えてくれたのは大変ありがたいのですが、それ以上に、そういった提案がFediverseで知られることとなり、Mastodonのバリエーションとしてどっちもありなんだということが認知され、あるいはQOTOのように機能を採用した別のサーバが産まれ、Fediverseの可能性が広がることが望みです。

このFedibirdを通じた活動は本当に楽しくって、取り組んでいる中で一番やりがいのあるプロジェクトです。

Mastodonの情報を伝える活動

サーバを維持管理している管理者と、一般の利用者に向けて、Mastodonの変更点と解説をこまめに投稿するようにしています。また、Mastodonの仕様に関する疑問などを見つけたら可能な限り情報提供しています。

Mastodonの開発者たちは基本的に英語でコミュニケーションしているので、日本のFediverseにはなかなか情報が流れてこないですよね。流れてきても読めないんですが :-)

初期の頃は、リリースノートの翻訳をしてくれる人がいたりして、本当に助かりました。あの頃の恩返しをしたいという思いもあります。

伝えていく中で、いろいろとわかることがあります。こちらで思っているより伝わっていないこともありますし、利用者の期待するものに応えられてなかったり、見落としていたことに気付くこともあります。これが非常に重要なフィードバックとなっています。

私の主要なコミット

これまでMastodonにプルリクエスト(変更の提案)して採用されてきたものから、軽微なバグ修正を除いた主要な成果をご紹介します。

tootctl accounts reset-relationships の追加

管理者が、特定アカウントのフォロワーやフォロイーをリセット(消去)するためのコマンドです。

github.com

公開ユーザーページに、特定ハッシュタグ付き投稿のRSSを追加

注目のハッシュタグを機能させるために追加したものですが、実はどんなハッシュタグのフィードでも取得できます。あまり知られていないと思いますが、かなり有用な機能です。

github.com

スマートフォンで管理ダッシュボードを見た時の表示を整える

ロージー先生がお気持ち放送で不便だと訴えていたので、ちゃっちゃと直したやつ

github.com

グループ機能のための基本的な仕込み

グループのアカウントにバッジ表示したり、参加しているグループからブーストされた時にいちいちブースト通知しないようにするなど、将来役立てるための機能を事前に仕込んだりしました。最近役に立っています。

github.com

ハッシュタグタイムラインをローカル限定にするオプション追加

自己紹介タグなどで、自分のサーバだけに限定したいという要望に応えるための機能

github.com

連合にリモート投稿だけを表示するオプション追加

ローカルを別に見ている場合、リモート投稿だけが見られると便利ということで追加した

github.com

シェア画面で公開範囲をURLから指定できるパラメータ追加

外部連携などで、投稿画面だけを表示する場合に、デフォルトの公開範囲より絞り込めるパラメータを追加しました。例えばnotestockなどで投稿を認証に使う場合はダイレクトにしちゃえば邪魔にならないというわけです。でも、見えていた方がnotestockの宣伝になるから、見えててもいいとかいう話がありましたw

github.com

RSSの取得件数をデフォルトの20件から200件まで拡大できるようにパラメータ追加

定期取得するガチのフィードリーダーなら20件でいいんですが、もっと取得間隔が開いている半自動・手動での取得の場合20件ではぜんぜん足りないので、指定で拡大できるようにしました。

github.com

フォローインポート時の効率改善

フォローインポートの負荷が重く、気軽に実行できないという問題が出ていたので、できるだけ負荷が軽くなるように色々工夫したものです。自分で運営するサーバでも、実際に大量フォローインポートが必要なユーザーを迎えるにあたって大いに役に立ちました。

github.com

タイムラインの各投稿の公開範囲を表すアイコンを追加

github.com

指定アカウントの投稿画像を強制的に閲覧注意にする機能(モデレーション)

閲覧注意に指定すべき画像を指定せず投稿するユーザーに、アカウント停止措置ではなく、閲覧注意を強制するモデレーションを可能にするための機能です。

github.com

フォロー・フォロワーの画面で、選択したユーザーを一括フォローするボタンを追加

フォローバックし忘れているユーザーをまとめてフォローできるのが大変便利です。

github.com

フォロー・フォロワーの画面で、フォローの相互関係を表すアイコンを追加

一目で関係がわかるので大変便利です。

github.com

スケジュール実行が複数のsidekiqプロセス全部でエントリーされる不具合を解消

特定のsidekiqプロセスにschedulerキューを担当させることで、他のsidekiqプロセスでスケジュール実行を行わないように変更し、解決しました。結構広い範囲のバージョンで起きていた不具合です。

github.com

Mastodonのコラボレーターになりました

こうしてちまちまとプルリクエストする活動をしていたところ、2020年9月11日にEugenさんから招待をいただき、Mastodonのメインリポジトリであるtootsuite/mastodonのcollaboratorになりました。コア開発者の末席においていただいたというぐらいの意味合いです。

これまでに、78のプルリクエスト(変更の提案)を採用していただきました。ちょっとしたバグ修正がほとんどです。全体ではこのあたりの位置にいます。ご覧のように、まだまだひよっこです。 Contributors to tootsuite/mastodon · GitHub

とはいえ、issueやプルリクエストに目を通してレビューする立場になりました。直接意見を聞かれることもあります。甘えてもいられません。

今後について

もっと腕を磨き、よりコアな機能の改善に貢献していきたいなという思いがあります。

フルタイムで関われるわけではないので、欲張っても足を引っぱってしまいますが、Fedibirdで色々試しながら、よさそうなものは本家にも反映して、という流れをもっと頑張りたいですね。