目次
はじめに
こんにちは、TIGコアテクノロジーユニットの高橋・小松です。
皆さん、Slack使っていますか?
Futureでは約一年前にコミュニケーションツールとして採用され社内外のコミュニケーションにSlackを使うことも増えました。そしてプロジェクト管理で利用しているRedmineは相変わらず現役です。個人的にはRedmine4.2のリリースを心待ちにしています。
さて、そうなるとRedmineからSlackへ通知したくなりますね。
以前RedmineからGoogle Hangouts Chatへ連携するプラグインを紹介しましたが今回そのSlack版を作成しましたので紹介します!
既存redmine slackプラグインとの違い
Github上にredmine-slackプラグインがすでに公開されていますが、題名にもある通り今回開発したRedmine Slack IntegrationプラグインはRedmineチケットごとにSlackスレッドを分けて通知してくれます。
これによりスレッド内で過去の更新を確認でき、議論しやすくなります。またプロジェクトやユーザごとに通知を無効化できる機能もつけています。
Redmineでチケット起票や更新のイベントが発生した際に、自動的にSlackチャンネルにメッセージが送信されます。
主な機能
- RedmineチケットごとにSlackスレッドを分けてチケットの内容/各ステータス更新を通知します。
- プロジェクト単位で、Slack通知先チャンネルの設定ができます。
- 見落とし防止のため、Slackチャンネル通知(Also send to)も行います。
- 親子関係プロジェクトで、指定した子プロジェクトだけのチケット更新を通知対象外として設定できます。
- 指定したユーザのチケット更新を通知対象外として設定できます。
実装のポイント
Google HangoutsとSlackではスレッドIDの管理方法が少々異なります。
Google Hangoutsは任意の値をスレッドIDとできるためRedmineチケットURLのハッシュ値をスレッドIDとしました。
# Google Hangouts通知のスレッドIDの設定部分抜粋 |
一方SlackはスレッドIDをRedmine側から指定できずSlack側で生成されたスレッドIDを取得する必要があります。
そのためSlackApp(インストール方法は後述)からスレッドIDの戻り値を取得しRedmineチケットのカスタムフィールドでスレッドIDを管理することにしました。
これによりチケット新規作成時はスレッドIDを取得するため同期http通信となりますがチケット更新時は非同期http通信でSlackへ連携することでパフォーマンスが落ちにくくなります。
# Slack通知部分抜粋 |
インストールと設定
1. インストール
READMEを参照してください。
(フューチャー社内連絡)利用の際はコンシェルジュで依頼ください
2. Slack APP新規作成
前提条件
- Slack APP作成するユーザはSlackチャンネルに書き込みの権限が必要です。
Slack URLを開く
Slack App作成
- 画面右上の「Create New App」をクリックしてください。
Slack App基本情報の入力
- 立ち上がったポップアップへ以下情報を入力して、「Create App」をクリックして、保存してください。
項目名 値 説明 App Name Slack App名 Development Slack Workspace 連携するSlackチャンネルのワークスペース
- 立ち上がったポップアップへ以下情報を入力して、「Create App」をクリックして、保存してください。
「OAuth & Permissions」画面を開く
- 画面の左側メニューの「Features」->「OAuth & Permissions」をクリックしてください。
Scopes追加
- 画面の中央に「Scopes」->「Bot Token Scopes」->「Add an OAuth Scope」をクリックして、chat:write、chat:write.customize、chat:write.publicのscopeを追加してください。
Bot User OAuth Token作成
- 画面の上に「OAuth Tokens & Redirect URLs」->「Install to Workspace」をクリックしてください。 立ち上がったポップアップの「許可する」をクリックして、Bot User OAuth Tokenを作成します。
Bot User OAuth Tokenをコピー
- 「OAuth Tokens for Your Team」-> 「Bot User OAuth Token」のトークン内容をメモしてください(「Copy」をクリック)
3. Redmine設定
3-1. Redmineプロジェクト設定
- Redmineプロジェクト管理者権限があるアカウントでログインしてください。
- プロジェクトの「設定」-> 「情報」の画面を開いてください。
- 「Slack Channel」にSlack通知先チャンネル名を入力してください。
- 「Slack Token」にコピーしたトークン内容を貼り付けてください。
- 「Slack Disabled」を「いいえ」に選択してください。
- 「保存」をクリックして、設定内容を保存してくだくさい。
3-2. 特定子プロジェクトだけ通知を無効
親子関係のRedmineプロジェクトで、子プロジェクトのSlack通知設定情報は親プロジェクトから継承できるため、親プロジェクトでの設定されたSlackチャンネルも通知できます。
一方、特定子プロジェクトだけ通知を無効にすることもできます。
- Redmineプロジェクト管理者権限があるアカウントでログインしてください。
- プロジェクトの「設定」-> 「情報」の画面を開いてください。
- 「Slack Disabled」を「はい」に選択してください。
- 「保存」をクリックして、設定内容を保存してください。
3-3. 特定ユーザだけ通知を無効
特定ユーザからのチケット更新の通知を無効にしたい場合は「個人設定」の「Slack Disabled」を「はい」にしてください。
例えば、ビルドユーザで大量のREST-APIを利用するシーンなどを想定しています。
設定はビルドユーザでログインしてビルドユーザの個人設定画面で行ってください。
動作確認
チケット新規起票
チケット更新
Slackスレッドで議論
一例ですが、Redmineの更新を受けてSlackスレッドで議論することで対応をスムーズに進めることができます。
おわりに
我々のチームではRedmine Slack IntegrationプラグインでSlackのスレッドがとても管理しやすくなりました。
Githubからダウンロード可能ですのでぜひお試しください。Pull Requestもお待ちしております。
このプラグインがスムーズなプロジェクト運営の一助になれば幸いです。
TIGコアテクノロジーユニット
TIGコアテクノロジーユニットでは、現在チームメンバーを募集しています。
私たちと一緒にテクノロジーで設計、開発、テストの高品質・高生産性を実現する仕組みづくりをしませんか?
興味がある方はお気軽に技術ブログTwitterや会社採用HPへ、連絡をお待ちしております。