Monesi: feed reader bot for Mastodon のご紹介
Tweetはじめに
Monesiという名前の、マストドンで使うフィードリーダのボットを開発したので、これを紹介したいと思います。
簡単に言うと、このボットを使うと、マストドンのタイムラインが簡易フィードリーダになります。
特色は、ボットアカウントへのメンションによるコマンドで、購読するフィードを追加できることです。
@monesi subscribe http://tech.degica.com/
このようなコマンドで、興味のあるブログやニュースサイトを登録することができます。そして、このアカウントをフォローしておくと、そのブログが更新された時に、最新記事の情報がタイムラインに流れます。
使い道
もともとの目的は、個人で使っているマストドンインスタンスの活用です。私は、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 というファイルに保存されますので、時々これをバックアップしてください。
現状では、デーモン化などの機能はないので、nohup
や tmux
などを使って、このプロセスが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に興味を持っている方のご参加をお待ちしています。