Misskey Advent Calendar 2022の19日目の記事

Misskeyのフォーク🍴の話

 この記事はMisskey Advent Calendar 2022の19日目の記事となります。
 昨年に引き続き執筆できることに感謝しつつ今年も稚拙ながら書いていくものとしましょう。
 私は大学生で専攻は経済学です。ゼミナールは憲法学を専攻しており卒業論文の期日が間近に迫っているので焦りを感じております。今の大学は今年度で卒業し、来年度からは情報学を専攻する大学生となります。
 基本的にはSNS一般に興味があってTwitter、Yay!などいろいろ生息しておりますが、ここ2年ほどはActivityPubの世界にもお邪魔させていただいております。主にMastodonというAPではデファクトスタンダードとなりつつあるソフトウェアの開発と運用をメインに行なっております。
 Misskeyは、にするさんに誘われて始めましたが、なんかおもしろそうだしめいめいと一緒にフォーク開発してみるかと思って現在めいすきーとMisskey v11とGroundpolisフォークの開発をしています。ぼくはMastodonばかりでMisskey全然使わないので自分にとってはほとんど遊びなんですが、利用してくれる人がいるのでとてもありがたいです。別の機会に触れますが、Misskey v12のホスティングも行なっています。
 昨年はMisskeyの運用について紹介しましたが、今回はソフトウェア開発について雑感を述べます。

このサイトについて

 毎度のご紹介ではありますが、ご存知でおられない方もいるかもしれませんので簡単にこのサイトの紹介をさせていただきます。ここのサイトはPlumeというActivityPub互換のソフトウェアを使用したブログインスタンスとなっております。これ自体もただのブログサイトじゃなくてインスタンスなんですね。そのため一番下のブースト・いいねボタンを押すことでMastodonとかに投稿を共有することができます。Misskeyだとめちゃ長い長文として共有されるようですね。意外と受け手の実装によって見え方が変わるぽくてびっくりしてます。

Misskeyのフォーク🍴概論

 さて本題に入りますが、現状Misskeyのフォークって結構多いです。
 めいめいさんが紹介してくれているんですが、Latest Release付近を除いてもこのくらいはあります。
 Latest Release付近だとCalckeyってのがおもしろそうなフォークですね。うちもCalckeyのいくつかリファレンス実装させていただきました。
 私が今開発に参加してるのが

となります。
結構数多いんですがそれぞれ結構開発に特徴があるんで一つずつ見ていくこととします。

Meisskey めいすき💞

 めいすきーはMisskey v10ベースでめいめいがかなり魔改造を行なっているものです。何が改造されてるかっていうとめちゃくちゃあるのですが、こちらにほんの一部が紹介されております。百聞は一見に如かずなので使ってみるといいのだわ。
 私のフォークは書き出せる程度の変更しかないので書き出してみました。(なんと手書き、すみません、、) めいすきーからのDiff  いくつかはめいめいによってめいすきー本家にマージされておりますが、大体こんな感じ。12月分は反映されてないけど、

  • プロフィールに性別追加(連合なし)
  • Syslog
  • プロフィールにリモートユーザーの情報更新するボタン
  • タイムラインプレビューを無効化する設定
  • 見つけるを無効化する設定

くらいかなと思います。
 ExploreボタンとかはMisskeyのトップ画面見ただけだとなんだかよくわからんってのがあるので、誰がいるのか見るように誘導ができて便利、Calckeyからのリファレンス実装
 アカウント削除の無効化に関してはMisskeyのアカウント削除処理が異常に重いっていう問題があったので、管理者側で削除のタイミングを調整する用途です、Mastodonからのリファレンス実装
 ユーザーのバッジ表示改良は、ノートにAdminとか書いてあるのは、投稿一つ一つに管理者として権威を持っているようでイマイチだったので、プロフィールに移動した、Areionskeyからのリファレンス実装
Botとか公式アカウントはノートとプロフィール両方に表示しておいていいかと思うので表示
これらがめいめいにマージされたあとCatもアイコン表示するようになってますね
 ブロックの仕様についてはGNU SocialとかPleromaとか他のAP実装を鑑みて、フォローフォロワー解除だけ送って以降のアクティビティ全無視という仕様が安全そうだったので変更、ブロックが届かないとかブロックが通知されるというかなりイマイチな実装があるので
 タイムラインプレビューと見つけるを無効にする機能についてはローカルのコミュニティを重視する場合において、どうやってもLTLとかを隠せないのはプライバシー的にどうなのかしら、ということで実装、単純に認証を追加しただけなのでログインユーザーは引き続き使える、Mastodonからのリファレンス実装
 めいすきーについてはこんな感じのちょっとした改良です。

Areionskeyの開発用フォーク

 Areionskeyは桜ヶ丘電信っていうみねむがやってる組織で開発してるものです。ここのコラボレータとして開発を担当してます。Misskey-v11ベースのmei-v11のフォークですね。
 私は主にめいすきーと現行のMisskey v12からのバックポートと機能UI改良を行なってます。
  こちらも改造点数が多くて紙に書き出したりもしてないんですが、いくつか紹介します。

  • リモートからは承認制
  • プレミアムユーザー
  • 公式アカウント
  • 検索インデックス拒否
  • 連合無効化
  • PostgreSQLで全文検索
  • パスワードリマインダ
  • トレンド無効化

 リモートから承認制はめいすきーのリファレンス実装で、多分ローカルだけで使いたい人向け
 プレミアムユーザーはGroundpolisから持ってきたので、これは桜ヶ丘電信のパトロンの人とかに付与する予定
 公式アカウントはv10のリファレンス実装、運営メンバーに付与する、umaMilkeyなので馬のアイコンになってる
areionskeyバッチ  検索インデックス拒否は、めいすきーとv12のリファレンス実装、やっぱり隠したい情報ってあるよね
 連合無効化はめいすきーのリファレンス実装、連合しないでMisskey使うのって結構便利だと思うんです
 PostgreSQLで全文検索はElasticSearchを入れなくても使えるのでより低スペックなマシンでも使えるようになってる、v12からのリファレンス
 パスワードリマインダはめいすきーとv12のリファレンス、パスワードリセットできないと割と詰むよね
 トレンド無効化はMastodonのリファレンス、MongoDBの時はトレンドの精度が高かったんだけど、PostgreSQLになってからどうやってトレンド取ればいいのかわからず結構ひどい結果になっていることが多いから、管理側で切れるようにしてる

Groundpolis-Milkeyの開発用フォーク

 Milkeyは桜ヶ丘電信っていうみねむがやってる組織で開発してるものです。ここのコラボレータとして開発を担当してます。Misskey v12ベースのGroundpolis v4のフォークですね。
 こっちは基本的に本家追従で行こうかなと思ってのんびりしていたんですが、Groundpolisがちょっと前にサポート終了を発表したので、うちで継続していこうということに。Misskey v12からバックポートと、いくつか改良を加えているのが私というわけです。
 こいつも改造点数多いので書き出しませんが、

  • 連合切れるように
  • 絵文字の提案と通報の受信で管理者にメール飛ばす
  • サーバー情報隠せるように
  • パスワードリセット
  • 月齢と日の出入りウィジェット
  • 確認ダイアログの表示を任意に
  • リモートフォローの承認制オプション
  • アナウンスの日時表示

あたりです。

 絵文字の提案の際にメール通知に関しては、現状絵文字提案受けても、管理画面がぴこぴこひかるとかないので気づかないことが多いことから、新規追加のみメール通知にして一旦解決
 月齢と日の出入りウィジェットは、マロヌがフォークで実装していたものをめいめいのアドバイスをもとにちょっと改良して、緯度経度高度を設定することで、日の出日の入り市民簿明の時刻がわかります。個人的には役立つのですが極地の問題と算出精度の問題から、評判はまちまちで、まだMilkeyにはマージしてません。
milkey太陽と月  確認ダイアログの任意にするのは、操作性向上と安全のための機能としていいかなと思い、Groundpolisで実装途中になっていたものを改良して実装しました。
Milkey確認オプション  アナウンスの日時表示は、いつのお知らせかわからない問題があったので、投稿の時刻表示のやつ借りてきて実装しました。Mastodonなんかだとありそうですが、うちとFedibirdしかないです。意外と重視されてないのね。
Milkeyアナウンス  Milkeyに関してもこんなところです。今はコラボレータが自分しか動かしてないので、ちょっと困ってますが、コントリビューション大歓迎です。
 これからもお願いします。
 あつが体験版として提供してるのがこれ(demo.shc.kanagawa.jp)なのでまあ使ってみてフィードバックしてくれるのも歓迎です。

Metaskey

 Metaskeyは桜ヶ丘電信っていうみねむがやってる組織で開発してるものです。
 基本的にMisskey v12ベースなので本家追従しようと思って放置してたらいつの間にかかなり置いていかれました。
 マジで全然いじってないんですが、一応変えたのが

  • モデレータがブロックされてもノート見れる
  • ブロックされてるならフォローボタン非表示
  • モデレーションとして全てのファイル削除する機能

 ここに関しては、v12でissue上がってたんですが、モデレータをブロックできなくする機能を実装して失敗してましたねw ここはちょっと考え方を変えて、モデレータのブロックはできるんだけど、ノートを見れるように、かつブロックの意思表示は反映されるようにします。
 generateblockqueryみたいなのでノートをドロップしてるので、これにモデレータかの判定を追加
 でもブロックされてることを消極的に知る手段がノートが見れるかどうかしかないから、フォローボタンを消し飛ばすように
 これで解決っす
 あまりMetaskey進めてないんですが、一応なんらかのフォークとして独自性を出していきたいと心得ています。みねむさんにお願いしているところ。

Groundpolis-v2

 Groundpolis v4のフォークであるMilkeyのフォークを管理してるので、これ以上増やすのもなあと思いましたが、現状Groundpolis v2で動くインスタンスってないらしくて、ちょっと寂しいので体験版みたいな感じで提供することにしました。
 おそらくこれ以降メンテすることはないんですが最低限動くように

  • ElasticSearchなしで検索できるように
  • 連合を無効化できるように
  • arm64 Dockerで動くように

という改良を加えました。
 最新のMisskeyってのもとても便利なんですが、たまーに昔に戻りたい時ありますよね。
 体験版として提供してるのがこれ(demo-v2.shc.kanagawa.jp)なのでぜひ使ってみてください。

最後に

 今回はMisskeyのフォークの話でかなりボリューミー な感じとなってしまいました。私はMastodonの開発者ですが、これからもたまにMisskeyの開発をぼちぼち進めていきたいと思います。来年度からは本業の方の所属が変わるのでどうなるかは分かりませんが、がんばっていきます。