
SlackにRedmineのチケット更新を通知する
ここ数ヶ月弊社ではSlackというコミュニケーションツールを使っております。要はチャットなんですが、色々なサービスと連携できたり、コードを貼り付けるときに綺麗に色を付けてくれたり、プログラマには嬉しい機能が沢山あり、社内でもだいぶ浸透してきた感じがあります。プログラマに嬉しいといえば、HipChatもなかなか良かったんですが、見た目やSlackの勢いみたいなもの(個人の感想)から今はこっちをメインで使っています。
さて、Slackは色々なサービスと連携できると言いましたが、Redmineもその一つです。Redmineと連携することで、誰かがチケットを更新するとその内容をSlackのチャネルに流してくれるようになります。例えば、弊社ではHachikin)というサービスを運営しているのですが、このプロジェクト用に#hachikinというSlackのチャネルを作っています。(チャネルとは、ある目的で会話するためのチャットルームのようなものです。)RedmineでHachikinの不具合や機能改善を行うためのチケットを登録・更新すると、#hachikinチャネルに通知され、リアルタイムに作業の状態が分かるわけです。(まぁ、これが多すぎると鬱陶しいという話はありますが、それはまた別の話ということで)
1. Slack側の設定
まず、以下からConfigure Integrationsを選択します。

Add Service Integrations画面の下の方に「Incoming WebHooks」があるのでこれを選びます。

次に、通知先のチャネルを選択します(または新規で作成する場合、そのチャネルの名称を入力します)。ここではすでに登録されている#hachikinというチャネルを追加しています。

Add Incoming WebHookボタンを押すと、次の画面に「Your Unique Webhook URL」というものが表示されます。これは、Redmine側に設定することになりますので、コピっておきます。

最後に、画面下の方にあるIncoming Settingsで、このWebHookの分かりやすい名前を付けておきます。ここではRedmine Hooksとしました。Save Integrationを押して保存しておきます。

これで、Slack側の設定は完了です。
2. Redmine側の設定
Redmineでは、Slack chat plugin for Redmineというプラグインを利用します。まず、以下のようにインストールしましょう。
Redmineのpluginsディレクトリに移動し、git clone
してきます。
$ cd /your_redmine/plugins
$ git clone https://github.com/sciyoshi/redmine-slack.git redmine_slack
redmine_slackディレクトリ移動してbundle install
します。
$ cd redmine_slack
$ bundle install
ここでRedmineを再起動しておきます。
次に、Redmineプラグインの設定を行います。これは、プラグインの設定画面があるのでそちらから行います。
まず、Redmineの「管理」から「プラグイン」を選択します。以下のようにRedmine Slackが表示されていると思うので「設定」をクリックします。

次に、以下のように内容を入力します。

- Slack API URL – SlackのIncoming WebHookを作成した時に表示されたURLをここに指定します
- Slack Channel – ここでは「-(ハイフン)」を指定しています。これについてはあとで説明します。
- Slack Icon – アイコンのURLを指定します。ここではデフォルトをそのまま利用します。
- Slack Username – Slackにメッセージを投稿する際のユーザ名を指定します。
Slack Channelで「-」を指定しているのは、Redmineのプロジェクトごとに指定したSlackのチャネルへ通知を行うためです。逆に、ここで「#hachikin」を指定すると、すべてのプロジェクトの通知が#hachikinにくるようになります。
プロジェクトごとに通知させたい場合は更に、上の画像にある「project custom field」をクリックしてカスタムフィールドを追加する必要があります。
以下のように「名称」にはSlack Channel
と指定します。この名前は重要なので間違わないように注意してください。

最後に、Redmineのプロジェクトの「設定」に移動します。以下のようにSlack Channelが表示されているはずなので、チャネル名「#hachikin」を設定して保存します。

以上で完了です。
3. 連携後
Redmineの「Hachikin」プロジェクトでチケットが追加・更新されると以下のようにSlackの#hachikinチャネルへ通知されるようになりました。

余談
このRedmine連携の場合は外部のサービス(Redmine)からSlackに通知するようなイメージで動作しますが、逆にSlackから外部のサービスへ通知を行うこともできます。これらはSlackのIntegrations設定のOutgoing WebHooksやSlash Commandというサービスを使うことで実現できます。
例えば、Hachikinのデプロイを行うコマンドをSlash Commandsで実現した場合、以下のようなコマンドをSlackから入力することで外部のデプロイサービスと連携し簡単にデプロイを行えるようになります。
/hachikin production deploy
夢が広がりますね。どう広がるかというと、こちらの記事を見るといいかもしれません。チームの効率を最大化!nanapi流ChatOpsの取り組み
Slash Commandについてはまた別の機会に・・・。