お疲れ様です。
データアナリティクス部(以下、DA部) 樫山です。
先日、Google Apps Script(以下、GAS)を用いて、BacklogからGoogle Chat Space(以下、スペース)への通知機能を作成しました。
今回ご紹介する機能は実装が非常にシンプルで、「Backlogで課題管理」を行いながら「スペースでチームチャット」を活用しているプロジェクトであれば、すぐに活用できるものだと思います。

会社のプロジェクトでは、日常的なコミュニケーションにはスペースを、課題管理にはBacklogを活用していました。
当初は標準の連携機能を使ってBacklogからの通知をスペースに飛ばしていましたが、運用を続ける中で以下のような「物足りなさ」を感じるようになりました。
・通知の取捨選択が難しい: 連携をONにするとプロジェクトの全通知が届いてしまい、重要な情報が埋もれやすい。
・タイミングのコントロールができない: 通知のトリガーがBacklog上の操作(更新など)に限られるため、「毎週決まった時間にリマインドしたい」「期限が近いものだけを通知したい」といった柔軟な運用ができない。
今回紹介する方法
これらの課題を解決するため、以下のフローで通知システムを構築しました。
1. GASでBacklogのデータを取得し、スプレッドシートに書き出す。
2. GASでスプレッドシートのデータを条件(種別や期限)でフィルタリングし、スペースに通知する。
3. GASのトリガー機能で、実行タイミングを自動化する。
これにより、「毎週月曜日の午前9時過ぎに、DA部の未完了課題だけをリマインドする」といった自由なカスタマイズが可能になりました。
実装にあたり、以下の情報が必要になります。
まずはBacklogのAPIを叩いて、課題一覧を取得しスプレッドシートに展開するスクリプトを作成します。
設定手順
1. スプレッドシートを作成し、メニューの [拡張機能] > [Apps Script] を選択します。
2. エディタが開いたら、新しいスクリプトファイルを作成し、以下のコード(関数名:FromBacklog)を貼り付けます。
3. 「設定エリア」の各項目をご自身の環境に合わせて書き換えて保存し、実行します。
/**
* Backlogから課題一覧を取得し、スプレッドシートに書き出す
*/
function FromBacklog() {
// --- 設定エリア ---
const API_KEY = 'YOUR_BACKLOG_API_KEY'; // ここにBacklogのAPIキーを貼り付け
const SPACE_ID = 'YOUR_SPACE_ID'; // ここにBacklogのスペースIDを貼り付け
const DOMAIN = '.backlog.com'; // ここにBacklogのドメインを貼り付け
const PROJECT_KEY = 'PROJECT_KEY'; // ここにBacklogのプロジェクトキーを貼り付け
// 1. プロジェクト情報を取得してIDを特定
const pUrl = `https://${SPACE_ID}${DOMAIN}/api/v2/projects/${PROJECT_KEY}?apiKey=${API_KEY}`;
const projectId = JSON.parse(UrlFetchApp.fetch(pUrl).getContentText()).id;
// 2. 課題を取得
const url = `https://${SPACE_ID}${DOMAIN}/api/v2/issues?apiKey=${API_KEY}&projectId[]=${projectId}&count=100&statusId[]=1&statusId[]=2&statusId[]=3`;
const response = UrlFetchApp.fetch(url);
const issues = JSON.parse(response.getContentText());
// 3. 取得したデータを整理して配列に入れる
let allRows = [];
issues.forEach(issue => {
allRows.push([
issue.summary, // 件名
issue.status.name, // ステータス
issue.issueType ? issue.issueType.name : '', // 種別
issue.assignee ? issue.assignee.name : '未定', // 担当者
issue.dueDate ? issue.dueDate.substring(0, 10) : '', // 期限日
`https://${SPACE_ID}${DOMAIN}/view/${issue.issueKey}` // URL
]);
});
// 4. スプレッドシートに書き出す
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clearContents();
sheet.appendRow(['件名', 'ステータス', '種別', '担当者', '期限日', 'URL']);
if (allRows.length > 0) {
sheet.getRange(2, 1, allRows.length, allRows[0].length).setValues(allRows);
sheet.getRange(2, 1, allRows.length, allRows[0].length).sort({column: 5, ascending: true});
}
}
下記画像のように、スプレッドシートに課題一覧が正しく出力されていれば成功です。

次に、シートに書き出されたデータの中から必要なものだけを抽出し、スペースへ通知するスクリプトを作成します。
設定手順
1. 新しいスクリプトファイルを作成し、以下のコード(関数名:ToSpace)を貼り付けます。
2. 「設定エリア」のWEBHOOK_URLをご自身の環境に合わせて書き換えて保存し、実行します。
/**
* スプレッドシートから特定のタスクを抽出してGoogle Chatへ通知する
*/
function ToSpace() {
// --- 設定エリア ---
const WEBHOOK_URL = 'YOUR_WEBHOOK_URL'; // ここにスペースのWebhookURLを貼り付け
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
// 1. データがない場合の処理
if (lastRow row[2] === 'DA部');
// 3. 通知メッセージの組み立て
let messageBody = "";
if (targetTasks.length === 0) {
messageBody = "【週次通知】現在、対象の未完了課題はありません。";
} else {
messageBody = "【週次通知】対応が必要な課題一覧\n\n";
targetTasks.forEach(row => {
const [subject, status, type, person, dateValue, url] = row;
const ymd = dateValue ? Utilities.formatDate(new Date(dateValue), "JST", "yyyy年MM月dd日") : "未設定";
messageBody += `• \n`;
messageBody += ` 期限:${ymd} / 担当:${person} / 状況:${status}\n\n`;
});
}
// 4. Google Chatへ送信
postChat(WEBHOOK_URL, messageBody);
}
/**
* チャット送信用の共通関数
*/
function postChat(url, text) {
const payload = { "text": text };
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
下記画像のように、通知したい課題がスペースに通知されていれば成功です。
※今回は[種別 = DA部]のみが通知されるようになっています。

最後に、作成した関数を自動実行する設定を行います。
これで、下記画像のように毎週月曜日に最新の課題状況が自動的にスペースへ届くようになります!

今回は、私の所属するプロジェクトの課題に合わせて、GASを用いたBacklogとスペースの連携カスタマイズをご紹介しました。
プロジェクトやチームの体制によって最適な運用方法は異なりますが、「もっと効率よくできないか」「タスクを軽量化できないか」という改善の意識を持つことが何よりも重要だと感じています。
今は、改善のアイデアさえ思いつけば、プログラムの実装部分は生成AIが強力にサポートしてくれる時代です。つまり、改善は私たちの「モチベーション」と「行動力」次第で実現できる時代になりつつあると感じています。
日頃お客様の課題解決に注力している私たちだからこそ、自分たちの足元にも目を向け、より良い環境を自らの手で作っていく姿勢を大切にしていきたいですね。
本記事が、皆さんのチーム作業向上のヒントになれば幸いです。
コメント