GoToSocialを入れてみた

おはようございます。noteでiOSアプリ開発をしているwaturaです。

Twitterが買収されて、レイオフだなんだという騒ぎが終わってそろそろ旬がすぎてしまった感じもありますが、TwitterとかMastodonの話です。が、とくに、Mastodonってすごいんだよ!素晴らしいんだよ!みんなTwitterから移住しようみたいな話ではありませんし、Mastodonについて長々と語る予定もありません。

Mastodon

Mastodonは分散型のソーシャルネットワークです。分散型というのはどういうことかというと、Mastodonのソースコードやセットアップ方法が公開されていて、やる気とか根気とかがあれば、誰でも自分でMastodonを運用できるようになっています。
自分の運用しているMastodonやMastodonの開発者が運用しているMastodon、アニメとかボカロみたいな特定のトピックに強いMastodonなどなどいろいろなMastodonが存在していて、かつ、それらのMastodonをまたいでやり取りとかをできるというのが表面的な分散型ということになっています。

ActivityPub

さて、MastodonがMastodonとやりとりできるんですよ。すごいでしょでは、Mastodonの特徴を全然表せていません。Mastodon同士でやりとりするさい、ActivityPubというプロトコルにしたがってやりとりをしています。
ActivityPubはW3Cが分散型のSNSを作るためのプロトコルとして、推奨しているプロトコルです。ActivityPubは、ActivityStreamsというデータ構造を使ってサーバー側やクライアント側がやり取りをするというものになります。

ActivityStreamsというのも、W3Cが推奨しているデータ構造の定義で、ざっくりいうと特定のフォーマットのJSONです。

なので、Mastodonは、汎用的なJsonフォーマットのデータを使ってTwitterのようなプラットフォームを作るソフトウェアと言えます。
この汎用Jsonフォーマットをつかってさえいれば、相手がMastodonである必要はありません。相手が、Twitterのようなサービスである必要すらありません。
たとえば、PeerTubeというYoutube風ソフトウェアや、PixelfedというInstagram風ソフトウェアなどもあります。Mastodonからフォローする相手として、全く別のサービスを選べます。

というわけで、ActivityPubを実装してみました!だったら面白かったんですが、できていないのでシンプルなActivityPubサーバーを動かしてみました。

GoToSocial

GoToSocialはGoで書かれたActivityPubサーバーです。

なんでMastodonではなくてGotoSocialか

  1. Mastodon動かしたよ!ではなんか普通

  2. GotoSocialを動かすのがめっちゃ簡単そうだった

  3. 自宅サーバーRPiだとMastodonだとヘビーそうだった

  4. 最初に目に付いたものがGotoSocialだった

というようなかんじで、GotoSocialを選んでみました。

RPiの環境

Raspberry Pi 4 B 8GB をつかって自宅サーバーを動かしています。詳細については下記の自宅サーバーで配信しているブログを見てください。

(ちかいうちに、この記事もブログの方に転載しようかなと考えています。が、まだ未来の話です)

上記記事に書いていない更新として、PostgresをDocker内部ではなくRPi上で直接うごかしています。Dockerで動かしていると、システムごとフリーズして電源を引っこ抜く以外なにもできなくなるという自体に何度も遭遇したためです。

やったこと

既存のdocker-compose.ymlにつっこみました。

Reverse Proxyとして、traefikをつかっているので、ちょろっとコードを書くだけで、アクセスできるようになります。
また、今回は手元で動かし続けているPostgreSQLがあったので、postgresを指定していますが、in-memory,sqliteも使えるので、sqliteを使うようにすればもっとシンプルに動かせるようになります。

docker exec -it gotosocial /gotosocial/gotosocial admin account create --username admin --email admin@example.com --password 'this_is_passwd'
docker exec -it gotosocial /gotosocial/gotosocial admin account confirm --username admin
docker exec -it gotosocial /gotosocial/gotosocial admin account promote --username admin

admin用のアカウントを作って、adminに昇格させています。これで、少し設定をWeb Frontから変えられるようになります。
また、Alphaだといいつつもドキュメントがしっかりあるので、読んでみるといいかもです。

というわけで、RPiで動いているアカウントがこれになります。
今後も運用し続けるかどうかはわからないですが、もしよろしければフォローしてください。

GoToSocialにはUIはありません

正確には、プロフィールの画面とかAdmin画面とか最小限のUIはあります。ですが、Postしたり、Followしたりといったことができる画面はありません。なので、汎用的なMastodonクライアントを使う必要があります。

私は、pinaforeをつかっています。もうちょっとこの世界に入っていこうかなという段階になったら、iOS用のクライアントとかもいれていきたいなと考えています。

WatchTower

自宅サーバー記事でも書きわすれていましたが、WatchTowerというOSSもつかっています。

WatchTowerはDockerコンテナのイメージをアップデートし続けてくれる便利ツールという感じです。RPiで動かしているものは別に、ちょっとくらい落ちても困らないやという感じなので、特に細かい設定とかをせずにがんがん更新をかけてもらっています。

他のActivityPubサーバーで気になったもの

honk

GoToSocialのようにActivityPubをつかったサーバーの実装として、honkという物があります。GoToSocialはわりと普通な感じの実装なんですが、honkは独自の世界観をつくっているサーバーになります。気になるのでちょっとみてみるかもしれません。
ただ、GoToSocialはMastodon API compatibilityを売りの一つとしていますが、honkはhonkの世界が中心となるのでMastodonクライントが正しく使える可能性はひくそうです。
同じActivityPubを使った実装といっても、さまざまな世界観をつくれていけるのはなかなか面白いと思います。

microblog.pub

IndieWebという、こちらもDecentrisedな世界観をつくっているプロトコルにも対応しているActivityPubサーバーの一つです。IndieWebで謳っている内容にはWeb3.0に近しい内容もいっぱいあります。こちらも気になるは気になりますが、そこまでなので見ることはなさそうだなと感じています。

まとめ

  • MastodonはActivityPubを使っている

  • ActivityPubは分散SNSで使っているプロトコルの一つ

  • ActivityPubをつかうGoToSocialというのを入れてみた

  • Dockerで楽々すぎて特に書くことがなかった

  • pinaforeもいいけど、アプリ入れたいな

  • なんなら、アプリ作りたい

  • だけど、俺にYet Another SNSは必要なのか?

という感じのまとめになりました。

GoToSocialからHonkに乗り換えるのもありだなぁとちょっと思ってる。GoToSocialを読むより、Honkの方が規模小さそうなので…