BacklogからメンションでSlackのチャンネルに通知する方法

※この記事にはアフィリエイト・リンクが 含まれている場合があります。

プロジェクト管理ツールのBacklogとコミュニケーションツールのSlackを効果的に連携させることで、チーム全体の生産性を大幅に向上させることができます。しかし、Backlogの標準連携機能では、すべての課題イベントが通知され、不要な情報に振り回されることも少なくありません。この記事では、Google Apps Scriptを活用して、メンション通知を特定のSlackチャンネルに自動で送信する方法を解説します。これにより、必要な情報だけをリアルタイムでキャッチし、無駄な作業から解放されることができます。

以下の記事では、パソコンでSlackアプリをインストールされていてアプリを利用している前提の話をしています。

こちらもCHECK!

メンション通知をSlackで受け取り、無駄な通知を削減する

プロジェクト管理ツールとして広く利用されているBacklogと、チームのコミュニケーションを円滑にするSlack。これらのツールを効果的に連携させることで、プロジェクト管理の効率が大幅に向上します。しかし、Backlogの標準機能では、すべての課題イベントがSlackに通知されるため、関係のない情報も受け取ることになります。このような不要な通知は、集中力を乱し、効率を低下させる原因となります。

本記事では、BacklogとGoogle Apps Script(GAS)を利用して、個別のメンション通知のみをSlackの特定のチャンネルで受け取る方法を解説します。この方法により、関係のない通知を削減し、必要な情報だけを効率的にキャッチできるようになります。

現状の課題: 不要な通知による効率低下

BacklogとSlackの連携は、特定のチャンネルに課題の追加や更新、コメントなどのイベントを通知する設定が可能です。例えば、Backlogで課題が更新されたときや、新しいコメントが追加されたとき、その内容がSlackに自動で通知されます。

BacklogのSlack連携機能。選択したイベントがSlackの特定チャンネルに通知される。

しかし、実際の運用ではすべてのイベントが通知されるため、自分に関係のない課題やコメントが頻繁に流れてきてしまいます。これにより、必要な情報を見逃してしまったり、関係ない情報に時間を割いてしまったりといった問題が発生します。しまいには、そのSlackチャンネルをミュートすることになり、本来達成したことから遠ざかってしまいます。

実際に必要なのは、自分がメンションされたときのみ、その通知を受け取る機能です。しかし、Backlogの標準機能では、これを実現することができません。そこで、Google Apps Script(GAS)を利用したカスタマイズによって、メンション通知をSlackに連携させる方法を紹介します。

解決策の詳細: Google Apps ScriptとBacklog APIの活用

この問題を解決するために、Google Apps Script(GAS)を活用します。GASを使ってBacklogのAPIと連携し、特定の条件下でのみSlackに通知を送る仕組みを構築します。具体的には、Backlogのwebhook機能を利用して、メンション通知が発生した際にGASで作成したWebアプリがトリガーされ、指定したSlackチャンネルに通知が送られるように設定します。

まず、Google Apps Scriptで通知を処理するスクリプトを作成します。このスクリプトは、Backlogのイベントを受け取り、その内容を解析して、メンションが含まれている場合にのみSlackに通知を送信するようにします。

次に、Backlogのプロジェクト設定でWebhookを設定し、GASで作成したWebアプリのURLを指定します。これにより、Backlogでイベントが発生するたびに、その情報がGASに送信されるようになります。

さらに、Slack側でも、APIを利用して通知を受け取るための設定を行います。これにより、GAS経由で送信された通知が、Slackの特定のチャンネルにリアルタイムで表示されるようになります。

手動作業のポイント: Googleシートでのメンバー紐づけ

BacklogとSlackは異なるサービスであるため、メンバーの自動紐づけ機能がありません。そのため、このメンション通知を正確に機能させるためには、Googleシートを利用して手動でメンバーを紐づける必要があります。具体的には、BacklogのメンバーIDとSlackのユーザーIDをGoogleシートにリストアップし、これを基にGASがメンション通知を適切に処理できるようにします。

この手動作業は初期設定時に一度行えばよいものですが、メンバーの追加や変更があった場合には都度更新する必要があります。こうした手作業が必要であることを理解しておくことが重要です。

// Backlogからメンション付きのコメント通知を受ける
function doPost(e) {
  const json = JSON.parse(e.postData.contents);
  let comment = json.content.comment.content;
  let slackMentionNames = getSlackMentionNames(comment);
  let commentUrl = "https://your_domain.backlog.com/view/" + json.project.projectKey + "-" + json.content.key_id + "#comment-" + json.content.comment.id

  sendToSlack(comment, slackMentionNames, commentUrl, json.createdUser.name);
}

// Backlogのメンション名とSlackのメンション名を紐づける(複数メンションに対応可)
function getSlackMentionNames(comment) {
  const users = getUserObjects();

  let slackMentionNames = [];
  users.forEach(u => {
    if (comment.includes(u.BacklogMentionName)) {
      slackMentionNames.push(u.SlackMentionName);
    }
  });

  return slackMentionNames;
}

// Backlogのコメント内容を変換されたSlackメンション付きでSlackのチャンネルに通知する
function sendToSlack(comment, slackMentionNames, commentUrl, commentedUser) {
  if (slackMentionNames.length == 0) { return; }

  let slackApp = SlackApp.create("xoxb-xxxxx");
  let channelId = "your_send_channel_name"; // 通知したいチャンネル
  let mentions = "";
  if (slackMentionNames.length === 1) {
    mentions = slackMentionNames;
  } else {
    mentions = slackMentionNames.join(' ');
  }

  console.log(slackMentionNames.length);
  let url = commentUrl;

  const message =
    `${mentions} \n` + 
    `${commentedUser}さんがコメントしました。 \n` + 
    `------------------------------------ \n` +
    `${url} \n` + 
    comment;

  slackApp.postMessage(channelId, message);
}

// BacklogとSlackのメンションを紐づけたシートから紐づけユーザーリストを取得する
function getUserObjects() {
  const sheet = getSheet();
  // 二次元配列を取得する
  const values = sheet.getRange(2,3,sheet.getLastRow()-2, sheet.getLastColumn()-2).getValues();
  // オブジェクトにする
  const [header, ...records] = values;  //1行目がヘッダー、以降がレコード
  const users = records.map(
    record => record.reduce((acc, value, index) => {
      acc[header[index]] = value;
      return acc;
    }, {})
  );

  return users;
}

// BacklogとSlackのメンションを紐づけたシート取得
function getSheet() {
  let spreadsheetUrl = 'your_slack_name_sheet_URL'; // BacklogのメンションとSlackメンションを紐づけたシートのURL
  let sheetName = 'list'; // 書き込みたいシートの名前
  let spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
  return spreadsheet.getSheetByName(sheetName);
}

効果と利便性: 通知の効率化とリアルタイムコミュニケーションの促進

このGASを経由したメンション通知の仕組みを導入することで、Slack上でリアルタイムに重要な通知を受け取れるようになります。これにより、Backlogの課題リンクを手動でコピー・ペーストする必要がなくなり、業務効率が大幅に向上します。

また、メンション通知がリアルタイムで行われるため、チーム内でのコミュニケーションが円滑になり、素早い対応が可能になります。これにより、プロジェクトの進行がスムーズになり、関係者全員が必要な情報をタイムリーに取得できるようになります。

Backlogのチケットにコメントした状態
Backlogでメンションコメントした内容がSlackに通知されるイメージ

実際に現場で通知されたSlack側の通知情報はこちらです。Backlog側でコメントフォームから複数の関係者にメンションつけてコメントすると、Slack側でも対象の関係者にメンションが付き、通知されます。各関係者は通知チャンネルの通知設定で「メンション」(英語表記なら「Mensions」)に設定しておけば、自分に関係する通知のみチャンネルに赤いバッチが付き、PC上でメンションが通知されます。

ChatGPTを使った効率的なGAS作成

Google Apps Scriptの作成は、技術的な知識が必要ですが、ChatGPTを利用することで、スクリプト作成を効率的に進めることができます。ChatGPTに対して具体的な指示を出すことで、コードのテンプレートを生成させ、それを基に自分で微調整を加えることで、目的の機能を実装できます。これにより、スクリプト作成のコストを大幅に削減し、外部に依頼することなく、自分で迅速に実装が可能です。

ChatGPTを利用して作成したGASは、完全に自動で実行され、特定のメンション通知のみをSlackに送ることができます。これにより、プロジェクト管理がさらに効率化され、不要な作業を削減することができます。

結論: GASで実現する効率的な通知管理

BacklogとSlackを連携させる際に、Google Apps Scriptを活用してメンション通知をSlackに送信する方法を導入することで、業務効率が大幅に向上します。不要な通知に煩わされることなく、必要な情報だけをリアルタイムで受け取ることができ、チーム全体の生産性が向上します。

この方法を導入することで、BacklogとSlackをより効果的に活用し、プロジェクト管理の精度を高めることが可能です。手動作業が一部必要ではありますが、その分の効果は十分に得られるでしょう。ぜひ、この手法を取り入れて、日常業務の効率化を図ってください。

GASの設定などはこちらを参照!

-未分類

無料トライアルあり!Backlogを使ったタスク管理が、どうして成果を出せるのか? シンプルなUIと実績ある活用方法を詳しく解説します。
成果を出す管理方法を詳しく知る
無料トライアルあり!チームの時間とコストを効率的に削減!
詳細はこちら