2023/10 時点の Fediverse の状況

Posted on 日 29 10月 2023 in サービス

Fediverse は、W3C 勧告の ActivityPub を主要なプロトコルとした、リソース共有を相互に行う Web 上の分散ネットワークである。昨今の騒動で分散 SNS としてそれなりの人口を抱えており、僕は今年の2月ぐらい移住していて、かれこれ8ヶ月になる。

さて、Fediverse はオープン規格で構成されているため、基本的なデータは割と簡単に手に入れることができる。今回は、そのデータをちょっと整理して、現状の Fediverse の状況を見てみようと思う。

インスタンスごとの情報をとる

Fediverse 上で情報集める方法は幾つかあるが、ネットワーク内のノード、つまりサーバ単位で情報を集めるには以下が使える:

nodeinfo: https://nodeinfo.diaspora.software/
Fediverse でサーバの実行状態を公開する標準的な方法を目指した規格。JLD の拡張で、 /.well-known/nodeinfo というエンドポイントに JSON リソースリンクを公開し、そのリンク先に定められた形式でメトリクスを出すという形。ソフトウェア情報、登録機能が解放されているか、ユーザ数、投稿数などが取れる。
manifest.json: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json
PWA に対応しているサーバでは、それ用のマニフェストファイルに色々特定の形式で情報を載せている。ここから、サーバ名や説明などが取れる。
Mastodon Instance API: https://docs.joinmastodon.org/methods/instance/
Fediverse では Mastodon API が割と事実上の標準となっているところがあり、Mastodon API と互換のある形式で API 公開してるところも多い。そういうところなら、対応していれば Mastodon Instance API で nodeinfo 以上の情報が取れる。具体的には、 nodeinfo で取れる情報に加えて、対応言語、連絡先、サーバ名、サーバのルール、連合先ホストなど。
OGP (Open Graph Protocol): https://ogp.me/
Web で事実上の標準となっている、Web ページのメタ情報の規格。サーバ名や説明などが取れる。

他にもソフトウェア固有のものがいくつかあるが、全般的に取れるのはこんぐらいだろう。今回はこのうち、 nodeinfo と Mastodon Instance API の連合先ホスト一覧をとる機能のみを使っていく。具体的に見ていこう。

まず、 nodeinfo だが、これは /.well-known/nodeinfo から以下のような JSON を取ってくる:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "links": [
        {
            "rel": "http://nodeinfo.diaspora.software/ns/schema/2.1",
            "href": "https://ff.mizunashi.work/nodeinfo/2.1"
        },
        {
            "rel": "http://nodeinfo.diaspora.software/ns/schema/2.0",
            "href": "https://ff.mizunashi.work/nodeinfo/2.0"
        }
    ]
}

/.well-known/nodeinfo には links フィールドに nodeinfo リソース URL の配列を公開することになっている。配列の要素は rel 要素にスキーマ、 href 要素にリソース URL を書く。 nodeinfo は現在 1.0、1.1、2.0、2.1 が出ており、1.x と 2.x は一部フィールドは互換がないが、基本的にはフィールド追加が主になる。なお、リソース URL は /nodeinfo/<version> みたいな形式になってるソフトは多いが、基本どういう URL であっても良い。 /nodeinfo/<version>.json みたいな URL で公開してるとこも多い。

nodeinfo リソースの内容は、 http://nodeinfo.diaspora.software/ns/schema/2.1 を見てもらうのがいいかもしれないが、一応見ておくと、以下のような情報が取れる:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{
    "version": "2.1",
    "software": {
        "name": "firefish",
        "version": "1.0.4-beta31",
        "repository": "https://codeberg.org/firefish/firefish",
        "homepage": "https://joinfirefish.org/"
    },
    "protocols": [
        "activitypub"
    ],
    "services": {
        "inbound": [],
        "outbound": [
            "atom1.0",
            "rss2.0"
        ]
    },
    "openRegistrations": false,
    "usage": {
        "users": {
            "total": 3,
            "activeHalfyear": 1,
            "activeMonth": 1
        },
        "localPosts": 436,
        "localComments": 0
    },
    "metadata": {
        "nodeName": "Mizunashi Social",
        "nodeDescription": "Mizunashi Mana のおひとり様サーバです。日本国法を遵守して、運用していく所存です。",
        "maintainer": {
            "name": "Mizunashi Mana",
            "email": "contact@mizunashi.work"
        },
        "langs": [],
        "tosUrl": null,
        "repositoryUrl": "https://codeberg.org/firefish/firefish",
        "feedbackUrl": "https://codeberg.org/firefish/firefish/issues",
        "disableRegistration": true,
        "disableLocalTimeline": false,
        "disableRecommendedTimeline": true,
        "disableGlobalTimeline": false,
        "emailRequiredForSignup": false,
        "searchFilters": false,
        "postEditing": true,
        "postImports": true,
        "enableHcaptcha": false,
        "enableRecaptcha": true,
        "maxNoteTextLength": 3000,
        "maxCaptionTextLength": 1500,
        "enableTwitterIntegration": false,
        "enableGithubIntegration": false,
        "enableDiscordIntegration": false,
        "enableEmail": true,
        "enableServiceWorker": false,
        "proxyAccountName": null,
        "themeColor": "#31748f"
    }
}

これは僕の Firefish というソフトウェアの鯖での実際の値なのだが、ソフトウェア情報とか、アカウント登録解放してるかとか、ユーザ数・投稿数などが JSON フィールドで公開されている。なお、 metadata フィールドにも色々書いてあるが、これはソフトウェア独自拡張で、それぞれのソフトウェアに依るという感じ。今回の分析は、基本この拡張以外の情報だけを見ていくという感じ。拡張の方はちょっと対応状況が悪いので、もうちょっと別の情報源当たった方がいいかなという感じ。

さて、Fediverse は広大なネットワークでノードも大小ある。そのため、ノードが特定できた場合に情報を取得する方法があっても、そもそもノードを見つけなければ意味がない。そこでノードの探索方法も重要になる。ノードの探索は多分確立した方法はないが、対応状況が現状一番良いのは Mastodon Instance API の連合先一覧取得、 /api/v1/instance/peers だと思われる。対応状況は後でみるが、こいつもそこまで対応状況が良いとは言えず、大手の LemmyPeerTube といったソフトウェアは独自の API を叩くしかないという状況だ。今回は対応してるとこのみ探索してるが、その内もうちょっと個々の API 当たれるようにはしてみたいとは思っている。さて、具体的な方法だが、 /api/v1/instance/peers を叩くと以下のような JSON が返ってくるので、これを取るだけ:

1
2
3
4
5
[
    "ff.mizunashi.work",
    "misskey.io",
    "mastodon.social"
]

それぞれはホスト名になっており、ここの連合先をさらに辿っていけば、ひとまず Fediverse の大部分は網羅できるだろうというわけだ。

情報取得精度と対応状況

というわけで、実際に nodeinfo と peers API から情報収集を行うクローラーを書いた: https://github.com/mizunashi-mana/fediverse-stats

最初のインスタンスホストを与えれば、大体一日かけて Fediverse 上のデータを集めてくれる。10/22 時点での情報取得状況は以下だった:

取得状況 ホスト数 割合
成功 23813 30.43%
失敗 54451 69.57%

辿った先の半数以上のホストでは情報取得に失敗したが、23813件分のインスタンス情報は集まったらしい。情報取得失敗理由についてもう少し見てみると以下のようになった:

失敗理由 ホスト数 割合
アドレス解決失敗 19105 35.09%
nodeinfo 404 Not Found 9584 17.60%
TLS 証明書検証失敗 6104 11.21%
TCP 接続未達 5680 10.43%
タイムアウト (10sec) 4233 7.77%
無効な HTTP ステータス 3747 6.88%
nodeinfo の形式違反 1981 3.64%

アドレス解決失敗は一時的なものか一時的なものかの判別は困難だが、ほとんどは恒久的なものだろう。TLS 証明書検証失敗や、TCP 接続未達についても同じことが言える。というわけで半分はおそらくインスタンスが既に閉鎖していることによるものだと思われる。nodeinfo の HTTP ステータスコード違反、形式違反については数が多くて全部は見れていないが、こちらも基本的にインスタンスが既に閉鎖していて別のサービスに置き換わっていることによるものが多そうだ。ただ、一部 nodeinfo を公開していない独自インスタンスがあったり、全体に SSO 認証を敷いているサーバがあったりするようだ。もう少し今後詳細を調べていきたいが、ひとまずそこまで大きく逃しているノードは無いように思える。

一応上位の有名サーバが情報取得済みの対象に含まれていることも確認しておく。ユーザ数上位10件は以下のようになっている:

URL ソフトウェア ユーザ数 月間活動ユーザ数 連合数
https://egirls.gay/ misskey 1234567890 不明 2617
https://mastodon.social/ mastodon 1644665 283606 63812
https://pawoo.net/ mastodon 925128 49238 37460
https://daystorm.netz.org/ mastodon 479002 479003 不明
https://mstdn.jp/ mastodon 401999 38723 60633
https://misskey.io/ mastodon 399443 不明 22124
https://joindiaspora.com/ diaspora 316111 74 不明
https://baraag.net/ mastodon 293188 37530 26857
https://mastodon.cloud/ mastodon 273693 7552 47955
https://pravda.me/ mastodon 223407 52550 5224

Mastodon 鯖に限って言えば、大体 https://mastodonservers.net/servers/top の通りかなと思うので、おそらくそこまで大きな取りこぼしはないと思われる。なお、基本的に今回使う数値は自己申告制なので、悪意ある実装には弱い。実際上の数値はトップの https://egirls.gay/ と4位の https://daystorm.netz.org/ は数値が明らかにおかしいため、この後の分析では除外している。他にも詳しく見てみたら除外した方がいい数値はあるかもしれない。ま、そういうわけなので、あくまで参考程度に留めてくれという感じ。

数値取得の対応状況だが、項目毎に見てみると以下のようになる:

項目 対応ホスト数 対応ホスト割合
ソフトウェア名 23811 99.99%
ソフトウェアバージョン 23795 99.92%
ソフトウェアリポジトリ 1963 8.24%
ユーザ登録解放状況 23803 99.95%
ユーザ数 23163 97.27%
半年間活動ユーザ数 17675 74.22%
月間活動ユーザ数 17782 74.67%
ローカル投稿数 22889 96.12%
ローカルコメント数 8031 33.73%
連合ホスト数 14970 62.86%

nodeinfo/1.0 の時点で必須だった、ソフトウェア名、ソフトウェアバージョン、ユーザ登録解放状況は総じて対応状況が良い。また、ユーザ数、投稿数は必須ではないが公開してくれてるとこが多い。ただ、半年間活動 (アクティブ) ユーザ数、月間活動ユーザ数、コメント数は対応が少し悪い。nodeinfo/2.1 から入ったソフトウェアリポジトリもまだまだ対応してるとこは少ないという感じだ。連合ホスト数は、nodeinfo では対応してなくて、peers API からカウントして出している。これはいわば Mastodon Instance Peers API に対応してたかどうかの数になる。こちらも半数以上は対応してるが対応状況は良くはないということになる。なお、連合ホスト数には罠があり、大体それぞれのホストで連合先のソフトウェアにはホストと同じソフトウェアが使われているという偏りがある。そのため、Lemmy、PeerTube といったソフトウェアのネットワークは取りこぼしが発生している可能性が高く、逆に言えば Mastodon Instance Peers API に対応している範囲のネットワークしか拾えていないため対応状況が半数超えてるように見えているという可能性がある。その辺は将来的に少し改善していきたいところだが、ひとまず今回はこのデータを元に見ていく。

Fediverse の状況

ではそれぞれの数値を見ていこう。まず、総計値は以下のようになる:

項目 総計
インスタンス数 23811
ユーザ数 11555114
半年間活動ユーザ数 3364984
月間活動ユーザ数 1333071
ローカル投稿数 1164902338
ローカルコメント数 25175892

もちろん対応状況がまちまちなので、これらは確度の低い最低値ぐらいの認識でいるのがいいだろう。人口としてグローバルで1000万というのは、X が3億、YouTube が20億、Facebook が30億という数値から見るとまだやっぱり規模としては小さい [1]。またこの中にはかなり休眠ユーザもいるはずだ。月間活動ユーザ数は対応してない大規模インスタンスもいくつかいるので、おそらくこれよりは多いはずだが、それでも桁として変わることはないだろうから実質稼働しているユーザは数百万程という感じだろう。こちらは Facebook が2600万、X が 4500 万らしい [1] ので、やはり規模の桁は違うものの規模としては追いつける余地は十分ありそうだ。というわけで、現状ユーザ規模としては大手と比べるとまだまだだが、小さすぎるというわけでもなさそうという感じ。

次にそれぞれの分布を見てみる。まずインスタンス毎のユーザ数分布を見てみる:

インスタンス毎のユーザ数分布

この分布図は、数値を昇順に並べた場合に、横軸の割合の位置にいる数値が縦軸に対応する。見方としては、例えば横軸50の位置の縦軸数値が3だが、これは昇順に並べた場合に真ん中の位置にいる数値が3、つまり中央値は3であるということを意味する。ここから、大体中央値がユーザ数3ぐらい、75%ぐらいのインスタンスはユーザ数10以下のインスタンスという感じになる。75%を超えた辺りから結構ユーザ数が増加するという感じで、1/4程が盛況という感じのようだ。逆に1/4はおひとり様という感じっぽい。次にインスタンス毎の投稿数分布を見てみる:

インスタンス毎の投稿数分布

ユーザ数分布に比べてインスタンス毎に数が結構違うっぽい。中央値は200ぐらいで、75%のインスタンスは投稿数2000以下のようだ。思ったより廃人やボットは少ないかもしれない。大半は、程々の投稿を抱えてるって感じっぽい。次にインスタンス毎の連合数分布を見てみる:

インスタンス毎の連合数分布

75%以上のインスタンスは、連合数100以上という感じっぽい。ユーザ数の分布で見た通り、基本的におひとり様かある程度のユーザ規模のインスタンスが多いので、フォロー・フォロワー数もある程度の規模のインスタンスが大半という感じなのだろう。最後にインスタンス毎の月間活動ユーザ数分布を見てみる:

インスタンス毎の月間活動ユーザ数分布

この数値はソフトウェアにより対応状況が悪いというのはあるが、ユーザ数分布に比べて冬眠ユーザ、仮想ユーザを除いた数値が見れるのでより実態に近しい数値分布として使えるだろう。これを見ると、半分以上のインスタンスは実質1ユーザということになる。また75%でも4ユーザ以下しか稼働していないようだ。

次にソフトウェア毎のシェア率を見ていこう。まずインスタンス数のシェア率を見てみる:

ソフトウェア毎のインスタンス数シェア率

Mastodon が圧倒的だが、その次が WordPress なのは結構意外だ。WordPress には ActivityPub プラグインがあり、ブログ投稿を Fediverse に配信してくれる。その機能使ってる WordPress 鯖もそれなりにいるっぽい。その後は、Misskey、PeerTube、Pleroma、Lemmy となるようで、この段階でインスタンスの75%以上となるようだ。この辺が大体人気のソフトウェアになるようだ。これはインスタンス数シェアになるので鯖管理人から見た視点になるが、ユーザ視点で言うとユーザ数シェアで見るのが良いだろう。というわけで、ユーザ数シェアも見てみる:

ソフトウェア毎のユーザ数シェア率

こちらでも Mastodon が圧倒的で、Lemmy、Misskey、Diaspora が続くようだ。ここから、ユーザのうち10人中7人は Mastodon を使っており、残り2人は Lemmy か Misskey、Diaspora のどれか、残り1人はそれ以外のソフトウェアを使っていると言う感じになる。インスタンス数シェア上位だった WordPress、Pleroma が姿を消し、代わりに Lemmy が大きく順位を上げ、Diaspora も躍り出ているという感じだ。WordPress、Pleroma は基本小規模インスタンスで使われることが多いので、ユーザ数シェアで見ると姿を消してしまっている。Diaspora は実はユーザ数で見るとシェアが大きいように見えるが、実はここに関しては JoinDiaspora というインスタンスのユーザがメインになっていて、ここは閉鎖に向かっており投稿を含むほぼ全ての機能が停止されていてユーザも活動していないという状況のようだ。なので、実質 Mastodon、Lemmy、Misskey がユーザから見て認知されてるソフトウェアということになるだろう。なおこれはグローバルで見てるが、日本語投稿が多いインスタンスとかに限定するともう少し変わってくるかもしれない。ただ、そこの判定は地味にめんどいので今回は見てない。

さて、ソフトウェアのシェアはおひとり様か開いたインスタンスかなどのインスタンスの属性によりかなり変わる。そちらも少し見てみる。まず、アカウント登録を解放しているかどうかでのインスタンスシェアを見てみる:

アカウント登録を開放しているかによるインスタンス数シェア率

半分以上がアカウント登録を開放していない閉じたインスタンスで、開いたインスタンスは40%にも満たない。まずアカウント登録を開放しているオープンインスタンスでのソフトウェアシェアを見てみる:

ソフトウェア毎のオープンインスタンス数シェア率

Mastodon が相変わらず圧倒的だが、オープンインスタンスではユーザシェアと似たようなシェア傾向にあり、WordPress の代わりに Lemmy、Misskey が上位に入っている。また、個人的に意外だったが Pleroma、GoToSocial も割とシェアとしてはある程度あるようだ。逆に稼働ユーザ1のアカウント登録を開放していないインスタンス、通称おひとり様インスタンスでのシェアは以下のようになる:

ソフトウェア毎のおひとり様インスタンス数シェア率

こちらも Mastodon が圧倒的だが、それ以降はオープンインスタンスとかなり顔ぶれが変わり、Pleroma、PeerTube、Owncast で75%になるようだ。なお、今回おひとり様の判断は正確にはアカウント登録を開放しておらず、稼働ユーザ数1または稼働ユーザが取れなかったところはユーザ数5以下で判定しているので、正確におひとり様判定できているかは少し怪しい。これは Misskey などでは稼働ユーザ数の対応状況が悪くかつ仮想ユーザが生えてくることがあるためという感じだ。なので、まあそこまで確度は高くない。

最後にもう少し詳しいバージョン情報込みのソフトウェアシェアを見てみる。まずインスタンス数シェアから:

バージョン込みのソフトウェア毎インスタンス数シェア率

思ったよりみんなバージョン更新ちゃんとやってるようで、Mastodon 最新版のシェアが一番大きく、基本他のインスタンスも4系を使ってるところが多いようだ。ユーザ数シェアも見てみると、以下のようになる:

バージョン込みのソフトウェア毎ユーザ数シェア率

Mastodon 4系、Lemmy 0.18、Misskey (io版)、JoinDiaspora で使われてるバージョンが基本的なシェアを占める。特にユーザの40%以上は Mastodon 4.2 を使ってるっぽいので、その UI 前提という感じっぽい。そこは Fediverse 上での体験の前提として押さえておくのがいいかもしれない。

まとめ

というわけで、ひとまず Fediverse の各数値について並べてみた。分かることは中々少ないが、ひとまず Mastodon がソフトウェアシェアにおいて圧倒的であること、Fediverse の参加インスタンスは小規模インスタンスメインであることは読み取れる。とはいうものの信頼性に怪しい数値はやはりあるし、もうちょっと数値収集や情報源の拡張には改善の余地がありそうだ。

Fediverse は日々その姿を変えているし、この数値も半年後には大きく変わっているかもしれない。ただ、技術屋としてはオープン規格で色々やりやすく、実験場としての魅力は申し分ないし、SNS としても最近困ることがなくなってきた。むしろ日々色んなところで実験が生まれ、色々体験も変わってくるところはそこを楽しめる人にとっては面白い環境だと思う。結構これからが楽しみだ。

ま、今回の数値が何かの参考になればというわけで、今回はこれで。

[1](1, 2) https://growthseed.jp/experts/sns/number-of-users/