35歳からの中二病エンジニア

技術や時事ネタ、鉄道・社寺巡礼など趣味の話を綴ります。

ChatWork向けIncoming Webhooks的なものを作った

ウェブサービスでアイコンがデフォルトのアカウントはみんなじゃがいもだと思っているaikawameです。ごきげんよう

はじめに

僕の勤めている会社では、社内チャットにChatWorkを利用している。「ChatWorkが許されるのは小学生までだよねー」とかSlack派に煽られそうだけれども、僕自身はそんなに嫌いではない。ただ、Slackに比べて欲しい機能が足りていないのは事実だったりする。

その中でも特に、会社のメンバー間でも不満だったのが、Incoming Webhooksが無いということだった。これだけのためにエンジニアはSlackも使うという残念な状況が出来てしまっていた。

そこで、似たような仕組みを誰か作っていないかと探してみたが、要件を全て満たしてくれるようなイケてる子は見当たらなかったので、無いものは作るの精神でサクッと作ってみた。

作ったもの

出来上がったものはこちら。

github.com

標準でGitHub、Backlog、ScrapboxとSlackのAttachment structureに対応しつつ、基本的に設定とテンプレートの追加だけで対応サービスを増やしていけるので、サクッと作った割には良い感じになったと思う。

フレームワークとして採用したのはChaliceAWS Lambdaを使ってAPI環境を実行できるサーバーレスフレームワークだ。Lambda界隈だとServerless Frameworkが強いとは思いつつも、個人的にnodeよりはPythonの方が好きなので、こちらを選んだ。というかLambdaはPythonでしか使ったこと無い…。

苦労したこと

Chalice周りとか、普通の実装については割とすんなり行ったと思う。面倒だったのは主にWebhookで送られてくるJSONの解析や、テンプレートのフォーマット周りだった。

前者については、これはもう地道にやるしかなかった。ScrapboxはSlackのAttachment structureに対応していたし通知も1種類だったから一瞬だったけれども、GitHubとBacklogは曲者過ぎた。さすがに全てのパターンを網羅するのは辛いので、とりあえず業務で使っている部分だけテンプレートを用意して、あとは無視する形でお茶を濁している…。この辺、Webhookの共通フォーマットとか作ってもらえないものだろうか、Attachment structureみたいに。

後者については、ChatWorkで使える装飾が少なすぎて辛かった。Attachment structureでは色やリンクを指定できる所をどうやって表現しようとか、段々と考えるのが面倒になってきたので、とりあえず最低限タイトルと本文だけでいいやという感じに落ち着いた。

おわりに

会社でX2ChatWorkを導入してみた限りでは概ね好評で、既存のSlackへの通知はほぼChatWorkに置き換えた。この勢いならばSlackの撲滅は近そうだ。もし、ChatWorkを使いつつIncoming Webhooks的な仕組みも欲しいという方がいれば、是非とも試していただきたい。そして星くれ。