Plumeのメンテナーになりました

この記事はFediverse Advent Calendar 2020 第三会場の21日目の記事です。昨日はcybergeneさんの2020年Fediverseで起きた出来事でした。fediverseやActivityPubの社会的な側面に関する話題が多い年だったんですかねー。「ワニが死ぬ」で笑いました。

さて、先月の末ぐらいに、Plumeのメンテナーになりました。それについてだったりついてじゃなかったりをつらつら書いてみます。

ぎりぎりになってしまいました。フェディカレの人はみんな事前登録してるみたいで、ちゃんとしてる人ばかりですね。。。

Plumeとは?

Plumeは「分散ブログプラットフォーム」です。自分でサーバーにインストールして使います。

「分散」というのはActivityPubを喋ってfediverseに参加しますよってことです。お馴染みの。

「ブログ」は……あれ、ブログって今でも使われる言葉でしたっけ? noteとかMediumとかみたいに比較的長文で記事を書いて、ストックされてくやつです1。「メディア」とか言う方が伝わるんだろうか。

「プラットフォーム」っていうのは……WordPressとかに対比する言葉なのかな。WordPressとかは、ブログ(メディア)を運用したい人が自分もしくは少数の著者のためにインストールして書いていくのが主な使われ方ですが、PlumeはMastodonみたいに、誰かが立てたインスタンス上でユーザー登録して自分のブログを持つことができます。今これを読んでいるあなたも、右上の「登録」から入って自分のブログを持てます2

そう、このブログもPlumeに乗っかっています。

メンテナーになった経緯

コントリビューションするまで

僕は腰が重い人間で、一つだけの理由では全然行動しなくて、二つか三つの理由が揃ってやっと動く、という感じなんですよね。Plumeはそこにはまったツールで、

  • ActivityPubでなんかやりたいなー
  • 以前使っていたブログは出先でモバイルから書いたりができない3
  • Rust(プログラミング言語)の本を読んだはいいが、Rustで書く題材がない、ついRuby(プログラミング言語)を使っちゃう
  • プログラミングその物で何か書く物を探していた

という欲求や不満が溜まっていたところで、Rust製の連合ブログであるPlumeを使いつつ、Rustで機能追加とかしていけばいいんだ、と思い立ったのです。

実際インストールして使い始めてみると、当たり前の機能が足りていなかったりバグがあったりしたので、追加や修正のコードを書いて本家に送り付けました(プログラマーの間ではプルリクエストと呼ばれています)。その辺は #Plume を見てください(さり気無くハッシュタグ機能の紹介)。「Rust自体は初心者だから自信はないが、ブログ作成という分野の知識はある」という状態が、勉強には丁度よかった。勉強に丁度いいというのは、モチベーション維持の点でとても重要(簡単すぎると飽きてしまう)。

メンテナーになるまで

そうやって機能追加とかをしていると自然にメンテナーに……というわけではありませんでした。

あれ、メンテナーって言葉も説明が必要? ですよね? メンテナーはメンテナンスする人で、Plume開発の際に、(僕が送り付けたような)プログラム修正を取り入れるかどうかを決定したり、質問があったら答えたり、ドキュメントを整備したりします。

ある日、リードメンテナーの人がMatrix(文字チャット)で、「自分は抜けようと思うし、開発も滞っているからユーザーにも他の代替プロダクトに移るよう促したらいいと思う」ということを書きました。それを見て数日迷いましたが、「だったら僕がメンテナーを引き継ごうと思うけど」と言い出したことで、メンテナーとなったのです。

どうしてそんなことを言ったのか、難しいところですが(これまでだってチャンスはあったわけですし)、まず自分が使っているソフトウェアなわけだから、気になることがあったら直すだろうし、その修正はみんなにシェアできた方がいいよなと思ってます。あとはやっぱり人間、何かが失われるということには弱いものですよね。

そんなわけでRustもあんま書けない人間がPlumeメンテナーになったのでした。

メンテナーになってみて

感じていることが大きく二つあります。

一つは問い合わせが結構多いこと。ソースコードは主にGiteaで管理しているんですが、GitHubにもミラーしていて、そこへのイシューがちょいちょい来ます。Matrixで質問をくれる人も結構います。勿論、人気プロダクトと比べると圧倒的に少ないのですが、一人で対応していると案外時間奪われるなー、と。英語だし。

もう一つはかなり自由に動けるし、それ故に積極的にソースコードを読むようになったなということです。人間立場で変わりますなあ。楽しい。

今やってること

今はリリースの準備をしています。土日にやろうかなとは思っていたのですが、ちょっと見直した方がいいことが出て来てその対応中。このアドカレで「メンテナーになってリリースまでしました!」とか報告できたらかっこよかったんですが、過ぎた望みでした。

この後は、パフォーマンスが結構悪くて(このブログもちょいちょい落ちるので読めなかった人もいるんじゃないでしょうか。ごめんなさい)、それを何とかしたい。Rustには最近async/.awaitという機能が入ったのでそれを導入できれば何とかなるのではないか……と期待しています。

技術的な話をするとinboxにリクエストが来た時に、アクターのIDを同期的にデリファレンスして確認した後に200を返すんですよね、202とかで一旦返すんじゃなく。そもそも200でいいのかというものあるけど、そこを非同期で処理できたらだいぶ違うんじゃないかと。

と、パフォーマンスの話をしている時に禁物の「期待」とか「推測」とかの話をしてしまいました。Rustでプロファイルを取る方法が分からず……ま、調べてないだけなんで、これから調べます4

あとは細々足りない機能を補ったり欲しい機能を足したりバグ修正したりしていきたい。ActivityPubの挙動もなんか怪しいところあって、Mastodonからうまくフォローできてない? 気もする? これもちゃんと調べられてません。

お願い

Plume使ってみてください。自分でインスタンスを立ててくれてもいいし、ここみたいな既存のインスタンスにアカウント作るんでもいいです5。「いいね」とか「ブースト(リブログ)」とかもあるんでソーシャルっぽさ感じられます。

あとデザインとか開発とか参加してくれる人がいたらとても嬉しい!

1

昔はブログがフローでウィキがストックと言われた時期もありましたが、今フローと言ったらMastodonとかですよね……。

2

が、今ここは不安定なので別のインスタンスがいいと思います……。(追記。なんと、サーバーは東京で、データベースは台湾で稼働してました! データベースも東京にしたので今は耐えられるスピードだと思います)

3

静的サイトジェネレーターだったので。Gitリポジトリーを更新すればいいやと思ったこともありましたが、モバイルでGitLabの編集画面触るの辛過ぎた……。

4

教えてくれる人がいたら嬉しい。

5

ただここは、まだ不安定なので他がいいかも……。(追記。なんと、サーバーは東京で、データベースは台湾で稼働してました! データベースも東京にしたので今は耐えられるスピードだと思います)