こんにちは、mzpです。
先日、Misocaオフィスでesa meetupを開催しました。当日お越しいただいた方々ありがとうございます。 会の様子は以下のような記事にまとめられています。
- Misocaの日常-esa meetup @ Misoca
- diary/2017/01/24/esa meetup @Misoca に行ってきました :hatched_chick: :hatched_chick: :hatched_chick: - docs.esa.io
- esa meetup @ Misoca の様子 - Togetterまとめ
最近、esaの更新通知を1つのチャンネルに流すのではなく、適切なチャンネルに振り分けるようにしたのでその話を書きたいと思います。
これまでのMisoca
これまでesaの更新通知をSlackの単一のチャンネル(#now_esa)に流していましたが、日報のような更新頻度の高いものの通知で、更新頻度の低い文書の通知が埋もれてしまうという問題がありました。
初期: 標準のWebhook
標準のWebhookの設定を変更して「日報」カテゴリ以下の更新を #now_nippou
チャンネルに通知するようにしました。
これにより、日報の更新通知と、それ以外の記事の更新通知が分かれるため、日報がとても読みやすくなりました。 他のメンバーにもかなり好評でした。
同じように、「プロジェクト/なんとか」カテゴリ以下の更新はこのチャンネル、「プロジェクト/かんとか」カテゴリ以下の更新はこのチャンネルという設定をどんどん増やしていきました。こちらもなかなか好評でした。
問題点
しかし通知先が増えるにつれて、以下のような問題が生じました。
- 「他の箇所で通知してないやつ」という設定ができないので、通知が二重で届くことがある。*1
- 通知先のチャンネルを変えるには個別にincomming webhookを作る必要があるため、大量のincomming webhookを管理しないといけない。
通知が二重で届くことについては、他のメンバーからも不満がで始めました。
解決策: AWS Lambda
じゃあ自分でやるか、ということでAWS lambdaでルーティングする仕組みを作りました。 名前は伝書鳩からの連想でhatoにしました。
hatoを使うと、以下のようなことができるようになります。
- どのパターンをどのチャンネルに通知するかを一箇所で設定できる
- Slackのincomming webhookは1つあればよい
- 一致するパターンがあった場合はそこで処理をやめるため、重複して通知されない
今のところ以下のような設定にしています。
module.exports = [ // 日報は更新量が多いので専用のチャンネルに流す { pattern: '^日報', channel: '#now_nippou' }, // 各プロジェクトの通知はそれぞれのチェンネルに流す { pattern: 'プロジェクト/2017/採用', channel: '#talk_recruit' }, { pattern: 'プロジェクト/2016/xxx', channel: '#talk_xxx' }, // どこにも通知してないやつは、esaチャンネルに流す { pattern: '', channel: '#now_esa' } ]
余談
Webhookの通知テストをしていたら、会社のチャンネルに@fukayatsuさんのアイコンがまざってきておもしろかったです。
採用
Misocaでは情報共有ツールを大事にするソフトウェアエンジニアを募集しています。