Article Image

SlackにRedmineのチケット更新を通知する

インフラ hironemuhironemu

ここ数ヶ月弊社では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についてはまた別の機会に・・・。

Tags: