11
8

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 3 years have passed since last update.

GAS&Backlog APIで必要情報のみを取得して見やすく一覧化する話

Posted at

はじめに

案件管理でツールを使用してますが、「各案件の状況が分かるような一覧資料を別途用意して!」ということが多々あります。
ツールと別途資料準備で2重管理になり、手間と不整合で管理に苦労します。

Backlog(案件管理ツール)のAPIを使用して、GASで必要情報のみを取得して自動で一覧化されるようにしてみました。

Backlogとは

チームのタスク管理ツール( https://backlog.com/ja/
プロジェクトの課題(タスク)を作成して、各タスクに担当・スケジュール等を設定して管理を行います。
BacklogにはAPIが用意されており、プロジェクトに登録した課題データを一括で取得することができます。
また、APIを使用して課題の登録・更新なども行えます。

Backlog APIへの接続

https://(スペースID).backlog.jp/(対象API)?apiKey=(API KEY)

スペースID:Backlog利用開始時に決めたスペースID
対象API:取得したい情報に応じて使用するAPIを指定(※公式サイトにAPIがまとまってます)
API KEY:Backlogにログインして発行したAPI KEY
キータ2.png
※API KEYはBacklogログイン後に個人設定のAPIからKEY生成ができます

APIを叩いてみた

プロジェクト一覧を取得
https://xxx.backlog.jp/api/v2/projects?apiKey=xxx

[
	{
		"id": 123456789,
		"projectKey": "AAA",
		"name": "AAA PRJ",
		"chartEnabled": true,
		"subtaskingEnabled": false,
		"projectLeaderCanEditProjectLeader": false,
		"useWikiTreeView": false,
		"textFormattingRule": "backlog",
		"archived": false,
		"displayOrder": 8,
		"useDevAttributes": true
	},
	{
		"id": 111111111,
		"projectKey": "BBB",
		"name": "BBB管理",
		"chartEnabled": true,
		"subtaskingEnabled": true,
		"projectLeaderCanEditProjectLeader": false,
		"useWikiTreeView": false,
		"textFormattingRule": "backlog",
		"archived": false,
		"displayOrder": 48,
		"useDevAttributes": true
	}
]

対象プロジェクトの課題一覧を取得
https://xxx.backlog.jp/api/v2/issues?apiKey=xxx&projectId[]=(対象プロジェクトのID)

[
	{
		"id": 112233445566,
		"projectId": 111111111,
		"issueKey": "BBB-591",
		"keyId": 591,
		"issueType": {
			"id": 123456794,
			"projectId": 111111111,
			"name": "タスク",
			"color": "#7ea800",
			"displayOrder": 0
		},
		"summary": "アカウント追加対応 2020.7.15",
		"description": "BBB担当者様\n\n体制変更に伴い、アカウント追加よろしくお願いします",
		"resolution": {
			"id": 0,
			"name": "対応済み"
		},
		"priority": {
			"id": 3,
			"name": "中"
		},
		"status": {
			"id": 4,
			"projectId": 111111111,
			"name": "完了",
			"color": "#b0be3c",
			"displayOrder": 4000
		},
		"assignee": {
			"id": 123456794,
			"userId": null,
			"name": "田辺",
			"roleType": 2,
			"lang": null,
			"mailAddress": null,
			"nulabAccount": null,
			"keyword": "田辺"
		},
		"category": [],
		"versions": [],
		"milestone": [],
		"startDate": null,
		"dueDate": null,
		"estimatedHours": null,
		"actualHours": null,
		"parentIssueId": null,
		"createdUser": {
			"id": 1074155555,
			"userId": null,
			"name": "田中",
			"roleType": 2,
			"lang": null,
			"mailAddress": null,
			"nulabAccount": null,
			"keyword": "田中"
		},
		"created": "2020-07-15T07:34:53Z",
		"updatedUser": {
			"id": 10742244444,
			"userId": null,
			"name": "田辺",
			"roleType": 2,
			"lang": null,
			"mailAddress": null,
			"nulabAccount": null,
			"keyword": "田辺"
		},
		"updated": "2020-07-16T02:01:59Z"
	}
]

GAS&Backlog APIでプロジェクト一覧をスプレッドシートに出力

GASコード ※処理中の課題のみを取得して一覧化

function getIssueList() {
  //スペースid
  var space_id = "***";
  // apiKey
  var api_key = "***";
  // 対象prject
  var project_id = "***";

  // スプレッドシート設定
  var targetSS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("IssueList");
  // シート書き込み位置指定(A1)
  var range = targetSS.getRange(1, 1);

  // 課題取得
  var response = UrlFetchApp.fetch("https://" + space_id + ".backlog.jp/api/v2/issues?apiKey=" + api_key + "&projectId[]=" + project_id + "&statusId[]=2");
  var issuelist = JSON.parse(response);

  // シート初期化
  targetSS.getRange("A3:AE" + issuelist.length).clearContent();
  // シートに書き出し
  for (var i = 0; i < issuelist.length; i++) {
    // 種別
    range.offset(i + 2, 0).setValue(issuelist[i]["issueType"]["name"]);
    // 課題ID
    range.offset(i + 2, 1).setValue(issuelist[i]["issueKey"]);
    // 課題名
    range.offset(i + 2, 2).setValue(issuelist[i]["summary"]);
    // 担当者
    range.offset(i + 2, 3).setValue(issuelist[i]["assignee"]["name"])
    // ステータス
    range.offset(i + 2, 4).setValue(issuelist[i]["status"]["name"])
    // 優先度
    range.offset(i + 2, 5).setValue(issuelist[i]["priority"]["name"])
    // 調査工数 ※カスタムフィールド
    range.offset(i + 2, 6).setValue(issuelist[i]["customFields"][5]["value"]["name"])
  }
}

出力結果
キータ.png

データのカスタマイズ

デフォルトでBacklogに用意されている項目だけだと足りないという場合、項目を自由に追加できるカスタムフィールドがあります。
各プロジェクトに特化した項目もカスタムフィールドで設定可能で、上記スクリプト記載の通りissuelist[i]["customFields"][5]のような記述で値が取得できます。
汎用性が高いため、多くのプロジェクトで活用できること間違い無しです。

最後に

今回はBacklogを使用した例を紹介しました。
私のプロジェクトではTrelloも使用しており、こちらもAPIがあるため、同じような形でデータ取得することができます。
他にも案件管理ツールでAPIが用意されているものがあるため、他ツールでも応用して、管理作業を楽にするよう試してみたいと思います!

11
8
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
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?