3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ナイルAdvent Calendar 2021

Day 10

BacklogとGASでかんたん開発生産性自動計測

Last updated at Posted at 2021-12-10

最近、開発チームの生産性向上を目的として、
開発状況の可視化に携わる機会がありました。

開発の生産性を測る指標は様々ありますが、目的により好きなものを選べばいいと思います。
ただし、それを測ること自体に工数やランニングコストがかかっていては本末転倒ですよね。

今回は、自分で勝手に決めた以下の要件を念頭に、
BacklogとGASで開発生産性の計測を自動化した話を書きます。

  1. 工数低い
  2. 汎用性高い
  3. 無料
  4. かんたん

#Backlog APIを使えるようにする
Backlogのアカウント無い方は登録してください。
30日無料ですし、無料期間過ぎてもフリープランがありますよ。
Backlog フリープラン

「個人設定」→「API」で新しいAPIキーを発行
「プロジェクト設定」を開き、URL末尾のプロジェクトIDをメモ(あとで使います)

#GASからAPIを叩いて課題一覧を取得する

  1. スプレッドシートを新規作成
  2. 「拡張機能」→「Apps Script」をクリック
  3. 下記コードのAPI Key、スペースID、さきほどメモしたプロジェクトIDを書き換えてコピペ
  4. 「実行」クリック
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で集計するだけです。
グラフも作ってわかりやすく可視化しちゃいましょう。
スプレッドシート側の話などはまた機会があれば書きたいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?