最近、開発チームの生産性向上を目的として、
開発状況の可視化に携わる機会がありました。
開発の生産性を測る指標は様々ありますが、目的により好きなものを選べばいいと思います。
ただし、それを測ること自体に工数やランニングコストがかかっていては本末転倒ですよね。
今回は、自分で勝手に決めた以下の要件を念頭に、
BacklogとGASで開発生産性の計測を自動化した話を書きます。
- 工数低い
- 汎用性高い
- 無料
- かんたん
#Backlog APIを使えるようにする
Backlogのアカウント無い方は登録してください。
30日無料ですし、無料期間過ぎてもフリープランがありますよ。
Backlog フリープラン
「個人設定」→「API」で新しいAPIキーを発行
「プロジェクト設定」を開き、URL末尾のプロジェクトIDをメモ(あとで使います)
#GASからAPIを叩いて課題一覧を取得する
- スプレッドシートを新規作成
- 「拡張機能」→「Apps Script」をクリック
- 下記コードのAPI Key、スペースID、さきほどメモしたプロジェクトIDを書き換えてコピペ
- 「実行」クリック
const api_key = "【BacklogのAPI Key】"
const space_id = "【スペースID】"
const project_id = "【プロジェクトID】"
function myFunction() {
let spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
let sheet = spreadsheet.getActiveSheet()
let offset = 1
while(-1){
let api_url = "https://" + space_id + ".backlog.jp/api/v2/issues?apiKey=" + api_key + "&projectId%5B%5D=" + project_id + "&sort=status&order=&count=100&offset=" + offset
let response = UrlFetchApp.fetch(api_url)
let issue = JSON.parse(response.getContentText())
let r = 1 + offset
let obj_length = Object.keys(issue).length
for (let i = 0; i < obj_length; i++) {
let j = 1
sheet.getRange(i+r, j++).setValue(issue[i].issueType.name)
sheet.getRange(i+r, j++).setValue(issue[i].status.name)
sheet.getRange(i+r, j++).setValue(issue[i].summary)
sheet.getRange(i+r, j++).setValue(issue[i].assignee ? issue[i].assignee.name : "未設定")
sheet.getRange(i+r, j++).setValue(issue[i].category[0] ? issue[i].category[0].name : "未設定")
sheet.getRange(i+r, j++).setValue(issue[i].issueKey)
sheet.getRange(i+r, j++).setValue(issue[i].priority.name)
sheet.getRange(i+r, j++).setValue(issue[i].milestone[0] ? issue[i].milestone[0].name : "未設定")
sheet.getRange(i+r, j++).setValue("https://" + space_id + ".backlog.jp/view/" + issue[i].issueKey)
}
if (obj_length < 100) break
offset += 100
Utilities.sleep(1000)
}
}
#自動計測する
トリガーで定期実行を設定(毎日、週1回などお好みで)
#まとめ
Backlogから課題一覧を定期的にスプレッドシートで自動取得できるようになれば完成です。
あとは計測したい開発生産性の指標に合わせ、QUERYで集計するだけです。
グラフも作ってわかりやすく可視化しちゃいましょう。
スプレッドシート側の話などはまた機会があれば書きたいと思います。