web制作の隙間問題

ウェブ制作で気づいたこととかを殴り書き。中の人は、デザイン、コーディング、ちょっとプログラミング、企画・設計・運用・SEO屋さん。

Redmineの更新を複数のSlackチームにポストしたい時〜(redmine-slack不使用)

会社ではタスク管理に Redmine を使っております。。
一時期はプロジェクト管理ツールの鬼と化し、ありとあらゆるものを試したけども社内に浸透したのが Redmine と Slack だけ…。

というのも、社内には開発陣とweb詳しくない陣がいて、Redmineは開発陣に浸透(掲示板みたいで馴染みが良かったみたい)、slackはみんなで使えるというのでこの辺で落ち着いた感じです。。

誰でも使えるSlack、すごい。(60代のおじーちゃんにも使えました)

redmine-slackでRedmineとSlackを連携

で、今までRedmineの更新をSlackのチャンネルにポストするために、著名なプラグインredmine-slack」を使っていたのです。

もちろんムダを無くすため、redmineの更新通知がメールで来ないようにして、Slackで一元管理。これで煩雑なメールボックスともおさらば!イェー

メール嫌いなんだよッ(心の叫び)

ある日複数のSlackチームを運用することに

ところで、先日、タッグを組んでいる会社さんとSlackでやり取りすることになりました。言い出したの私だけど。

ちょっとした疑問とかってメールで聞きづらいじゃないっすか。
コミュニケーションの障壁を下げることで意思疎通をスムーズにしたかったわけです。

ところがーッ

redmine-slackはSlackの複数のチームをまたげない。

redmineでは他社さんガンガン呼べるんですが、Slackではチャンネル単位で人を呼ぼうなんてそうはいかない(お金積めばできるけど!お金ある人はここから先読む必要無しですw)。

そこで協業用のチームをもう一つ作ったんです。
ところがあまりニーズがないからか、redmine-slackには複数チームへのポスト機能がないんですネ。

redmine-slackのGithubのIssuesでも「Sending notifications to multiple teams」なんていうお願いがあったんですが、結論としては今は対応してないと。誰かプルリクしてくれと作者さんもおっしゃってるものの、ごめんなさい ruby わかんない…(´Д⊂ヽうぐぐ。

というわけでなんとか方法を考えてみる。

結論から言うとwebhookプラグインとZapierを使おう!

Zapierとはかの著名なwebサービス、IFTTTのよーなものです。
違いはZapierの方がもっと色々できる。一つの連携サービスのアカウント数も制限無いですし。IFTTTは複数アカウント使えないからちょっと不便。

とはいえ当然ながら無料でできる範囲は限られているので、今回はその中でやりたいと思います(貧乏根性)

ZapierはIFTTTと同じように、あらかじめいろんなレシピ(Zap)が用意されておりますが、今回はオリジナルレシピ(Zap)を作ります!

試したのは以下。

  1. redmineRSSをSlackに投げるZap
  2. redmineのメール通知機能を利用して、通知メアドから来たメールをSlackに投げるZap(自分のメールボックスが溢れるのは嫌だから専用のメアドを用意してw)
  3. redmineの謹製jsonをSlackに投げるZap
  4. redmineにwebhookプラグインを入れてZapierのwebhook機能を使ってSlackに投げるZap

で、1、2はタイムラグがあるから今回のケースには合わなかったかな。。そらZapierさんも毎秒メールなんかチェックしてらんないよね…

webhookという仕組みについては全然知らなかったんですが、webhookだと秒で連携されるみたいなので残るは3、4。(とゆーかredmine-slackもwebhookを使ってるんです…よね?)

redmineの謹製jsonをSlackに投げる方法やいかに。

結論から言うと、Redminejson形式がZapierさんと相性が悪く断念。

受け口であるZapierのwebhook機能、3つの方法を選べるんだけど、そのうちのRetrieve PollというやつにjsonのURLをぶっこむといい感じでjsonの情報を抜き出してくれて、それをZapierのSlack設定のとこでテンプレートに取って来た情報をまぶして完成!となるはずだったんですが…思うように情報が取れず。

ちなみにredminejsonは、redmineのデモサイトさんをお借りすると、

こんな感じ。プロジェクト単位のjsonにjournalの情報とか全部載ってて、なおかつ1つのissuesの中に全部格納されてなければなぁ…という感じ。さよなら謹製さま…

【解決】Redmineにwebhookプラグインを入れてZapierのwebhook機能を使ってSlackに投げる!

これです。これがオススメ。
Redmineにwebhookを追加するプラグインRedmine WebHook Plugin を作ってらっしゃる方がおりましたんで、早速Redmineにインストール。(redmine-slackは自分で入れたんだけど、もうとっくにやり方忘れたんでエンジニア様にお願いしました❤︎)

なお、jsonのサンプルはこの記事よりもGithubの方が新しいと思われるのでそちらをチェックしてねー

d.hatena.ne.jp

手順としてはこう。

  1. プラグインをインストール。
  2. ZapierのMake Zap! でwebhookを選び、Catch Hookを選択。
  3. webhook URLが発行されるのでコピー(https://hooks.zapier.com/hooks/catch/000000/000000/的なやつ)。
  4. Redmineのプロジェクトの設定画面にwebhook URLをペーストして保存。
  5. Redmine何かしらチケットを発行したあと、webhook URL画面に戻って[Continue]ボタンを押すとZapierでと連携されます(これがわかんなくてZapierのサポートに聞いたらすぐ返事くれた❤︎)。
  6. Zapierでwebhookのテストが通ったら、データが取得できているので、次のステップでSlackを選び、ポストしたい内容になるようにテンプレートにデータをまぶす。

以上です!

かるーく流れをスライドにして貼っときますねー

...

さらにフィルタを間に入れて条件分岐してslackへのポストを美しく!

さらに美しくするなら、webhook設定→Slack じゃなくて、 webhook設定→フィルタをかます→Slack がおすすめ

フィルタでチケット(Issue)が openedの時、updatedの時と分けると、
opend(新規チケット)の時はチケットの概要文をテンプレに入れる。
updated(コメントが入った・担当が変わったなどの更新)の時はjournal(コメント)をテンプレに入れる。

Issue Status Nameが「終了」の時も追加して、テンプレートの先頭に🎉とかつけてほっこりさせるw。

などなど色々できます!

フィルタ設定画面はこんな感じ。

f:id:bissybissy:20170705041331j:plain

で、こんな3つのZapができました。(ちなみにこの3つのzapは1つのzapにまとめることもできるんですが、4ステップ以上工程があると有料になるので分けました…グフー)

f:id:bissybissy:20170705041435p:plain

で、こんな感じでポストされます!めでたしめでたし〜

f:id:bissybissy:20170705041851p:plain

テンプレ書くのめんどくさい人がいたら、言ってくれたら数字のとこ書き換えるだけで使えるのを用意します〜(実際ここが一番めんどくさかったし)

余談 〜もしも課金ができたなら♪〜

Slackに課金したら…

Slackに課金できたらそもそもredmine-slackだけでいいんじゃないかという話は冒頭にもしましたね…Slackのスタンダードプランのお値段は、¥850/月×人数です。

Zapierに課金したら…

13.75ドル/月です。円にすると今のところ¥1,557/月。人数とかは無いです。
Multi-Step Zapsだけが使えたらいいんで¥500くらいのプラン無いかな…(Zapierのプランのページ

Zapierに課金できたら、1Zapに何工程も突っ込めます。
しかも、ZapierのSlackの設定に用意してあるthread(スレッド機能)もタイムスタンプを基準に作れるようになります。これはredmine-slackには無い機能。これができたらSlackもスッキリ✨

Issue created on の日時を基準にするといいと思います。が、この形式が 2017-07-04T20:05:14.314Z とかのため、これをZapierのFormatterでtimestamp形式に変換してあげないといけません><

変換すると 1499023643 になるので、これをslackのthreadのとこに入れてあげるといいと思われます。これで1工程増える…ので有料じゃ無いと無理なんですねー(テストで作ることまではできますよ〜)

くわしくは以下のリンクをご参照のこと。

Formatter by Zapier - Integration Help & Support - Zapier

イメージとしてはこんな感じです。

  1. Formatterで時間をtimestampに変換。f:id:bissybissy:20170705045557p:plain
  2. Zapierのslackの設定画面にformatterで作り変えたtimestampを入れる。

    f:id:bissybissy:20170705052926p:plain

…とまぁこれで上手く行くはずだったんですが最後でエラー出ちゃったなー。なぜかなー。今世界時計見たら、Zapierのあるアメリカのマウンテンビューはお昼だったんで、サポートに助けてーって言っておきました。返事が来るといいナ。

 

とりあえずこの辺で。ではね。