monolithic kernel

GoToSocial を使い始めた

ActivityPub の実装のひとつである GoToSocial を使い始めた。

https://social.mono0x.net/@mono0x

自分用のインスタンスなので、ほかの人がアカウントを作ることはできない。Mastodon などの他のインスタンスから @[email protected] をフォローすることはできる。

最近、X (Twitter) が終わろうとしている中で、代替サービスをどうするかという話がある。他の会社のサービスに移動するというのが一般的な流れだとは思うが、それだと同じ構造から抜け出せないというのが気になる。

この手のサービスは自分だけでどうにかできるものではなくて、他の利用者とのネットワークありきなので、他の人が使いそうなサービスにも一通りアカウントを用意しておくことは避けられない。なので、それはそれでやっておきつつ、それとは別に自分にコントロール権のある場所もあってよいのではないかと思った。

もともと、ブログも自分のドメインでセルフホストしてコントロールできるようにしていたので、可能であればセルフホストするというのが個人的な既定路線ではあった。ただ、これまではあまり現実的ではないと思ってやってこなかった。

これが現実味を持つようになったのは、ActivityPub の存在が大きい。サーバ間で相互に接続できなければ、結局自分で何かを用意してもただの孤島になってしまう。仕組みだけあって実際に人が動かなければ何の意味もなくて、X (Twitter) がやらかしまくっていることで、人々が ActivityPub ベースのサービスに多少なりとも流れているということも重要。さらに、ActivityPub の実装がオープンソースで多数存在することも大変ありがたい。

# 触ってみると、確かにこういうこともできるかなというくらいの感じで、流行るかというと UX のハードルからしてそんなことはないとも思ってしまうが……。

セルフホストするとなると、気になるのはそのコスト。手間という意味だと、Docker で動かせるものが多いので、何を選んでもアプリケーションの固有の手間はそこまで大きくはないのかなと思った。金銭的な面だと、アプリケーションがどのようなプログラミング言語で書かれているかといった点や、使っているミドルウェアが何かというのが気になる。

このあたりを踏まえていろいろ見ていったところ、GoToSocial がよいのではないかという結論に至った。GoToSocial は Go で書かれているのでランタイムのオーバーヘッドが少ない。ストレージにはローカルのファイルシステムを使えるので、ひとりで使う分には十分でありつつ、ディスクボリュームを適当にマウントしてあげるだけでデータを永続化でき、お手軽で低コスト。

# スケーラビリティは無視しているし、可用性にも目をつむっている。個人サイトなんていうのは、ある一瞬を切り取ったときにサイトが生きているかどうかよりも、低コストで長く続けていけることが大事。

一旦動かし始めてみたものの、ちゃんと運用していけるのかは謎なので、気づいたらあっさり無くなっているかもしれない。それは仕方ない。

なお、今回アプリケーションを動かすのには fly.io を使った。導入について特に目新しいことはなくて、すでにやっている人の記事を見てすんなりできた。

もともとこういうことをしたくて k3s を構築していたのに、結局 fly.io になっているのは、メモリ 4GB 程度の VPS では厳しくなったのが直接的な理由。加えて、仕事で本格的に Kubernetes を触るようになって、プライベートでちょっと触る程度ではあまり学びがないなと思うようになってきたので、お手軽な方に振ることにした。

fly.io 自体はシンプルな UI/UX でお手軽に Docker コンテナを動かせて非常によい。LiteFS Cloud なんかも興味ある。

導入してみてわかったのだが、どうも日本で利用者の多い misskey.io との連合が組めないらしい。これは misskey.io の問題 (オープンソースソフトウェアとしての Misskey では対応済み) ということで決着していそうなので、対応を待つしかなさそう。

https://support.misskey.io/hc/ja/community/posts/6942805064975-gotosocial-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%A8%E7%9B%B8%E4%BA%92%E9%80%9A%E4%BF%A1%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84-%E9%80%A3%E5%90%88%E3%81%8C%E7%B5%84%E3%82%81%E3%81%AA%E3%81%84-