2024年の振り返り

今年はRuby関係のイベントで登壇することがあった一年という印象。

とくにRubyKaigi 2024でLTできたのが多分一番印象深い。

 

rubykaigi.org

 

とはいえ、LTが終わった後しばらく(福岡Rubyist会議04の少し前くらいまで)は燃え尽き気味になってた。

 

また福岡Rubyist会議04ではparse.yをUniversal Parserとして扱えるようにする試みを話したけど、その後またしばらく燃え尽き気味になってしまっていた。

 

gamelinks007.hatenablog.com

 

もう少しコンスタントにパッチ書いたりイベント出たりできるスタミナが欲しい。やっぱり運動を頑張るのが一番なのかもしれない。

 

2024年のruby/rubyへのcommitは26コミットで、まあそんな感じかという印象。

github.com

 

イベントへの登壇関係で必要な実装を進めていたとかもあり、あまり手を動かせていない感。来年はもうちょい頑張ろうね。

 

最後に、2024年で最も遊んだゲームはHalo Infiniteでした。

そこそこ遊んでる方だけど上位2%に入ってたとは思わなかった。

あとHalo Infiniteだけのプレイ時間で一年の2%分くらい溶かしてるけど、Halo MCC含めるともうちょっと溶かしてそう

2024年12月の振り返り

日々の生活

子供の保育園で生活発表会というのがあり、それに参加したりしてた。

参加しながら「大きくなったなぁ」とか「こういう寸劇できるようになったのか」とか子供の成長を感じられて非常に良かった。

 

あとはRubyWorld Conference 2024があり、それに参加していた。

2024.rubyworld-conf.org

 

スポンサーLTではMastodonのAndy Piperさんが来られるというのに合わせて実装したリレーサーバの話をした。

 

gamelinks007.hatenablog.com

 

その後、実装したリレーサーバを実際に使ってくれるユーザーさんも出てきており、徐々に開発体制とか色々考えなきゃいけないかもなという感じになりつつある。

 

ゲーム

Halo

Halo Infiniteはクリスマスシーズンのイベントが来ていたのでそれをこなしてた。

 

www.halowaypoint.com

 

あとは久しぶりにHalo InfiniteのLegendaryキャンペーン周回をやって、ちょうど昨日完走してきた。

エスカラム戦はなんどか練習がてらやってたのでそこまで辛くはなかったんだけど、ハービンガー戦が久しぶり過ぎて大分戦いにくかった感。

 

インディ・ジョーンズ 大いなる円環

Xbox Game Passに来ていた & インディ・ジョーンズ作品の大ファンなので熱中してやってた。

store.steampowered.com

 

メインストーリーは映画の雰囲気をそのままに遺跡を探索したり、トラップから走って逃げたりと、だいぶインディ・ジョーンズしてた。

あと戦闘とかで敵と格闘戦をするときにスタミナゲージが切れると「二、三発パンチを出した後にスタミナ切れしたインディが殴り返される」という映画で見るシーンが再現されてて笑ってしまった。

ところどころでマーカスとかマリオンなど映画作品のキャラクターが(名前だけのもあるけど)出てきたりというのもファンとしては嬉しい演出だった。

 

基本的にインディ・ジョーンズのファンなら楽しめそうな内容になっているのでオススメ。

ただゲームの都合上なのか広いマップの移動手段がなく、実績解除で探索し続けるときは少し面倒かもしれない。

 

OSS

引き続き、リレーサーバの実装をやってた。

github.com

 

PleromaとAkkoma での対応とかが不十分だったのでなんとかしたり、特定のハッシュタグだけを配送するオプション追加したりとかしてた。

Pleroma とAkkoma のリレー対応の関係でAkkoma のサーバを新しく建てて、仕様とか挙動とかも得られたのは良かった。

 

 

2024年11月の振り返り

日々の生活

11月は特にイベントとかには参加せず、のんびり過ごしている感じだった。

ただ、12月頭のRubyWorld Conferenceに向けてリレーサーバの実装とか頑張ってたので少し日々の生活が雑になっていた感じもあるので、そこは改善したいよなぁ

ゲーム

Halo

相変わらずHaloをやっていた。

基本的にはHalo Infiniteのウィークリーミッション消化をやりつつ、たまにHalo2 Legendaryキャンペーン周回をやるとかそんなところだった。

 

OSS

リレーサーバの実装ばっかりやってた。

github.com

 

RubyWorld Conferenceに間に合わせる関係で大分急いで実装したので、どこかのタイミングでリファクタリングとか進めておきたい。

ActivityPub RelayというActivityPubリレーサーバをRails 8を使って作った

はじめに

これはRuby Advent Calendarの7日目の記事であり、Fediverse (4) Advent Calendar 2024の二日目の記事です。

qiita.com

adventar.org

先日松江で開催されたRubyWorld Conference 2024でもLTしたActivityPub リレーサーバの話を、より詳細な経緯などを含めて書いていこうと思います。

speakerdeck.com

ActivityPub リレーサーバとは?

ActivityPub リレーサーバは簡単にいうとFediverseのサーバ同士の連合を強化するためのサーバになります。

Fediverseでは互いのサーバにいるユーザーがサーバを超えてフォローしあうことで互いの連合タイムラインに公開投稿が流れるようになります。

サーバを越えたフォローと配送の図

そのため2017年頃のMastodonではサーバを建てたばかりだとフォローしているアカウントがないため、連合タイムラインに外部のサーバの投稿が流れないということが発生していました。

当時の記憶は少しあやふやですが、僕個人の場合はTwitterなどでサーバを建てた人のアカウントを見つけてそれをリモートフォローしてサーバ同士のつながりを増やしていった覚えがあります。

そういった中でMastodonでは v2.5.0からリレーという機能が導入されました。

github.com

このリレー機能では、以下の図のようにサーバAとサーバBがそれぞれ連合していなかった場合でもそれぞれのサーバの投稿をリレーサーバを中継して配送してくれるようになりました。

リレーサーバの配送の仕組みについての図

ActivityPub リレーサーバとはFediverseの連合を強化するためのハブの役割を果たしてくれます。

ただリレーサーバは銀の弾丸ではなくデメリットも存在します。

例えばスペックを抑えた小規模なサーバを運用していた場合、リレーサーバから配送されてくる大量の公開投稿を処理する負荷に耐えられない可能性もあります。
またリレーサーバに参加しているサーバの規模によっては大量の公開投稿がリレーサーバを経由して自分のサーバに流れてくる可能性もありますし、リレーサーバ自体にも負荷がかかります。

なんで作ろうと思ったのか

まずリレーサーバの実装として現在日本でよく知られているものはおそらく以下の二つになります。

github.com

github.com

それぞれCrystalとGoで書かれています。

そのほかにもRustでの実装やNode.jsでの実装などもあります。

git.asonix.dog

github.com

Rubyの実装に関しては現在も開発されているものはなく、最初期にプロトタイプ版として開発されたものがあり、それを運用されている方がお一人いるという状況でした。
またRubyで実装されたリレーサーバのメンテナンスが大変そう(主にRubyとRailsのアップデート対応)で、以前にRubyとRailsのアップデート対応のPRを投げたりはしていましたが、それ以上のことは僕もできていない状態でした。
特にプロトタイプ版として開発された背景からかテストがなく、実際にサーバを建てて動作確認をしなければならないのも大変でした。

そんな状況だったので「このメンテナンスしにくいのどうにかできないかなぁ」と思い、「現存するRubyの実装を参考にリレーサーバの実装をテストも書きつつやりたいな」と考え始めました。
それがちょうど去年の年末から今年の年始にかけてくらいで、結構熱中してやっていたんですが他のところでリソースが必要になり徐々に熱が引いていきました。

そんなこんなしていた時に今年のRubyWorld ConferenceでMastodonの開発チームのAndy Piperさんが来日されるというのを聴き、「せっかくMastodonの人が来るんだからActivityPubやFediverseの話をしたい!」と思い、やる気が再燃し、リレーサーバの開発を再開しました。

2024.rubyworld-conf.org

またリレーサーバ開発を再開したぐらいにRails 8が登場しました。
これがリレーサーバの開発をより後押ししたところもあります。

rubyonrails.org

というのも

  • 証明書とかNginx使うかとかどうする?とか
  • Redisどうする?データベースどうする?とか
  • デプロイもSSHでサーバ内に入って手動やるか、もしくはDockerfileなどをいい感じにAWSとかでつかうかとか

という感じで、そもそもリレーサーバを建てる&メンテナンスするのが大変だったんですね。
個人的にはより良い感じにリレーサーバも分散が進む方が負荷も分散できると思っていたので、リレーサーバの建てにくさはどうにかできないかなと考えてました。

それがRails 8を使うことで

  • Thrusterでの証明書の自動更新&Nginx建てなくて良い
  • Solid Queueを使うのでRedisが不要になり、本番環境でSQLiteが使えるので良い
  • デプロイはKamal2がよしなにやってくれるので非常に良い

という感じになりそうだったんですよね。

そういった後押しもあり「いっちょやるか」と開発を再開したのが11月の中旬くらいでした。

作ったもの

そんなこんなで作ったものは以下になります。

github.com

Rails 8で入ったKamal2、Thruster、Solid Queueをそのまま使い、ささっと実装しました。

また本番環境のデータベースはSQLiteを採用しました。
リレーサーバの性質上、配送する公開投稿はデータベースに保持する必要はなく、必要なのは参加しているサーバの情報などだったので「SQLiteでも充分そうだ」という判断もあり、採用することにしました。

現状の機能としては

  • Mastodonのリレーをサポート
  • Misskey(とそのフォークなど)のリレーをサポート
  • Pleromaã‚„AkkomaなどのActorリレーも部分的にサポート(ただ問題があってドキュメントには書いていない)
  • 参加サーバの管理画面
  • ジョブの管理画面
  • Google Authenticatorなどで使えるOTPをサポート

という感じになっています。

試験的にリレーサーバとして運用した際にはメモリ1GB CPU1コアのスペックが抑え目なサーバでもサクサクと動いていたので中々いい感じでした。 のえるさんのご協力もあり、負荷試験としてFedibirdからの配送も処理できるか確認してみました。
ジョブの管理画面から見ていた感じだと、Fedibirdが参加する前が一時間で1000ジョブとかくらいだったんですが、参加後は大体毎分1000 ~ 2000ジョブ位を処理していて負荷がいい塩梅に増してました。
稀に配送先のサーバへのリクエストが長引き遅延することはありましたが、それでも基本的には即時でジョブを捌き切っていましたし、なおかつサーバ自体も負荷でダウンするということもなかったので良い感じでした。

現状の運用

現在はKAGOYAさんのメモリ1GB、CPU1コア 、ストレージ25GBでリレーサーバを運用しています。
なので月550円くらいでリレーサーバを建てて運用できるので大分お財布にも優しくて助かってますね。

relay.gamelinks007.net

参加サーバも小規模なサーバかお一人様サーバの人に絞っているので負荷の面も心配はなさそうという感じですね 。

今後

一日あたりの配送している公開投稿の数をグラフで表示したりとかもやっていきたいですね。
多分それがあるほうが「このリレーサーバに参加するとどれくらいの負荷が増すんだろう?」というのが確認しやすいと思いますし。

また小規模なリレーサーバを建てやすくなった&かなり安く済みそうというのもあり、リレーサーバを建ててみたい人向けにフォローとかしていきたいですね。
あと個人的には小規模なテーマリレーサーバとして運用する(古の同人関係のサーチエンジン的な感じで)とかもできそうなのでそのあたりもやってみると面白いのではと考えてます。

参考記事など

blog.noellabo.jp

blog.noellabo.jp

blog.yukimochi.jp

joinfediverse.wiki

2024年10月の振り返り

日々の生活

松江で松江Ruby会議11が開催されるのでそれに参加していた。

matsue.rubyist.net

 

プロポーザルは出してたんだけど、通らなかったので一般参加で参加していた。

翌日に予定があったため懇親会に参加できず、濃ゆい話が出来なかったのが残念。

 

ゲーム

Halo

store.steampowered.com

 

暇を見てはHalo Infiniteのファイアファイトをやってウィークリーミッションをこなしてた。

 

 

OSS

Rubyのパーサー周りとRBSとかにPR投げてた

 

github.com

 

github.com

 

github.com

 

github.com

 

github.com

 

2024年9月の振り返り

日々の生活

福岡Rubyist会議04 に登壇してきた。

 

regional.rubykaigi.org

 

その時の感想とかはこちらにまとめてある

 

 

gamelinks007.hatenablog.com

 

ゲーム

Halo

store.steampowered.com

 

ひたすたHalo Infiniteではファイアファイトをやって、Halo MCCではLegendaryキャンペーン周回をやってた

 

StarWars Outlaws

store.steampowered.com

 

8月末あたりからプレイしてて9月頭くらいにクリアした。

ネタバレになるので詳細は書けないけど最後の辺りはファンにとって大分嬉しい演出があるので是非確認して欲しい。

 

OSS

福岡Rubyist会議04で話すgemの実装とかを頑張ってて、あまりOSS業はできなかった感じがある。

終わった後もだいぶ放心状態だったので、あまり手が動かせなかった感。

 

とはいえMastodonをフォークされてるところのCI修正はやったりしてた。

 

github.com

2024年8月の振り返り

日々の生活

 

ゲーム

Halo

store.steampowered.com

 

相変わらずHalo Inifiniteでファイアファイトやってた。

あとはたまにHalo MCCのほうでキャンペーン周回やったりとかしてたかな

 

StarWars Outlaws

store.steampowered.com

 

スターウォーズの世界観でアウトローやるよってゲームをガンガンやってた。

基本的には敵地でステルスアクションしつつ、依頼の品を回収するとかなので人によってはプレイに時間がかかるのが嫌になるかもなぁと思った。

 

個人的には凄く面白かったのでオススメだけどね

OSS

HaloとStarWars Outlawsが楽しくて何も出来なかった......