#はじめに
初めまして、サムザップの白濱です
本記事は、[サムザップ Advent Calendar 2019 #2]
(https://qiita.com/advent-calendar/2019/sumzap2) の12/25の記事です。
今回は、WrikeとAppsScriptを使用してバーンダウンチャートを作成して
運用しましたので、そちらの話をしたいと思います
#作成のきっかけ
タスク消化の管理にWrikeを使用していますが、
プロジェクトの開発が終盤になってくるとタスクの消化の推移を管理する必要がでてきました。
そのため、バーンダウンチャートを作成しようとしましたが、Wrikeにいいチャートがなかったので
自作することにしました
#構成
以下の流れで、バーンダウンチャートを作成しました
- GoogleAppsScriptを毎日実施
- GoogleAppsScriptでWrikeAPIを実施して、タスク情報を取得する
- タスク情報から総タスク数と終了したタスクから、GoogleSpreadシートに日々グラフを作成
#Wrikeから情報を取得する
まず、Wrikeから情報を取得する部分を解説します
-
WrikeのAPIアプリを作成
まず、Wrikeのタスク情報を外部から取得するために、
Wrikeでアプリを作成して、WrikeのTokenを取得しておきます
-
AppsScriptからWrikeのAPIを実施して、タスク情報を取得
WrikeのTokenを使用して、Google AppsScriptからAPIを実施して、情報を取得します
WrikeからいろいろなAPIが提供されています。
こちらを使用して、バーンダウンチャートに必要な様々な情報を取得します
WrikeAPI仕様(v4)
https://developers.wrike.com/documentation/api/overview
・チームメンバーの情報を取得(contacts)
バーンダウン対象のチームメンバーの情報は、ttps://www.wrike.com/api/v4/contacts で取得できます
・タスクのステータスの情報を取得(workflows)
タスクのステータス情報はttps://www.wrike.com/api/v4/workflows で取得できます
・タスク情報を取得(tasks)
タスクの情報は、ttps://www.wrike.com/api/v4/tasks で取得できます
AppsScriptからのAPI実施例
param = workflows
var url = "https://www.wrike.com/api/v4/" + param;
var response = UrlFetchApp.fetch(url,options);
var projects = JSON.parse(response.getContentText());
APIからは以下のようなJSONが返ってきます
{
"kind": "workflows",
"data":
[
{
"id": "IEAAAAJ6K77777WC",
"name": "Default Workflow",
"standard": true,
"hidden": false,
"customStatuses":
[
{
"id": "IEAAAAJ6JMAAAAAA",
"name": "New",
"standardName": true,
"color": "Blue",
"standard": true,
"group": "Active",
"hidden": false
},
#バーンダウン完成イメージ
集計を日々とると、以下のようなバーンダウンが完成しました
#Slack投稿
集計したタイミングで、slackにも日々投稿するようにして、メンバー内で「消化してる感」を共有しました
#作成にあたって注意した点
・taskes APIの取得制限
taskesでは、Wrikeのフォルダ配下のタスクが全て取得できますが、タスク数が大量にある場合は
取得数制限に引っかかってしまいます(MAX 1000件)
プロジェクトが大きくなると、総件数1000件を超えるケースも出てくると思います。
それを回避するため、子フォルダや孫フォルダ単位に小分けにしてAPI取得しました
フォルダ構成は、、ttps://www.wrike.com/api/v4/folders で取得できます
・タスクに複数アサインしている人のカウント
1つのタスクに複数の人がアサインされているケースは多々あります。
複数アサインされているケースを考慮してカウント処理を考慮しないと、タスク数の分析数値が正確にでません
複数アサイン状況の取得は
ttps://www.wrike.com/api/v4/tasks の中のresponsibleIdsで取得します
カウント処理でダブりでカウントしないように気を使いました