By

Monesi: feed reader bot for Mastodon のご紹介

はじめに

Monesiという名前の、マストドンで使うフィードリーダのボットを開発したので、これを紹介したいと思います。

簡単に言うと、このボットを使うと、マストドンのタイムラインが簡易フィードリーダになります。

feeds

特色は、ボットアカウントへのメンションによるコマンドで、購読するフィードを追加できることです。

@monesi subscribe http://tech.degica.com/

subscription

このようなコマンドで、興味のあるブログやニュースサイトを登録することができます。そして、このアカウントをフォローしておくと、そのブログが更新された時に、最新記事の情報がタイムラインに流れます。

使い道

もともとの目的は、個人で使っているマストドンインスタンスの活用です。私は、https://m.uncate.org/ で自分専用のインスタンス、いわゆる「おひとりさまインスタンス」を運用しています。

マストドンには、各インスタンスごとにローカルタイムラインがあるのですが、おひとりさまインスタンスでは、アカウントを持っているのが自分ひとりなので、ここに流れるトゥートは自分自身のつぶやきだけです。ですから、これには意味がないし見ることもほとんどありませんでした。

しかし、どのクライアントを使っても、普通にアカウントを登録すればローカルタイムラインはデフォルトで表示されるので、何か活用する方法がないか考えて、「そうだ、ここを自分用のRSSリーダにすればいい」と思いつきました。

ということで、最初の使い道は、おひとりさまインスタンス用の個人専用フィードリーダとすることです。

そして、これをちょっと発展させた使い道として、小規模なインスタンスで共有のフィードリーダにしたいと思い、メンションで購読するフィードを追加できるようにしました。

ですから、インスタンス管理者の方はボットの設置だけして、メンバーの方に「興味のあるフィードを自由に登録してください」とか「みなさんがよく見ている、インスタンスのテーマに合ったブログやニュースサイトを登録してください」と呼びかければいいのです。そうすれば、そのサイトの更新をインスタンスの中でみんなで共有し、会話のきっかけにすることができます。

私は、http://bcn-users.degica.com/ という AWS や ECS をテーマとしたインスタンスも運用しています。残念ながら、今は閑古鳥が鳴いている状態ですが、とりあえずここに monesi を導入して、それ関連の最新ニュースが見ることができるようする予定です。人が集まらなくても、せめて、「このインスタンスには、AWS 関連のニュースが集まっている」という状態にはしたいと思っています。

どちらのケースでも、メンションでフィードを登録できるということは、外部から「これも読んでみたら?」といいブログを教えてもらえるということなので、うまく回れば、いい情報のソースにすることができると思います。

現状では、誰でも登録コマンドを打てる状態なので、あまり大規模なインスタンスで使うと、関連のないフィードが登録されたりして混乱してしまうかもしれません。そこは、必要に応じて、登録コマンドを打てる人を限定していく ACL のような機能を追加する予定です。

どちらのケースでも、メンションを使って、マストドンクライアントの中から操作できるので、運用(フィードの追加/削除)は簡単になると思います。

インストール

Ruby があって24時間動いているサーバがあれば、簡単に導入できます。マストドンインスタンスを動かしているサーバで運用すれば、すぐできると思います。

次のコマンドでインストールできます。

$ git clone https://github.com/essa/monesi
$ cd monesi
$ bundle install --path vendor/bundle
$ bundle exec rspec spec # test it
$ bundle exec bin/monesi setup
Instance URL: |https://mstdn.jp| https://(your mastodon server)
Your Email Address: (your mail address)
Your Password: ****

最後の monesi setup で、ボットアカウントの情報(インスタンスのURL、ボットアカウントのemail/password)を入力します。このアカウントは monesi 専用のものを事前に用意しておいてください。

そうすると、マストドンのアクセストークンなどの必要な情報が、カレントディレクトリの .env に書きこまれます。再設定などする場合は、これを削除してから monesi setup をやり直してください。

.env ができたら、次のコマンドでボットが起動します。

$ bundle exec bin/monesi bot

購読しているフィードの情報は、status.yaml というファイルに保存されますので、時々これをバックアップしてください。

現状では、デーモン化などの機能はないので、nohuptmux などを使って、このプロセスが24時間稼動するようにしてください。

Barcelona での運用

Amazon ECS でスケーラブルな Mastodon インスタンスを立ち上げる — Commerce Hack という記事に書いた方法で、Barcelona上でMastodon を運用している場合は、monese setup の後に以下の手順で Barcelona 上で稼動させることができます。

下記のコマンドで Docker Image を作成し、mastodon と同じリポジトリに push する。

$(aws ecr get-login --region ap-northeast-1 --no-include-email) && docker build . -t (Your Account).dkr.ecr.ap-northeast-1.amazonaws.com/mstdn-bcn-users-monesi:latest && docker push (Your Account).dkr.ecr.ap-northeast-1.amazonaws.com/mstdn-bcn-users-monesi:latest

下記のコマンドで、monesi 用の heritage を作成する

$ bcn create --district=mstdn -e production

下記のコマンドで、.env の内容を Barcelona の環境変数に登録する

$ bcn env set -e production MASTODON_URL=https://bcn-users.degica.com AWS_REGION=ap-northeast-1 S3_BUCKET=(Mastodonで使用しているS3 Bucket の名前)
$ bcn env set -e production --secret MASTODON_CLIENT_ID='xxxx' MASTODON_CLIENT_SECRET='****' MASTODON_ACCESS_TOKEN='****' AWS_ACCESS_KEY_ID='****' AWS_SECRET_ACCESS_KEY='****' # copy it from .env
$ bcn deploy -e production

Barcelona で運用すると、最初の設定はひと手間多くなりますが、以下のメリットがありますので、個人的にはこの方法がオススメです。

  • アプリケーションやホストOSのバージョンアップ時に、サービスの中断がない
  • バージョンアップ時に、新旧の環境(gem等)が混ざらないので、安全に切り替えられるし、戻すことも簡単
  • デフォルトでログが CloudWatch に保存されているので、トラブルシューティングが簡単

使い方

bot アカウントに対して、@monesi help というコマンドを打てば、コマンド一覧を表示します。現状でサポートしているのは以下のコマンドです。

  • subscribe (blog url/feed url) : 指定したフィードを購読する
  • unsubscribe (blog url/feed url) : 指定したフィードの購読をやめる
  • list : 現在購読中のフィードの一覧をリプライで返す

終わりに

「共有フィードリーダ」という考え方は、マストドンによく合っているような気がします。まだ、これは開発を始めたばかりなのですが、「ほとんどのインスタンスが @monesi アカウントをひとつづつ持っている」という状況を目指して、今後、少しづつ開発を継続していきたいと思っています。

私は、次の二つのアカウントでこの monesi を運用しています。

  • @monesi@m.uncate.org: 個人用の雑多なフィード
  • @monesi@bcn-users.degica.com: AWS を中心として技術関連のフィード(現在は、monesiのテストのために購読しているフィードもありますが、これからAWS関連に絞りこんでいく予定です)

どちらも、フォローおよびフィードの追加をご自由にお試しください。ただし、フィードの更新頻度が多すぎたり、内容が合わないと思った場合には、削除させていただく場合もありますので、その点はご了承ください。

ご自分のインスタンスのために必要な機能等あれば、気軽に essa@m.uncate.org までリクエストしてください。

また、bcn-users.degica.com もこれを機会に、リブートしたいと思います。AWSやECSに興味を持っている方のご参加をお待ちしています。

一緒にユニークな決済サービスを作ってくれる Rails エンジニアを募集中です!
多国籍なメンバーと一緒に仕事をしてみませんか?詳細はこちらのリンクです:D