Slack チャンネルのロボット帝国化を防ぐ feed-pruning-proxy

この記事は はてなエンジニア Advent Calendar 2022 2日目の記事です。

みなさんは Slack の RSS アプリ を使っていますか?

/feed subscribe FEED_URLRSSAtom フィードをチャンネルに流すことができます。

Slack に RSS フィードを追加する | Slack

これを使って各種リリースノートやニュースサイトの新着をいろんなチャンネルに流しています。Slack をお使いの皆様もきっとそうしているでしょう。

フィードによって技術の最前線をキャッチアップでき、供給された話題は参加者同士の活発な議論を産む。学習とコラボレーションが同時に促進される素晴らしい機能と言えますね。

.

.

.

本当か???

例えば BigQuery のリリースノートを流すとこうなる!!

激流

これ 5 記事あるわけじゃないからな。
フィード的には 1 つのエントリだけど、含まれるリンクが全て展開されてこうなっている。

こんなフィードをチャンネルに流していると、いつ開いてもフィードしか見えない。
楽しい会話はすぐ押し流されてしまう。

そうして人々は言葉を発しなくなる。
沈黙がチャンネルを覆い、花は枯れ、鳥たちは歌うことを止める。

そうやって生まれた自動的な通知ばかりで人が話さなくなったチャンネルをロボット帝国と呼んでいます。人類は機械に支配されたのである。

展開オプション

当然知っているけど、Slack には展開オプションがあって、受け手側で展開を抑制することもできる。

でも全く展開してほしくないわけじゃないのよ、普段の会話では展開してくれるのは便利だし。
ただフィードでは1個ぐらいにしてほしい...

展開オプション

ロボット帝国に対抗するために生まれた feed-pruning-proxy

そんなチャンネルに人間性を取り戻すため pokutuna/feed-pruning-proxy を開発しました。

これはクエリパラメータに与えた URL のフィードの内容を加工して返すアプリケーションです。

いくつかの機能がある。

/p?feed={url} (デフォルト)

  • フィード中の各エントリの本文部分を削除します。
    • RSS なら description, Atom なら summary と content
  • 記事の URL やタイトルは流れるので、それだけ Slack が展開することに期待します
    • フィードの本文と展開される URL の内容が重複するようなフィードに対して、2回も言わなくていいよという時に使う。

/p?feed={url}&diet (diet モード)

  • フィード中の各エントリの本文部分のマークアップを削除します。
  • リンクの展開を抑制しつつ本文を出力したい時に使います。
    • Slack の展開結果が 何もない or 画像だけ のような、何か言ってよというページに対して使う。

こうして得た URL を /feed で購読することで、たかだか1つ展開されるちょうどよい出力がチャンネルに流れるようになります。

実際に記事を読んでるのか

そういう気持ちになることもありませんか。それも解決します

/p?feed={url}&org={str}&channel={str} とすると
フィード中の記事 URL をリダイレクタに置き換え、リダイレクト時に org と channel、URL をログに書くようになります。

これで実際にフィードから記事を読みに行っているのか計測できるようになり、このフィード誰も見てないし remove しましょう、という話ができるようになる。

このログを BigQuery に流し込むと集計や可視化も簡単にできて、みんなが注目した記事とかが分かって楽しいですね。

ご利用頂けます

これを GAE にデプロイしておきました。こちらからご利用いただけます。

https://feed-pruning-proxy.an.r.appspot.com/

迷惑がかかるような使い方をされていたり、金がかかるな〜思ったら予告なく止めるかもしれません。

App Engine または Cloud Run へのデプロイ

なのでぜひ自分の GCP プロジェクトにデプロイしてみてください。

App Engine へのデプロイは $ gcloud app deploy でできます。エッジキャッシュもあるし、こういうちょっとしたアプリケーションを公開するのに大変便利ですね。

blog.pokutuna.com

また、Cloud Run にデプロイできるボタンを README に置いておきました。押すと Cloud Shell が開いて Cloud Run にデプロイできます。

これを使っています
github.com

さあロボット帝国に抗い、人間の輝きを取り戻しましょう。

はてなエンジニア Advent Calendar 2022 2日目の記事でした。

昨日は id:arthur-1 さんの
Advent Calendar を Mackerel で監視する 〜新卒の暮らし方を添えて〜』 でした

明日は id:mizdra さんです。