Misskey & Webテクノロジー最前線

2024年のMisskey開発まとめ

本連載は分散型マイクロブログ用ソフトウェアMisskeyの開発に関する紹介と、関連するWeb技術について解説を行っています。

今年も残りわずかとなりました。Misskeyは2014年ごろから開発を始めたので、今年は10年目の開発ということになりました。今年も開発に対するご協力本当にありがとうございました。

今回は2024年にMisskey Projectが取り組んだことをまとめます。

今年の取り組み

スケーラビリティの強化

ロードマップにもありますが、Misskeyの利用者が増えていることもあり、Misskeyサーバーのスケーラビリティの向上は大きな目標のひとつです。

スケーラビリティに対する今年の取り組みは、Bunの検証やRBTの実装などがあります。

Bunに関しては期待した性能が確認できず、メモリ使用量も増加する結果となったため、Node.jsを続投することにしました。技術選定において、アピールポイントをそのまま受け止めるのではなく、実際の環境で検証することの重要性を改めて認識しました。

RBT(Reactions Boost Technology)に関しては大規模なサーバーで特に効果を発揮するものと思われますが、まだそういったサーバーでの適用事例が少なく、十分なデータは得られていません。

MisskeyではRBTに限らず、ベンチマークの仕組みが整っていないため、来年はベンチマークツールを開発してパフォーマンスの評価に活かす予定です#1370⁠。

テストの強化

Misskey開発の自動テストの拡充もロードマップにある通りで、より安定して開発を行えるようにすることを目標としています。

今年は自動でデプロイ可能なステージング環境「0key.dev」の構築や、連合の自動テストの実装が行われました。

0key.devはacid-chiken氏、連合のテストはzyoshoka氏が実装を行ってくださいました。

連合は仕様が複雑なため、自動テストによってリグレッションが未然に防げるようになりました。また、今まではローカルの開発環境で連合の動作確認を行うことはかなりの手間が必要でしたが、ステージング用Misskeyサーバーを使って実際の連合を含む動作確認を行えるようになり、リリース前のデバッグ作業が効率化しました。

来年も開発者体験の向上に取り組んでいきます。

セキュリティの強化

Misskeyはこれまでアンチスパム機能が不足していて、今年は特にスパムに悩まされたサーバーが多く発生しました。そのため喫緊の課題として、Misskeyのスパム対策を急ぎました。

具体的には、以下の実装を行いました。

  • 一定の期間運営者のアクティビティが確認されない場合にサーバーのユーザー登録を招待制にする機能#14746
    • 放置サーバーがスパムの踏み台になることを防ぐ効果があります。
  • 外部サービス(truemail, verifymail)を利用したメールアドレスの検証機能
    • 使い捨てのアドレスでアカウントが作成されることを防止するものになります。
  • ログイン時もCAPTCHAを求めるように#14655
    • 2要素認証が未設定の場合、アカウントが乗っ取られるリスクが高いため、CAPTCHAを必須にして機械的なログインを難しくしました。
  • ログイン時にメール通知を行うように#14673
    • 万が一アカウントに不正にログインが行われたとしても、すぐ気づけるようにしました。
  • アカウント作成時のクイズ機能(未リリース;#13313
    • あらかじめ設定したクイズに正解しないとアカウントを作成できなくするもので、スパム対策のほか、利用規約が読まれているか確認したり、コミュニティを特定のテーマ・言語圏に限定したい場合などに有用になります。
    • 現在実装が進んでいますが、単にテキストの設問だとWeb検索で簡単に答えが得られてしまいますし、画像にしても最近の画像認識AIで容易に回答が得られるので、ある程度複雑な映像化/音声化することも検討しています。

これらの改修でスパムに対する防御を高めることができたと思います。スパム対策については来年も引き続き取り組みます。

Misskeyに限らずWebサービスは「公開して終わり」ではなく、インターネット上に公開したからには相応のモデレーションが求められます。運営者側も、スパムの踏み台にならないためにも一層の努力が求められるフェーズになってきていると感じます。

プライバシー強化

今年は、昨今増加しているクローラーへの懸念が高まったこともあり、プライバシーに関する機能の強化にも取り組みました。

具体的には、以下の実装を行いました。

  • 自分のノートを表示するのにログインを必須にする機能#14799
    • クローラーからのコンテンツ収集を防ぐ効果があります。
  • 過去のノートを非公開化する機能#14814
    • 過去の投稿の削除は時間と手間がかかりますが、この機能を使うと瞬時に非公開にできます。
    • いわゆる「黒歴史」を簡易的に葬るのにも便利です。
  • 画像のウォーターマーク付与機能(未リリース;#12250
    • 昔から計画はされていたものの需要と優先度の兼ね合いで開発は保留されていました。ただ、機運の高まりを受けて鋭意実装が進んでいます。

その他

他にもnotableな改修としては以下があります。

来年取り組むこと

来年新たに取り組みたいことはいろいろありますが、大きなトピックとしては以下が挙げられます。

  • 脱TypeORM#7419
    • 積極的なメンテナンスが行われなくなってきたことなどが理由で、Prismaに移行する計画があります。
  • 脱CASCADE削除#10659
    • PostgreSQLのCASCADE削除は便利ですが、パフォーマンスコストが高いため、スケーラビリティ向上の一環として脱CASCADE削除を構想中です。
  • Vue Vaporに移行
    • 「Vue Vaporモード近況」で取り上げましたが、Vueでは脱仮想DOM実装が進んでいます。おそらく来年にはある程度動くものがでてくると思うので、Misskeyでも対応しクライアントの軽量化につなげたいと考えています。

数字で見る「Misskey 2024」

記事執筆時点で、2024年のMisskey開発に関するデータをまとめました。

  • コミット数: 1,364
  • 編集されたファイル: 2,441
  • ソースコード: 129,076行の追加、41,995行の削除
  • Issue: 1,163がオープン 917がクローズ(うち今年作成されたものは534)
  • Pull request: 1,105回
  • リリース: 10回
  • Star数: 8,636 -> 10,157

ついにGitHubのリポジトリStar数が1万を超えました🎉

参考情報https://github.com/misskey-dev/misskey/compare/a40ededf6bdcfd0fcdd0bcf27f7322a4383149a7...e8bf6285cb023bd2031e85de3a3eb495bf4afb2e

まとめ

今回は2024年のMisskey開発を総括しました。

今年はまじめな機能開発が多かったですが、10年前の遊び心を忘れずに、来年はMisskey麻雀、盆栽を育てる機能などの楽しい開発も行えたらいいなと思っています。

2025年もMisskey Projectをよろしくお願いします。良いお年を!

本連載は来年から不定期の連載となりますが、引き続きご愛読いただければ幸いです。

おすすめ記事

記事・ニュース一覧