Future Tech Blog
フューチャー開発者ブログ

RedmineからGoogle Hangouts Chat へ連携するプラグインを作成しました!


はじめに

こんにちは。TIG(Technology Innovation Group)所属の高橋です。

みなさん、課題管理システムは何を使っていますか?

弊社ではほぼ全てのプロジェクトでRedmineを採用しており、毎日1000以上のユーザが利用しています。これにより管理の標準化と品質向上を図っています。

なお、2019年2月にデブサミで発表しておりますのでこちらの記事も併せてご覧ください。
https://future-architect.github.io/articles/20190607/

一方、ビジネスツールとしてはG-Suite(Google Drive,Spreadsheets,Hangouts Chat等)を全社的に利用しています。コミュニケーションはGoogle Hangouts Chatで取ることが多くなり、メールの送信件数も従来から約25%減少しました。

今回RedmineからGoogle hangouts chatへ更新内容を連携するプラグインを作成しましたので紹介させていただきます。

背景

Redmineの更新をメールで通知する運用を行っていましたが、以下のような課題がありました。

・Redmineの通知メールが多くて結局見ていない
・Redmineチケットに書くほどでもないが内部で少し相談したいことがある
・対応すべきチケットが放置されていた

Google Hangouts Chatでのコミュニケーションが増えるにつれメールのやり取りが相対的に減り、メールではなくGoogle Hangouts Chatへ通知されることが望まれるようになりました。

プラグインの調査

Redmineは様々なプラグインが公開されており、Google Hangouts Chatへ通知するプラグインも既に公開されていました。
https://github.com/patope/redmine-hangouts-chat

このプラグインは以下のような仕様でした。
・Redmineチケットのリンクのみ通知する
・チャットルームのスレッドをRedmineチケットの更新ごとに分けて通知する

チケット内容は通知しないためRedmineへ内容を確認しに行く必要があり、更新ごとにスレッドが分かれるためチャットルームでチケットごとの流れを把握することが難しく、要望とはマッチしませんでした。

作成したプラグインの概要

Redmine Google Hangouts Chat Plugin
https://github.com/future-architect/redmine_hangouts_chat_integration

​Redmineでチケット起票や更新のイベントが発生した際に、自動的にGoogle Hangouts Chatのチャットルームにメッセージが送信されます。

主な機能

  1. Redmineチケットごとにチャットルームのスレッドを分けてチケットの内容/各ステータス更新を通知します
  2. プロジェクト単位で、チャットルーム通知先の設定ができます
  3. 指定したユーザのチケット更新を通知対象外として設定できます

インストールと設定

インストール

  1. Githubから最新の​「Redmine Hangouts Chat Integration plugin」ソースをダウンロードして、$REDMINE_ROOT/pluginsに展開します
  2. $REDMINE_ROOTの直下で下記コマンドを実行し、インストールします
    $ bundle install
    
  3. カスタムフィールド作成のため、$REDMINE_ROOTの直下で、下記コマンドを実行します
    $ RAILS_ENV=production rake redmine:plugins:migrate
    

Google Hangouts Chat設定

Webhook用URL生成

  1. Hangouts chat ページ最上部にあるグループ名をクリック

  2. 「Webhook を設定」をクリック

  3. 立ち上がったポップアップへ以下情報を入力後、保存をクリック

    • 名前=チャット投稿するBOT名
    • アバターのURL=チャット投稿するBOTのアバター
  4. アイコンをクリックしWebhookURLをコピーします

Redmine設定

各プロジェクト設定

Redmineプロジェクト別にチャットルームを分ける場合はプロジェクト別の設定画面でWebhook URL設定を行います。
Redmineプロジェクト単位にチャットルームをわける必要がない場合は後述。
Redmineプロジェクト別設定は全プロジェクト設定より優先されます。

  1. Redmineプロジェクト管理者権限があるアカウントでログイン
  2. プロジェクトの「設定」の「情報」の「Hangouts Chat Webhook」にプロジェクト別のWebhookURLに貼り付けます

全プロジェクト設定

Redmineプロジェクト単位にチャットルームを分ける必要がない場合はプラグイン設定画面で指定してします。
全プロジェクト同じチャットルームへの通知となります。

  1. Redmine管理者権限があるアカウントでログイン
  2. ページ最上部にある「管理」をクリック
  3. 左側の「プラグイン」をクリック
  4. 「Redmine Hangouts Chat Integration plugin」の「設定」をクリック
  5. 「Webhook」の入力欄に先ほどのWebhookURLを貼り付けます

特定ユーザだけ通知を無効

特定ユーザからのチケット更新の通知を無効にしたい場合は「個人設定」の「Hangouts Chat Disabled」を「はい」にします。  
Rest Api経由でチケットを大量に生成する場合等に特定ユーザの連携を無効化できるようにしています。

使用例

一例ですが、Redmineでチケットが起票され、その対応をチャットルームで話し合い、チケットを更新する、という流れができました。

最後に

今回紹介したプラグインを用いることでRedmineを証跡管理、Google Hangouts Chatをコミュニケーションツール、という形の使い分けがスムーズになりました。社内でも好評利用中です。Githubからダウンロード可能ですのでお試しください。Pull Requestもお待ちしております。