Backlogでは親子タスクの管理が可能ですが、親タスクと子タスクの扱い方やカウント方法に困惑することが少なくありません。本記事では、親子タスクの定義方法と実際のタスク数のカウント方法について、具体的な例を交えて解説します。さらに、BacklogのAPIとGoogle Apps Script(GAS)を活用して、手動作業を自動化する方法を紹介します。
Backlogの親子タスク機能とは?
Backlogはプロジェクト管理ツールとして、タスクに親子関係を持たせることができます。例えば、Aタスクが親タスクとしてあり、BタスクとCタスクがその子タスクとして関連付けられるケースがあります。このような親子タスク構造は、タスクのグループ化や、作業の分割を効率的に行うのに役立ちます。
しかし、この親子関係の定義と表示方法が一部混乱を招くことがあります。具体的には、親タスクであっても、タスクの開始日や期限日などが子タスクと同じように設定されてしまうため、実際の作業量やタスクの進捗を把握する際に、どれが「本当のタスク」かを判断しづらくなることが問題です。
親タスクはカウントしない?子タスクを重視する理由
親タスクはあくまで分類のような役割を持つものであり、実際の作業は子タスクによって進行することが一般的です。そのため、タスクの総数を正確にカウントする場合、子タスクのみをカウントするのが適切です。
例えば、Aタスク(親タスク)にBタスクとCタスク(子タスク)が存在する場合、カウントされるタスクはBとCのみであり、親タスクであるAはカウントされません。しかし、子タスクを持たない親タスクの場合は、それ自体がタスクとしてカウントされます。このように、親子タスクの構造によってタスク数が変動するため、正確なタスクの数を把握するには手動で確認する必要が生じます。
BacklogのUIでは、親子タスクの区別を視覚的に明確に表示することができないため、CSV出力やAPIを活用して外部で処理する必要が出てきます。特に大規模なプロジェクトでは、この手動作業が手間となります。ここで自動化の出番です。
関連: 階層タスクだけでなく、プロジェクト横断しているタスクをみえる化する
APIを活用したタスク管理の自動化
Backlogでは、利用者向けにAPIが提供されています。このAPIを活用することで、親子タスクの数を自動で計算し、スプレッドシート上に出力することが可能です。
利用するAPIとしては、以下が代表的です。
このAPIを使うことで、特定プロジェクト内のタスク情報を取得し、タスクの種類(親タスク、子タスク)や状態(未対応、処理中、処理済み、完了)に応じて正確なカウントを行うことができます。
Google Apps Script(GAS)による自動タスク数計算の実装
ここでは、Google Apps Script(GAS)を使って、BacklogのAPIを呼び出し、特定プロジェクト内のタスクを自動でカウントする処理を解説します。まず、必要な情報として以下が必要です。
- APIキー: BacklogのAPIキーは、APIリクエストを行う際に必要です。スプレッドシートにAPIキーを保存し、それをGASで読み込む方法が推奨されます。セキュリティのため、このスプレッドシートは非公開設定にしてください。
- プロジェクトID: カウントしたいプロジェクトのIDも必要になります。
プロジェクト管理を劇的に効率化!Backlogで実現する自動化と連携
親子タスクの子タスクのみ、親なしで子タスクを持たないタスクのみをカウントする
スプレッドシートに保存する情報
API-KEY
: BacklogのAPIキープロジェクトID
: 計測したいプロジェクトのID
function countBacklogTasks() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Settings'); // APIキーやプロジェクトIDを保存するシート
var apiKey = sheet.getRange('A1').getValue(); // セルA1にAPIキーを保存
var projectId = sheet.getRange('B1').getValue(); // セルB1にプロジェクトIDを保存
var backlogUrl = 'https://{your_backlog_domain}/api/v2/issues?projectId=' + projectId + '&apiKey=' + apiKey;
var response = UrlFetchApp.fetch(backlogUrl);
var tasks = JSON.parse(response.getContentText());
var parentTaskCount = 0;
var childTaskCount = 0;
var noChildParentTaskCount = 0;
tasks.forEach(function(task) {
if (task.parentIssueId) {
childTaskCount++; // 子タスクの場合
} else if (!task.childIssueIds || task.childIssueIds.length === 0) {
noChildParentTaskCount++; // 子タスクを持たないタスク
}
});
Logger.log("子タスク数: " + childTaskCount);
Logger.log("子なし親タスク数: " + noChildParentTaskCount);
}
親子タスクの子タスクのみ、親なしで子タスクを持たないタスクのみをタスクの状態毎にカウントする
利用するデータ
以下が具体的なサンプルデータに基づく正確なタスク情報です。
元データ
- 親タスクAに紐づく子タスク:
- Bタスク (処理中)
- Cタスク (処理済み)
- Dタスク (処理中)
- 親タスクを持たない子タスクなしのタスク: 4つ
- Eタスク (処理中)
- Fタスク (未対応)
- Gタスク (未対応)
- Hタスク (完了)
結果
- 全タスク数: 7
→ このプロジェクト全体で管理しているタスクの数は7つです。 - 子タスクの数: 3
→ 子タスクとしてカウントされるタスクは3つ(B, C, D)です。 - 親タスクを持たないタスク(子なしタスク)の数: 4
→ 子タスクを持たないタスクは4つ(E, F, G, H)です。
タスクの状態ごとのタスク数を集計し、Google スプレッドシートに出力するスクリプトです。Backlog APIを利用して取得したタスクデータをもとに、状態ごとのタスク数を計算します。
function countTasksByStatus() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Settings'); // APIキーやプロジェクトIDを保存するシート
var apiKey = sheet.getRange('A1').getValue(); // セルA1にAPIキーを保存
var projectId = sheet.getRange('B1').getValue(); // セルB1にプロジェクトIDを保存
var backlogUrl = 'https://{your_backlog_domain}/api/v2/issues?projectId=' + projectId + '&apiKey=' + apiKey;
// Backlog APIからデータを取得
var response = UrlFetchApp.fetch(backlogUrl);
var tasks = JSON.parse(response.getContentText());
// 状態ごとのタスク数を集計するためのオブジェクト
var taskStatusCount = {
"未対応": 0,
"処理中": 0,
"処理済み": 0,
"完了": 0
};
// タスクの状態ごとにカウント
tasks.forEach(function(task) {
if (taskStatusCount.hasOwnProperty(task.status.name)) {
taskStatusCount[task.status.name]++;
}
});
// スプレッドシートに集計結果を出力
var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TaskCounts');
if (!outputSheet) {
outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('TaskCounts');
}
// シートをクリア
outputSheet.clear();
// ヘッダー行を書き込み
outputSheet.getRange(1, 1).setValue("状態");
outputSheet.getRange(1, 2).setValue("タスク数");
// 集計結果を書き込み
var row = 2;
for (var status in taskStatusCount) {
outputSheet.getRange(row, 1).setValue(status);
outputSheet.getRange(row, 2).setValue(taskStatusCount[status]);
row++;
}
Logger.log("状態ごとのタスク数集計完了");
}
GASコードのポイント
- APIキーやプロジェクトIDの読み込み: スプレッドシートの「Settings」シートからAPIキーとプロジェクトIDを読み込みます。
- Backlog APIの呼び出し:
UrlFetchApp.fetch
を使ってBacklog APIからタスクデータを取得します。 - 状態ごとのタスク集計: 取得したタスクデータをもとに、タスクの状態(未対応、処理中、処理済み、完了)ごとにカウントを行います。
- 結果の出力: 集計したタスク数を新しい「TaskCounts」シートに出力します。既存のシートがある場合はクリアしてから書き込みを行います。
セキュリティの注意点
- APIキーとプロジェクトIDの管理: APIキーやプロジェクトIDはスプレッドシート内で非公開設定にし、適切に管理する必要があります。スプレッドシートは必ず共有設定を全体公開しない設定にしてください。
このスクリプトを使えば、Backlogのタスクを自動的に集計し、スプレッドシートに出力できます。